我的应用程序出现问题,用户一次将打开多个窗口。我添加了dispose()方法来关闭窗口。现在我应该至少保持一个窗口打开,以便应用程序不会在没有完全关闭的情况下隐藏。如果您不明白请阅读以下情形:如何在摆动上打开窗口
我有窗口A和窗口B同时打开。现在我可以关闭窗口A或窗口B,但不能同时关闭。换句话说,只有在窗口A被打开的情况下才允许窗口B关闭,反之亦然。我如何做到这一点在摇摆?
我的应用程序出现问题,用户一次将打开多个窗口。我添加了dispose()方法来关闭窗口。现在我应该至少保持一个窗口打开,以便应用程序不会在没有完全关闭的情况下隐藏。如果您不明白请阅读以下情形:如何在摆动上打开窗口
我有窗口A和窗口B同时打开。现在我可以关闭窗口A或窗口B,但不能同时关闭。换句话说,只有在窗口A被打开的情况下才允许窗口B关闭,反之亦然。我如何做到这一点在摇摆?
一种简单的-的windowManger是不是真的靠谱,你需要的是
一些代码片段:
// the listener (aka: WindowManager)
WindowListener l = new WindowAdapter() {
List<Window> windows = new ArrayList<Window>();
@Override
public void windowOpened(WindowEvent e) {
windows.add(e.getWindow());
}
@Override
public void windowClosing(WindowEvent e) {
if (windows.size() > 1) {
windows.remove(e.getWindow());
e.getWindow().dispose();
}
}
};
// create the first frame
JFrame frame = createFrame(l);
frame.setVisible(true);
// a method to create a new window, config and add the listener
int counter = 0;
private JFrame createFrame(final WindowListener l) {
Action action = new AbstractAction("open new frame: " + counter) {
@Override
public void actionPerformed(ActionEvent e) {
JFrame frame = createFrame(l);
frame.setVisible(true);
}
};
JFrame frame = new JFrame("someFrame " + counter++);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.add(new JButton(action));
frame.addWindowListener(l);
frame.pack();
frame.setLocation(counter * 20, counter * 10);
return frame;
}
只是一种可能的方法...
创建一个类,称之为WindowManager
,管理创建和处理窗口。
它例如可以保留计数当前打开的窗口,并允许脱手操作仅如果有不止一个窗口“活着”,否则显示与JOptionPane
的确认消息,告诉用户“真的结束?那会终止应用程序。“或类似的东西。
“棘手”的部分是,你必须在整个WindowManager
做这种窗口相关的操作,否则一切都会搞砸。
不知道如果Swing有这种内置的东西,我从来没有见过这样的场景。
'“棘手”的部分是,你必须在整个WindowManager中做任何与窗口相关的操作,否则一切都会搞砸。“你是什么意思?我理解为与窗口相关的操作是打开和关闭的。我是否必须担心调整大小,移动等? – Deepak 2011-05-04 22:51:35
不,我只是指出,当用户点击窗口的'x'按钮时,必须在窗口类中处理它,然后委托给'WindowManager'操作的实际逻辑。这有点棘手,但有效。而且,当必须创建新的时候,这必须由经理完成,或者至少通知经理。有点无聊。 [编辑答案] – gd1 2011-05-04 22:53:07
让我看看我是否可以找到一些内置功能...如果没有其他去我应该实现你的想法..通知我,如果你发现相对更容易..谢谢! – Deepak 2011-05-04 23:02:40
只需在window.isVisible()关闭前检查其他窗口是否打开。
[[Action]]的+1(http://download.oracle.com/javase/tutorial/uiswing/misc/action.html)。 – trashgod 2011-05-05 00:33:50
+1非常好的一段代码。 – Boro 2011-05-05 07:54:27
+1从来没有想过这样的想法。 :) – 2012-03-01 06:52:23