我从Java Swing
开始第二天。我遇到post简要解释了不建议使用多个JFrame
的方法。根据答案,我开始使用CardLayout
探索方式。
我的问题是当我拨打pack()
唯一主JFrame
时,它会根据主JPanel
自动打包,其中包含CardLayout
个JPanels
在Netbeans GUI中创建,而不是根据我想要的实际选择JPanel
。
以下是我的主要课程Main
的概述:
private static String[] PANELS = {"A", "B"};
private static JFrame frame;
public static void main(String... args) {
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new Main().initialize();
}
});
}
public void initialize() {
JPanel cards = new JPanel(new CardLayout());
JPanelA a = new JPanelA(cards);
cards.add(a, PANELS[0]);
Main.frame = new JFrame("GUI example");
Main.frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Main.frame.add(cards);
Main.frame.pack();
Main.frame.setLocationByPlatform(true);
Main.frame.setVisible(true);
JPanelB b = new JPanelB(cards);
cards.add(b, PANELS[1]);
}
public static JFrame getFrame() {
return Main.frame;
}
public static String getPanel(int i) {
return PANELS[i];
}
每个JPanel都是在NetBeans GUI中创建的,具有以下内容:
public JPanelA(JPanel parent) {
initComponents();
this.parent = parent;
run();
}
private void run() {
jButton.addActionListener((ActionEvent ae) -> {
Main.getFrame().pack(); // nothing happens
CardLayout cl = (CardLayout) parent.getLayout();
cl.show(parent, Main.getPanel(1));
//Main.getFrame().pack(); // neither anything happens
});
}
主要逻辑JFrame
包含使用JPanel cards
构建的主CardLayout
,其中包含JPanelA a
和JPanelB b
。 JPanelA a
是起始点。
如何切换面板尺寸,而不是最大尺寸?这通常是从Java Swing
和以下应用开始的好方法吗?