Java 创建不同GUI显示对象并使用CardLayout在它们之间切换的最佳方法是什么?(爪哇)
我想创建一个相当简单的GUI程序,根据用户单击的按钮在面板之间切换。我四处搜索,发现卡片布局是最好的建议 基本上,在CardLayout的示例中,您创建一张“卡”(JPanel),然后添加每个组件,如按钮等。。。然后在卡片之间切换Java 创建不同GUI显示对象并使用CardLayout在它们之间切换的最佳方法是什么?(爪哇),java,swing,user-interface,jpanel,cardlayout,Java,Swing,User Interface,Jpanel,Cardlayout,我想创建一个相当简单的GUI程序,根据用户单击的按钮在面板之间切换。我四处搜索,发现卡片布局是最好的建议 基本上,在CardLayout的示例中,您创建一张“卡”(JPanel),然后添加每个组件,如按钮等。。。然后在卡片之间切换 我要创建的是一个对象,它是一张“卡片”,所有组件都已经在一个单独的类中设置好了,只需在主程序中创建一个实例。我是一个初学者,不知道最佳设计实践,所以我不想创建自己的类来扩展JPanel,我很确定这是一个糟糕的设计 您可以像创建JPanel的实例并将组件直接添加到其中一
我要创建的是一个对象,它是一张“卡片”,所有组件都已经在一个单独的类中设置好了,只需在主程序中创建一个实例。我是一个初学者,不知道最佳设计实践,所以我不想创建自己的类来扩展JPanel,我很确定这是一个糟糕的设计 您可以像创建
JPanel
的实例并将组件直接添加到其中一样执行此操作
您需要确保自定义类从JComponent
或JPanel
(最好)扩展,并像任何其他组件一样将它们添加到容器中,例如
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);
}
}
}
这个“卡片”是从
JComponent
扩展而来的吗?很酷,我对这个很陌生,为什么要将btnCard01设置为true,我看不到它被使用,我的代码在没有它的情况下运行。另外,对“卡片”使用内部类还是单独的类文件更好?因为btnCard01
是一个JToggleButton
,我希望按钮与当前屏幕匹配。