单击按钮时JFrame不会打开

时间:2012-03-28 02:43:22

标签: java swing jframe

我有两个JFrame

  1. public class Main extends JFrame
  2. public class ColourOption extends JPanel implements ActionListener然后在JFrame中设置。
  3. 当我点击第一个JFrame的按钮时,我想打开第二个JFrame .setVisible()无效。我还在第二个JFrame中尝试了revalidate(),以及invalidate()validate()

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

2 个答案:

答案 0 :(得分:6)

你必须实例化具有第二帧(显示)的第二类..然后如果你调用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等。 希望我帮助过:)

答案 1 :(得分:4)

因为它们来自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();
      }
   }
}