用Java关闭框架

时间:2012-10-03 23:52:58

标签: java

我想知道是否有人可以向我解释为什么我的这个不能编译?当用户点击[x]按钮时,我试图在java中关闭一个Frame。我不确定你是否需要一个听众或类似的东西在java中,但因为我一直在查找这个问题,似乎这就是你需要的。

import javax.swing.JFrame;

public class BallWorld
{
  public static void main( String[] args )
  {
    BallWorldFrame world = new BallWorldFrame();
    world.setDefaultCloseOperation(world.DISPOSE_ON_CLOSE);
    world.setVisible( true );

   }


  }

2 个答案:

答案 0 :(得分:1)

这不起作用的原因是因为您的BallWorldFrame类没有您尝试调用的方法。试试这个:

public class BallWorldFrame extends JFrame {
    ...
}

请注意,我们正在扩展JFrame,从而允许我们使用setDefaultCloseOperationsetVisible等方法。


现在要创建一个关闭框架的按钮,您需要使用ActionListener。你可以尝试这样的东西(把所有东西放在一个单独的类中):

public class BallWorld extends JFrame implements ActionListener {

    private JButton x;

    public BallWorld() {
        x = new JButton("x");
        x.addActionListener(this);
        add(x);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        new BallWorld();
    }

    public void actionPerformed(ActionEvent e) {
        dispose();  // close the frame
    }
}

注意我们的班级现在如何实施ActionListener并覆盖actionPerformed来关闭框架。 x.addActionListener(this)表示“单击'x'按钮时,执行我们班级actionPerformed方法中定义的操作,即关闭框架。”

答案 1 :(得分:0)

根据您的说法,听起来您的BallWorldFrame不会从JFrame延伸,因为默认关闭操作是JFrame的独有功能

尝试一个更简单的例子:

public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {

            BallWorldFrame world = new BallWorldFrame();
            // All these compile and run without issue...
            world.setDefaultCloseOperation(world.DISPOSE_ON_CLOSE);
            world.setDefaultCloseOperation(BallWorldFrame.DISPOSE_ON_CLOSE);
            world.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            world.setVisible(true);

        }
    });

}

public static class BallWorldFrame extends JFrame {
}

nb static decleration来自这样一个事实:在我的例子中,BallWorldFrame是我主类的内部类。如果您的BallWorldFrame存在于其自己的类文件中,则不需要它。