- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我了解,在 swing 应用程序中,我已将应用程序的 mainFrame
告知 DO_NOTHING_ON_CLOSE
。
public SurveyView(SingleFrameApplication app) throws FileNotFoundException, IOException {
super(app);
initComponents();
JFrame mainFrame = SurveyApp.getApplication().getMainFrame();
mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
//And on and on it goes...
}
显然,我将添加一个窗口监听器以及稍后不要装饰它的内容,但现在,我只需要单击 X 时窗口不关闭。但窗口确实关闭了。
这个操作看起来很简单,我什至不知道如何去调试它。我是否遗漏了一些非常明显的东西?
编辑:这是 SurveyApp 类中的 getApplication 方法:
public static SurveyApp getApplication() {
return Application.getInstance(SurveyApp.class);
}
编辑2:由于 HoverCraft 表明 mainFrame 不是罪魁祸首,也许应用程序结构的概述将为我们指明正确的方向。整个应用程序包含在一个 JPanel mainPanel
中。该面板又包含在 public class SurveyView extends FrameView
内。我的所有组件都添加到面板中,这是一个卡片布局,在几个不同的其他 JPanel 之间循环。据我了解,关闭操作是为框架保留的,而不是为 View 或面板保留的。因此,为什么我的第一个想法是针对应用程序的主框架。
我知道主框架确实存在。我尝试了 System.out.println(SurveyApp.getApplication().getMainFrame()) 并输出了这个怪物(为了可读性而换行):
javax.swing.JFrame[mainFrame,0,0,0x0,invalid,hidden,
layout=java.awt.BorderLayout,title=Accounting Survey,
resizable,normal,defaultCloseOperation=DO_NOTHING_ON_CLOSE,
rootPane=javax.swing.JRootPane[,0,0,0x0,invalid,
layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,
alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],
rootPaneCheckingEnabled=true]
我注意到标题实际上是我的应用程序标题栏中显示的标题。但后来我看到 DO_NOTHING_ON_CLOSE 已设置,正如它应该的那样,但应用程序仍然关闭,这意味着,我认为 Hovercraft 是正确的 - 这不是正确的目标。
Edit3:进一步的研究表明,事实上,netbeans 构建每个面板并将其添加到 mainPanel
中,一旦添加了所有面板,它就会调用 setComponent(mainPanel );
,我假设它是在其他地方建立的,但是整个程序的 Ctrl-F 没有显示任何内容。有更多使用 netbeans 经验的人知道它使用的所有这些方法是在哪里定义的吗?如果我能找到它,我也许能够找出哪个框架需要不关闭集。
Edit4: 好吧,我想我已经很接近了。 mainPanel
被设置为 FrameView
的组件,它似乎是由 java SingleFrameApplication 创建的包装器。我在这里读了一些书:http://bellquel.bo.cnr.it/appframework/org/jdesktop/application/SingleFrameApplication.html看起来我实际上是正确的:由 SFA 创建的框架名为 mainFrame,并且根据文档,“getMainFrame()
返回用于显示此应用程序的 JFrame”。这意味着我瞄准了正确的 JFrame,并且根据我之前的测试,默认的关闭操作实际上被设置为不执行任何操作。那么什么给出呢?我瞄准了正确的框架,它正在正确设置操作,然后它就被忽略了?什么可以覆盖这样的默认关闭操作?
最佳答案
I just need the window to not close when the X is clicked. But the window DOES close.
尝试这个简单的代码
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
System.out.println("closing...");
}
@Override
public void windowClosed(WindowEvent we) {
System.out.println("closed..");
}
});
frame.setVisible(true);
}
}
输出(单击 X 时)
closing...
关于java - 如何调试 DO_NOTHING_ON_CLOSE 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23227806/
我有这段代码: public class Main_class { public static void main(String[] args) { JFrame first
据我了解,在 swing 应用程序中,我已将应用程序的 mainFrame 告知 DO_NOTHING_ON_CLOSE。 public SurveyView(SingleFrameApplicati
我有一个游戏,我试图拦截关闭事件并将用户返回到主菜单。我已经使用 DO_NOTHING_ON_CLOSE 解决了一半问题,但问题是我无法将常规功能返回到菜单屏幕。 您可能知道,问题是,如果 DO_NO
我正在创建一个窗口,我需要通过仅 单击一个按钮来关闭它。 为此,我正在使用 setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)
我是一名优秀的程序员,十分优秀!