[英]JFrame not opening when a button is clicked
我有两个JFrame
。
public class Main extends JFrame
public class ColourOption extends JPanel implements ActionListener
,然后在JFrame中对其进行设置。 我想在单击第一个JFrame的按钮时打开第二个JFrame
.setVisible()
无法正常工作。 我还在第二个JFrame中尝试了revalidate()
以及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();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.