我使用库方法创建,显示和返回JFrame:
public JFrame displayChart() {
final JFrame frame = new JFrame(windowTitle);
javax.swing.SwingUtilities.invokeLater(new Runnable() {
...
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
...
frame.pack();
frame.setVisible(true);
}
return frame;
}
当我在退回的框架上调用setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)
时,它似乎没有任何效果。
如何更改创建不受您控制的帧的关闭操作?
答案 0 :(得分:3)
看起来像竞争条件。如果您只是在返回的框架上调用set
,那么 - 稍后 - 他们的invokeLater
将会执行,从而覆盖您的更改。
将您的更改放入另一个invokeLater
:
public void yourMethod() {
JFrame frame = framework.displayChart();
javax.swing.SwingUtilities.invokeLater(new Runnable() {
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
}
}
Swing将按顺序执行它们,这意味着你的最后一次。
答案 1 :(得分:0)
您可以覆盖该方法并更改框架的创建。 如果您想在按下红色按钮时关闭框架,请更改
带有“WindowConstants.EXIT_ON_CLOSE”的“WindowConstants.DO_NOTHING_ON_CLOSE” 如果使用WindowConstants.DO_NOTHING_ON_CLOSE,即使单击红色按钮,也不会对jFame产生任何影响。或者如果您的程序可能会被关闭,那么它将不会产生任何影响。