我是一名java初学者,我尝试制作一个基本程序,删除Windows中临时文件中的某个文件。当我没有实现JPanel& amp;时,它确实删除了文件而没有任何问题。 JFrame,但从那以后我没有运气。当按下“确定删除”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();
}
}
}
答案 0 :(得分:4)
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的一部分,完全不同。为什么不简单地在System.exit(0);
方法中调用actionPerformed(...)
?
此外,您的代码不应具有任何静态字段或方法,因为这与面向对象编程是对立的。