当前位置: 首页 > 知识库问答 >
问题:

向JFrame Java Swing添加卡片布局

魏晨
2023-03-14

我是刚到爪哇的。我想把我的cardlayout添加到JFrame中。我之所以要这样做,是因为我可以通过关闭jframe在单击exit按钮时退出框架(窗口)。下面的程序是对JFrame的扩展。但我想声明JFrame,并在上面添加卡片。我试过了,但没有成功。我还想把card1的Jpanel设置为500(宽),500(高),但全屏显示。

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class TestCard extends JFrame {
    JButton b;
    JTextArea TA;
    JPanel cards;
    JPanel card1;
    JPanel card2;
    CardLayout card;
    final String card1Text = "One";
    final String card2Text = "Two";

    TestCard() {       
        myCard();       
    }

    public void myCard() {

        card = new CardLayout();
        cards = new JPanel(card);

        card1 = new JPanel(null);    
        card1.setBackground(new Color(255,0,0));
        card1.setPreferredSize(new Dimension(500, 500));

        cards.add(card1, card1Text);

            b = new JButton("Exit");
            b.setBounds(300, 500, 170, 50);
            b.setBackground(Color.yellow);
            card1.add(b);

            TA = new JTextArea();    
            TA.setBounds(300,200,500,250);
            TA.setBackground(Color.white);
            card1.add(TA);


            add(cards);

            card.show(cards, card1Text);

            b.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                }
            });
    }

    public static void main(String[] args) {
        TestCard cardLayoutTest = new TestCard();
        cardLayoutTest.setVisible(true);       
        cardLayoutTest.setExtendedState(JFrame.MAXIMIZED_BOTH);    
    }

}

共有1个答案

壤驷德宇
2023-03-14

但我想声明JFrame,并在上面添加卡片

关于JFrame您首先需要了解的一件事是:它是多层的...

当您将组件添加到JFrame中时,它们(通常)会添加ContentPane中。查看如何使用根窗格。

import java.awt.CardLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestCard {

    public static void main(String[] args) {
        new TestCard();
    }

    public TestCard() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

好吧,那不是很刺激,我们需要在上面显示一些东西...

public class ACardPane extends JPanel {

    private JButton btn;
    private JTextArea textArea;

    public ACardPane() {
        setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridwidth = GridBagConstraints.REMAINDER;

        btn = new JButton("Exit");
        add(btn, gbc);

        gbc.weightx = 1;
        gbc.weighty = 1;
        gbc.fill = GridBagConstraints.BOTH;
        textArea = new JTextArea(20, 40);
        add(new JScrollPane(textArea), gbc);
    }

}

好了,现在我们需要把这个加到框架里....

我们需要把起始代码修改成这样...

JFrame frame = new JFrame("Testing");

CardLayout cardLayout = new CardLayout();
frame.setLayout(cardLayout);
frame.add(new ACardPane(), "One");
cardLayout.show(frame.getContentPane(), "One");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

frame.setVisible(true);
  • 使用Swing创建GUI
  • 在容器中布局组件
  • 如何使用滚动窗格
 类似资料:
  • 我试图得到一个布局就像下面的图像为一个游戏在android studio 当前我的xml是 我想在下一个级别增加更多的卡(如lvl 2)我需要为每个级别做几个布局吗?

  • 动态像scrollview中增添内容(demo中是增添图片)。当增添的图片超过视图宽度时,scrollview可以左右滚动查看完整内容。每增添一张图片,增加按钮会往左移动,清空所有图片后,按钮会滑动回原来的位置。 [Code4App.com]

  • 我正在学习Android Udacity课程,它已经过时了,所以我尝试通过手动添加一个片段到主活动中来更新它。这段代码构建得很好,但是当应用程序启动时,在android monitor中出现了一个很长的错误。 XML fragment_main.xml activity_main.xml list_itemm_forecast.xml 日志 06-23 11:23:02.878 3095-3095

  • 我必须为学校制作一个游戏,而且我在点击jb按钮切换jpanel时遇到了一些麻烦。我想使用CardLayout,但我对Java还不熟悉,这使得它非常困难。我的目标是将我的所有面板放在不同的类中,比如类“Panel 1”,类“Panel 2”等等(而不是在我的主(JFrame)类中创建我的JPanel,这样我的代码更容易阅读)。是否可以将CardLayout容器放入包含my JFrame的类中?还有,

  • 描述 (Description) 卡片HTML布局包含许多类,如下所示 - S.No 课程和描述 1 cards 这是卡片容器。 2 card-header 它是可选的卡片标题,用于显示卡片标题。 3 card-footer 它是可选的,用于指定其他信息或自定义链接。 4 card-content 它是卡内容的主要容器,是必需的。 5 card-content-inner 它是可选的附加内包装,用

  • 本文向大家介绍向Bootstrap 4卡添加灰色背景色,包括了向Bootstrap 4卡添加灰色背景色的使用技巧和注意事项,需要的朋友参考一下 要为Bootstrap 4卡添加灰色背景色,请将该卡类与bg-dark上下文类一起使用- 将卡主体设置在相同的<div>类中- 让我们看看完整的示例,向Bootstrap卡添加灰色背景色- 示例