Java GUI关闭问题?

Java GUI关闭问题?,java,swing,user-interface,Java,Swing,User Interface,我有一个程序,它显示两个按钮,并在翻滚时更改其中一个按钮的图像。我的电脑出现了一个错误 press.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 部分,看起来是这样的:类型ButtonClass的方法setDefaultCloseOperation(int)未定义。即使关闭时退出,也会出现更多错误,请帮助 主类(有错误): ButtonClass类: package Buttons; import java.awt.FlowLayout; /

我有一个程序,它显示两个按钮,并在翻滚时更改其中一个按钮的图像。我的电脑出现了一个错误

press.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
部分,看起来是这样的:类型ButtonClass的方法setDefaultCloseOperation(int)未定义。即使关闭时退出,也会出现更多错误,请帮助

主类(有错误):

ButtonClass类:

package Buttons;

import java.awt.FlowLayout; //layout proper
import java.awt.event.ActionListener; //Waits for users action
import java.awt.event.ActionEvent; //Users action
import javax.swing.JFrame; //Window
import javax.swing.JButton; //BUTTON!!!
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane; //Standard dialogue box

public class ButtonClass extends JButton {

private JButton regular;
private JButton custom;

public ButtonClass() { // Constructor
    super("The title"); // Title
    setLayout(new FlowLayout()); // Default layout

    regular = new JButton("Regular Button");
    add(regular);

    Icon b = new ImageIcon(getClass().getResource("img.png"));
    Icon x = new ImageIcon(getClass().getResource("swag.png"));
    custom = new JButton("Custom", b);
    custom.setRolloverIcon(x); //When you roll over the button that says custom the image will change from b to x
    add(custom);

    Handlerclass handler = new Handlerclass();
    regular.addActionListener(handler);
    custom.addActionListener(handler);

}

 private class Handlerclass implements ActionListener { // This class is inside the other  class


    public void actionPerformed(ActionEvent eventvar) { // This will happen
                                                        // when button is
                                                        // clicked
        JOptionPane.showMessageDialog(null, String.format("%s", eventvar.getActionCommand()));//Opens a new window with the name of the button
    }
}



}
我到处找这个问题,什么也没找到。请告诉我如何解决有关退出窗口的问题。
谢谢

该方法是为
JFrame
而不是
JButton
定义的。您在一个类的实例上调用它,该类扩展了
JButton

该方法是为
JFrame
定义的,而不是
JButton
。您在一个扩展了JButton的类的实例上调用它,您在创建一个扩展JButton的类时有点困惑,并且在它上调用
setVisible(true)
,就好像它是一个顶级窗口,比如JFrame或JDialog,这是没有意义的。因为它不是顶级窗口,所以不使用默认的关闭操作或者不理解这意味着什么也是有意义的

我建议您仅在顶级窗口(如JFrame或JDialog等)上调用此方法。作为附带建议,我通常避免
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)setDefaultCloseOperation(JFrame.DISPOSE\u ON\u CLOSE)这给了它更多的灵活性

编辑:实际上,只需将类更改为extensedjframe而不是extensedjbutton

确保资源的映像路径正确。例如:


当您创建一个扩展JButton的类,并在其上调用
setVisible(true)
时,您有点困惑,好像它是一个顶级窗口,如JFrame或JDialog,这没有意义。因为它不是顶级窗口,所以不使用默认的关闭操作或者不理解这意味着什么也是有意义的

我建议您仅在顶级窗口(如JFrame或JDialog等)上调用此方法。作为附带建议,我通常避免
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)setDefaultCloseOperation(JFrame.DISPOSE\u ON\u CLOSE)这给了它更多的灵活性

编辑:实际上,只需将类更改为extensedjframe而不是extensedjbutton

确保资源的映像路径正确。例如:


JFrame.Exit\u on\u close必须在JFrame中使用,并且您正在从JButton进行扩展

要设置一个JButton来关闭JFrame,它是这样的

public class MyClass extends JFrame implements ActionListener{

    private JButton button = new JButton("Button");
    private JPanel panel = new JPanel();

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

    public MyClass() {
        setSize(300, 300);
        button.addActionListener(this);


        panel.add(button);
        add(panel);

        setVisible(true);

    }

    @Override
    public void actionPerformed(ActionEvent e) {

        this.dispose();
    }


}

JFrame.Exit_on_close必须在JFrame中使用,并且您是从JButton进行扩展的

要设置一个JButton来关闭JFrame,它是这样的

public class MyClass extends JFrame implements ActionListener{

    private JButton button = new JButton("Button");
    private JPanel panel = new JPanel();

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

    public MyClass() {
        setSize(300, 300);
        button.addActionListener(this);


        panel.add(button);
        add(panel);

        setVisible(true);

    }

    @Override
    public void actionPerformed(ActionEvent e) {

        this.dispose();
    }


}


你想退出一个按钮吗?不,我不想退出窗口,它由一个按钮组成。这是在这里完成的,对吗?按.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);我应该把那个部分放在哪里?
public class button类扩展JButton
No,它不是一个JFrame。所以你想退出一个按钮吗?不,我不想退出包含按钮的窗口。这是在这里完成的,对吗?按.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);我应该把那部分放在哪里?
公共类按钮class扩展了JButton
不,它不是JFrame。那么我该怎么称呼它呢?那么我该怎么称呼它呢?谢谢你这么多充满鳗鱼的气垫船,最初的错误消失了,但现在我有了这个错误:线程“main”中的异常java.lang.NullPointerException位于javax.swing.ImageIcon。(未知源)位于Buttons.ButtonClass。(ButtonClass.java:24)位于Buttons.Main_Buttons.Main(Main_Buttons.java:8)请解释如何修复它。非常感谢你!我想那一行可能仍然有编译器错误。。。?请help@Billybobsteven:当代码编译并运行时,此异常不是编译器错误。你的图片找不到,因为你可能找不到合适的位置。太棒了!非常感谢你,它成功了!在网上搜索了几天之后,我找到了答案!我已经标记了您的最佳答案,并将在我获得15个声誉后立即点击“喜欢”按钮!不过我还有一个问题:我的自定义按钮比常规按钮大得多,我能改变大小并保持图像(和翻滚图像)的比例吗?再一次,我非常感谢你付出的辛勤工作和时间,做出了如此谨慎而有益的回答!谢谢你这么多充满鳗鱼的气垫船,最初的错误消失了,但现在我有了这个错误:javax.swing.ImageIcon的线程“main”java.lang.NullPointerException中的异常。(未知源代码)在Buttons.ButtonClass。(ButtonClass.java:24)在Buttons.main_Buttons.main(Main_buttons.java:8)请解释如何修复它。非常感谢!我想那一行可能仍然有编译器错误…?请help@Billybobsteven:当您的代码编译并运行时,此异常不是编译器错误。找不到您的图像,因为您可能没有在正确的位置查找它们。太棒了!非常感谢您的帮助!之后在网上搜索了几天,我找到了答案!我已经为你标记了最佳答案,并将在我获得15个声誉后立即点击“like”按钮!不过我还有一个问题:我的自定义按钮比常规按钮大得多,我可以更改大小并保留图像(和翻滚图像)吗相称?再一次,我非常感谢你付出的辛勤工作和时间,做出了如此谨慎而有益的回答!