【问题标题】:JFrame not opening when a button is clicked单击按钮时JFrame未打开
【发布时间】:2012-03-28 02:43:21
【问题描述】:

我有两个JFrame

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

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

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

【问题讨论】:

标签: java swing jframe


【解决方案1】:

您将必须实例化具有第 2 帧的第 2 类(要显示)..然后如果您调用 setVisible(true)..那么它必须显示..您在做什么..您能提供您的按钮的事件处理程序..

这不是一个好习惯

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

并考虑 cmets .. 优秀的 cmets 人 :) .. 特别是在这种情况下使用 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"));
    }
}    

但我仍然建议切换到我之前提到的其他方法:标签窗格、卡片布局等。 希望我有所帮助:)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-10-05
      • 1970-01-01
      • 2016-12-02
      • 2015-09-13
      • 2013-03-09
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      相关资源
      最近更新 更多