Java 单击按钮时JFrame未打开

Java 单击按钮时JFrame未打开,java,swing,jframe,Java,Swing,Jframe,我有两个JFrame public类Main扩展JFrame 公共类colorOption扩展了JPanel实现ActionListener,然后在JFrame中进行设置 当我点击第一个JFrame的按钮时,我想打开第二个JFrame .setVisible()不工作。我还在第二个JFrame中尝试了revalidate(),以及invalidate(),validate() 它不起作用的原因是什么?因为它们来自两个不同的类,所以您只需定义/实例化另一个类的对象。。。如果在第二个类(colorO

我有两个
JFrame

  • public类Main扩展JFrame
  • 公共类colorOption扩展了JPanel实现ActionListener
    ,然后在JFrame中进行设置 当我点击第一个JFrame的按钮时,我想打开第二个JFrame
    .setVisible()
    不工作。我还在第二个JFrame中尝试了
    revalidate()
    ,以及
    invalidate()
    validate()


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

    因为它们来自两个不同的类,所以您只需定义/实例化另一个类的对象。。。如果在第二个类(colorOption)中,它已经包含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();
          }
       }
    }
    

    您必须实例化第二个类,该类具有第二个帧(要显示)…然后如果调用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"));
        }
    }    
    
    但我仍然建议切换到我前面提到的其他方法:选项卡窗格、卡片布局等。。
    希望我能帮忙:)

    看看这个例子。这可能会对你有用。1)要更快地获得更好的帮助,请发布一篇文章。2) “我有两个JFrame。”请看,第二个依赖窗口应该是JDialog,而不是JFrame。