我正在与JPanels斗争。我想有1个框架,我放置1个MainJPanel然后我添加一些JPanel Forms将其设置为我的MainJPanel的源。 然后在JPanel Forms
之间切换我在Main.java框架中有这个:
public class Main extends javax.swing.JFrame {
PanelForm1 p1 = new PanelForm1();
PanelForm2 p2 = new PanelForm2();
GridBagLayout layout = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
public Main() {
initComponents();
MainJPanel.setLayout(layout);
c.gridx = 0;
c.gridy = 0;
MainJPanel.add(p1,c);
c.gridx = 0;
c.gridy = 0;
MainJPanel.add(p2,c);
m.p1.setVisible(true);
m.p2.setVisible(false);
}
}
在PanelForm1.java中,我的ButtonClick尝试显示Panel2Form。
public class Panel1 extends javax.swing.JPanel {
public Panel1() {
initComponents();
}
private void ButtonGoToPanel2ActionPerformed(java.awt.event.ActionEvent evt) {
Main m = new Main();
m.p1.setVisible(false);
m.p2.setVisible(true);
}
}
Panel2Form.java可能是相同的。
我能做到的唯一方法是在Main.java中使用按钮,但我不想拥有始终可见的按钮。
我知道,当我创建一个类对象Main m = new Main();
时,我会复制p1
和p2
等新副本,所以我没有改变任何内容。
有人可以帮忙吗?或者还有另一种更好的方法吗? 我不想把所有东西都放在一个文件中,因为它不清楚,而且像CardLayout这样的每个方法都不会去,因为我不想总是有按钮来切换JPanel Forms。
答案 0 :(得分:2)
然后在JPanel Forms
之间切换
所以你应该使用make clang-format
。有关工作示例,请参阅How to Use CardLayout上的Swing教程中的部分。
我能做到的唯一方法是在Main.java中设置按钮,但我不想拥有始终可见的按钮
好吧,小组不会自行切换,所以你需要处理某种事件来启动面板的交换:
然后将参数从子面板传递到主面板,指示要显示的面板。
我不希望将所有内容都放在一个文件中,因为它不会很清楚
无需将所有内容都放在一个文件中。子面板需要有权访问父面板。
一种方法是传递参数:
CardLayout
并且像CardLayout这样的每个方法都不会去,因为我不想总是有按钮来切换JPanel Forms
是的,您可以使用JPanel main = new JPanel();
JPanel child1 = new ChildPanel(main);
main.add(child1);
JPanel child2 = new ChildPanel(main);
main.add(child2);
。不,你不需要按钮。您所需要的只是"面板名称"你想要显示。然后通过CardLayout通知面板。