在另一个 class 的 JFrame 上显示 JPanel

Display JPanel on JFrame from another class

使用 NetBeans IDE 和 Java,我对它们都不太熟悉。我有一个 JFrame,上面有一个 JPanel,并说 JPanel 上面有按钮。此 JPanel 在 JFrames class 中。单击其中一个按钮时,我想停止显示此 JPanel,并在不同的 class 中显示另一个 JPanel。我正在使用 GUI 设计器,因此面板处于不同的 classes.

JFrame 中的 buttonclick 事件 class 我有一个按钮:

    private void buttonActionPerformed(ActionEvent e) {                                         
    panel1.setVisible(false);
    Panel2 panel2 = new Panel2();
    this.add(panel2);
    panel2.setVisible(true);

这会产生 panel1 消失的结果,但是由于 panel2 不显示而留下空白的 Jframe。

我看过 CardLayout,但我需要面板上的按钮来发出命令,而不是另一个面板上的按钮在 CardLayout 的面板周围交换。

编辑:已重写问题以实际提供上下文,而不仅仅是 "help pls",因为有人告诉我我的要求太宽泛,这是完全正确的。我才刚刚开始学习 Java 所以如果这仍然是一个广泛的问题,抱歉。

让我们尝试在这里提供一点帮助...

首先,在 action listener 代码中什么都不做多于 "almost" 不是一个好主意。特别是 在该侦听器中实例化 一个新的面板对象是个坏主意。

更合理的方法:先创建所有面板对象。比如:当你的应用程序出现时,可能有一个所需面板对象的列表。然后,在您的动作侦听器代码中,只需添加需要显示的代码,并删除不再需要的代码。

另请注意:

  • 您在动作侦听器中 "do" 发生的任何事情都发生在事件调度程序线程上(转到 google 该术语)。在这里,这可能就是您想要的,但通常不是。
  • 仅仅调用 setVisible() 是不够的。您可能必须触发布局管理器进行重绘。因此决定一个特定的布局管理器,并研究动态 adding/hiding 的组件。

我建议处理 frame1 并设置 frame2 可见,其中 frame1 包含第一个面板,frame2 包含第二个面板,我没有制作 JButton 顺便说一句,我只是给出了一个解决方案,我没有编译它,但我建议这样做类似于此。

JFrame frame1;
JFrame frame2;
JPanel panel1;
JPanel panel2;

public ClassName() {
    frame1 = new JFrame("FIRST FRAME NAME");
    frame2 = new JFrame("SECOND FRAME NAME");

    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame1.setSize(WIDTH , HEIGHT);
    frame1.add(panel1);
    frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame2.setSize(WIDTH , HEIGHT);
    frame2.add(panel2);
    frame1.setVisible(true);
}

 private void buttonActionPerformed(ActionEvent e) {                                         
    frame1.dispose();
    frame2.setVisible(true);
}

public static void main(String[] args) {
    new ClassName();
}


这是您要找的吗?

package project3;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class File2 extends JFrame implements ActionListener{
    
    JPanel panel1;
    JPanel panel2;
    JButton button;
    JLabel label;
    
    public File2() {
        
        panel1 = new JPanel();
        panel2 = new JPanel();
        
        button = new JButton("CLICK ME");
        label = new JLabel("I AM A LABEL");
        
        button.addActionListener(this);
        
        panel1.add(button);
        panel2.add(label);
        
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(400 , 400);
        this.add(panel2);
        this.add(panel1);
        this.setVisible(true);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new File2();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        
        panel1.setVisible(false);
        this.remove(panel1);
        this.add(panel2);
        
    }

}