使用NetBeans IDE和Java,我对它们都不熟悉。我在JFrame上布置了一个JPanel,并说JPanel上面有按钮。此JPanel在JFrames类中。当单击这些按钮之一时,我想停止显示此JPanel,并在另一个类中显示另一个JPanel。我使用的是GUI设计器,因此面板位于不同的类中。
JFrame类中我所拥有的按钮之一的buttonclick事件:
private void buttonActionPerformed(ActionEvent e) {
panel1.setVisible(false);
Panel2 panel2 = new Panel2();
this.add(panel2);
panel2.setVisible(true);
这将导致panel1消失的结果,但是由于panel2不显示而留下空白的Jframe。
我看过CardLayout,但是我需要面板上的按钮来发出命令,而不是另一个面板上的按钮围绕CardLayout的面板交换。
编辑:已经重写了问题,以实际提供上下文,而不仅仅是“帮助请”,因为有人告诉我我所问的内容太广泛了,这是完全正确的。我才刚刚开始学习Java,因此,如果仍然要对此道歉,很抱歉。
答案 0 :(得分:0)
让我们在这里有所帮助...
首先,在动作侦听器代码中做“几乎”什么都不做不是一个好主意。尤其是实例化该侦听器中的新面板对象是一个坏主意。
更合理的方法:预先创建所有面板对象。像:当您的应用程序启动时,可能会列出所需的面板对象。然后,在您的动作侦听器代码中,只需添加需要显示的代码,然后删除不再需要的代码即可。
还请注意:
答案 1 :(得分:0)
我建议处理 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();
}
答案 2 :(得分:0)
这是您要找的吗?
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);
}
}