单击按钮时JFrame不会打开

我有两个JFrame

  1. public class Main extends JFrame
  2. public class ColourOption extends JPanel implements ActionListener ,然后在JFrame中设置它。

当我点击第一个JFrame的按钮时,我想打开第二个JFrame
.setVisible()不起作用。 我还尝试了revalidate() ,以及第二个JFrame中的invalidate()validate()

它不起作用的原因是什么?

你将不得不实例化第二个具有第二帧(将要显示)的类……然后如果你调用setVisible(true)..然后它必须显示..你在做什么..你能提供你的按钮的事件处理程序吗? ..

这不是好习惯

所以我个人建议你切换到更好的替代品,如JTABBEDPANES或CARDLAYOUT

并考虑评论..好评论家伙:) ..特别是使用JDialog这个上下文:)

好吧,如果你仍然需要在你的背景下的帮助:样本:

 import javax.swing.*; import java.awt.*; import java.awt.event.*; class JFrame1 extends JFrame { public JFrame1() { setLayout(new FlowLayout()); JButton b=new JButton("Click"); add(b); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { JFrame jf = new JFrame2(); jf.setVisible(true); jf.setSize(200, 200); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } ); } public static void main(String args[]) { JFrame jf = new JFrame1(); jf.setVisible(true); jf.setSize(200, 200); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } 

和第二课:

 import javax.swing.*; import java.awt.*; class JFrame2 extends JFrame { public JFrame2() { setLayout(new FlowLayout()); add(new JLabel("2nd Frame")); } } 

但我仍然建议切换到我之前提到的其他方法:tabbedpanes,cardlayout等..希望我帮助:)

因为它们来自2个不同的类,所以你只需要定义/实例化另一个类的对象……如果在第二个类(ColourOption)中它已经包含了setVisible(true),那么加载窗口一定没有问题。

  //this will be placed on your constructor yourButton.addActionListener(new ButtonListener()); //listener class class ButtonListener implements ActionListener{ public void actionPerformed(ActionEvent ae){ if(ae.getSource() == yourButton){ new ColourOption(); } } }