单击按钮时JFrame不会打开
我有两个JFrame
。
-
public class Main extends JFrame
-
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(); } } }