【问题标题】:JButton not doing what it's supposed to doJButton 没有做它应该做的事情
【发布时间】:2025-12-24 01:15:07
【问题描述】:

我是一名 java 初学者,我尝试制作一个基本程序,该程序将删除 Windows 临时文件中的某个文件。当我没有实现 JPanel 和 JFrame 时,它​​确实毫无问题地删除了文件,但从那以后我没有任何运气。应该在按下“确定删除”jbutton 时删除文件,并在按下“exit”jbutton 时退出程序。它现在所做的只是调出 GUI,仅此而已。甚至没有系统输出打印。代码如下:

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;


    /**
    * Created with IntelliJ IDEA.
    * User: Andrew
    * Date: 12/4/12
    * Time: 7:09 PM
    * To change this template use File | Settings | File Templates.
    */

    public class DeleteFile {

    public static void main (String args[]) throws IOException {
        frame.setVisible(true);
        frame.setName(boxname);
        frame.setSize(100, 150);
        frame.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        button1.setText(buttontext);
        button1.setVisible(true);
        button1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

            }
        });
        class Action1 implements ActionListener {
            public void actionPerformed (ActionEvent e) {
                deleteFile();
                JLabel label = new JLabel("Deletion was successful");
                JPanel panel = new JPanel();
                panel.add(label);
            }
        }
        class Action2 implements ActionListener {
            public void actionPerformed (ActionEvent e) {

            }
            public void windowEvent (WindowEvent e) {
                System.exit(0);
            }
        }

        JPanel panel = new JPanel();
        frame.add(panel);
        JButton button = new JButton("Delete for sure?");
        panel.add(button);
        button.addActionListener (new Action1());
        panel.setName(boxname);

        JButton button2 = new JButton("Exit");
        panel.add(button2);
        button2.addActionListener (new Action2());

       // JLabel label = new JLabel(filePath);
       // panel.add(label);




    }






    static String buttontext = "Delete file for sure?";
    static String boxname = "Trepix Temp File Deleter";
    static String filePath = "C:\\Users\\Andrew\\AppData\\Local\\Temp\\CamRec0\\cursor-1.ico";
    static JFrame frame = new JFrame();
    static JButton button1 = new JButton();
    static JPanel panel = new JPanel();







    public static boolean fileIsValid() {
        File file = new File(filePath);

        if (file.exists()) {
            return true;


        } else {
            return false;
        }

    }

    public static void deleteFile() {
        if (fileIsValid() == true) {
            File file = new File(filePath);
            file.delete();

        }
    }




}

【问题讨论】:

    标签: java swing jpanel jbutton jlabel


    【解决方案1】:
        class Action1 implements ActionListener {
            public void actionPerformed (ActionEvent e) {
                deleteFile();
                JLabel label = new JLabel("Deletion was successful");
                JPanel panel = new JPanel();
                panel.add(label);
            }
        }
    

    面板对象永远不会放置在任何容器中,该容器是通向*窗口的层次结构的一部分。换句话说,它没有放置在 JFrame 或 JDialog 中的任何内容中,因此它永远不会被显示。

        class Action2 implements ActionListener {
            public void actionPerformed (ActionEvent e) {
    
            }
            public void windowEvent (WindowEvent e) {
                System.exit(0);
            }
        }
    

    将此 windowEvent 方法放在 ActionListener 中是没有意义的,因为它是 WindowListener 的一部分,完全不同。为什么不在actionPerformed(...) 方法中简单地调用System.exit(0);

    此外,您的代码不应包含任何与面向对象编程相反的静态字段或方法。

    【讨论】:

    • @MadProgrammer:抱歉——您似乎正忙于编辑 OP。但是知道你的聪明才智,你可能会发布更好的东西。
    • 你的回答几乎是我输入的内容 8P