gpt4 book ai didi

java - 创建不同的 GUI 显示对象并使用 CardLayout 在它们之间切换的最佳方法是什么? ( java )

转载 作者:行者123 更新时间:2023-12-01 12:50:15 24 4
gpt4 key购买 nike

我想创建一个相当简单的 GUI 程序,根据用户单击的按钮在面板之间切换。我四处搜索并提出 CardLayout 是最好的建议。

基本上,在 CardLayout 的示例中,您创建一个“卡片”(JPanel),然后添加每个组件,如按钮等......并在卡片之间切换。

我想要创建的是一个对象,它是一张“卡片”,所有组件都已在单独的类中设置,并且只需在主程序中创建该对象的实例。我是一个初学者,不知道最好的设计实践,所以我不想创建自己的扩展 JPanel 的类,我很确定这是糟糕的设计。

最佳答案

就像创建 JPanel 实例并将组件直接添加到其中一样。

您需要确保自定义类从 JComponentJPanel (最好)扩展,并将它们像任何其他组件一样添加到容器中,例如......

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
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) {
}

final CardLayout cardLayout = new CardLayout();
final JPanel cardPane = new JPanel(cardLayout);
cardPane.add(new Card01(), "Card01");
cardPane.add(new Card02(), "Card02");

JToggleButton btnCard01 = new JToggleButton("#1");
JToggleButton btnCard02 = new JToggleButton("#2");
ButtonGroup bg = new ButtonGroup();
bg.add(btnCard01);
bg.add(btnCard02);
JPanel buttons = new JPanel();
buttons.add(btnCard01);
buttons.add(btnCard02);

btnCard01.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cardLayout.show(cardPane, "Card01");
}
});
btnCard02.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cardLayout.show(cardPane, "Card02");
}
});
btnCard01.setSelected(true);

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(cardPane);
frame.add(buttons, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class Card01 extends JPanel {

public Card01() {
setLayout(new GridBagLayout());
add(new JLabel("#1"));
}

@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}

public class Card02 extends JPanel {

public Card02() {
setLayout(new GridBagLayout());
add(new JLabel("#2"));
}

@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}

}

关于java - 创建不同的 GUI 显示对象并使用 CardLayout 在它们之间切换的最佳方法是什么? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24276273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com