Java 是否将事件添加到操作侦听器而不删除默认操作?
我想这样做,当我关闭我的GUI时,它将在我的主类中运行一个方法,但之后也会关闭Java 是否将事件添加到操作侦听器而不删除默认操作?,java,Java,我想这样做,当我关闭我的GUI时,它将在我的主类中运行一个方法,但之后也会关闭 如果您正在使用Java Swing,请提供帮助,谢谢: JFrame frame = new JFrame(); frame.setTitle("Project Planner"); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); frame.addWindowListener(new WindowAdapter(
如果您正在使用Java Swing,请提供帮助,谢谢:
JFrame frame = new JFrame();
frame.setTitle("Project Planner");
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent event) {
exitProcedure();
}
});
只需在dispose方法之前添加您想要执行的操作。尝试在GUI的
addWindowListener()
方法中实现WindowAdapter
。为此,您需要将WindowListener
注册到相关的JFrame
。并重写windowClosing()
方法
EDIT要从字符串数组中随机选择字符串,可以使用API。例如,这里有一个
String
数组,每次关闭JFrame
时,都会从该数组中随机选择一个字符串,并在callmebeforexit
方法中打印出来
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;
import java.awt.BorderLayout;
import java.util.Random;
class WorkBeforeClose extends JFrame
{
String[] strings = {
"Hello",
"World",
"Java",
"OOPs"
};
public void showGUI()
{
setTitle("Close me");
getContentPane().add(new JLabel("Close me"),BorderLayout.NORTH);
addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent evt)
{
callMeBeforeExit();
System.exit(0);//Don't write this line if you don't want your program to exit
}
});
setSize(200,200);
setVisible(true);
}
private void callMeBeforeExit()
{
Random random = new Random();
int i = random.nextInt(strings.length - 1);//Defines the Range of numbers to be chosen randomly.
System.out.println(strings[i]);
}
public static void main(String st[])
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
WorkBeforeClose wbc = new WorkBeforeClose();
wbc.showGUI();
}
});
}
}
另一个问题是,我希望随机选取一个字符串,然后将其放入system.out.println?我该怎么做,thanks@JoshuaBaron您将这些字符串
存储在字符串
的数组
中?@JoshuaBaron:观看编辑后的答案。
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;
import java.awt.BorderLayout;
import java.util.Random;
class WorkBeforeClose extends JFrame
{
String[] strings = {
"Hello",
"World",
"Java",
"OOPs"
};
public void showGUI()
{
setTitle("Close me");
getContentPane().add(new JLabel("Close me"),BorderLayout.NORTH);
addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent evt)
{
callMeBeforeExit();
System.exit(0);//Don't write this line if you don't want your program to exit
}
});
setSize(200,200);
setVisible(true);
}
private void callMeBeforeExit()
{
Random random = new Random();
int i = random.nextInt(strings.length - 1);//Defines the Range of numbers to be chosen randomly.
System.out.println(strings[i]);
}
public static void main(String st[])
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
WorkBeforeClose wbc = new WorkBeforeClose();
wbc.showGUI();
}
});
}
}