在Java框架中切换JPanel表单

时间:2016-04-22 15:42:39

标签: java swing jframe jpanel layout-manager

我正在与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();时,我会复制p1p2等新副本,所以我没有改变任何内容。

有人可以帮忙吗?或者还有另一种更好的方法吗? 我不想把所有东西都放在一个文件中,因为它不清楚,而且像CardLayout这样的每个方法都不会去,因为我不想总是有按钮来切换JPanel Forms。

1 个答案:

答案 0 :(得分:2)

  

然后在JPanel Forms

之间切换

所以你应该使用make clang-format。有关工作示例,请参阅How to Use CardLayout上的Swing教程中的部分。

  

我能做到的唯一方法是在Main.java中设置按钮,但我不想拥有始终可见的按钮

好吧,小组不会自行切换,所以你需要处理某种事件来启动面板的交换:

  1. 用户点击菜单项
  2. 用户点击按钮
  3. 用户输入击键
  4. 应用程序切换面板
  5. 然后将参数从子面板传递到主面板,指示要显示的面板。

      

    我不希望将所有内容都放在一个文件中,因为它不会很清楚

    无需将所有内容都放在一个文件中。子面板需要有权访问父面板。

    一种方法是传递参数:

    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通知面板。