我使用此实现创建了一个SWT对话框:
public class FindDialog extends Dialog {
private DialogResult result;
private Display display;
private Shell shell;
private Button okayButton;
/*...*/
public FindDialog(Shell parent) {
this(parent, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
}
public FindDialog(Shell parent, int style) {
super(parent, style);
display = getParent().getDisplay();
initUI();
}
public DialogResult open() {
result = DialogResult.Cancel;
shell.open();
while (shell.isVisible()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
return result;
}
private void initUI() {
shell = new Shell(getParent(), getStyle());
shell.addListener(SWT.Close, new ShellClosingHandler());
okayButton = new Button(shell, SWT.PUSH);
okayButton.addListener(SWT.Selection, new ButtonClickedHandler());
/*...*/
}
private class ButtonClickedHandler implements Listener {
public void handleEvent(Event e) {
Button button = (Button)e.widget;
if (button == okayButton) {
result = DialogResult.OK;
shell.close();
}
}
}
private class ShellClosingHandler implements Listener {
public void handleEvent(Event e) {
if (result == DialogResult.OK) {
e.doit = validate();
}
}
private boolean validate() {
/*...*/
}
}
}
还有一些文字字段,按钮和复选框,但我认为这对我的问题并不重要。
对话框窗口正确弹出,我可以在GUI上进行更改而不会出现任何问题。
最后我点击确定按钮,然后发生以下情况:
SWT.Close事件正在触发,我的验证方法被调用,并且根据结果对话框是否关闭。到目前为止还可以。
但是shell.close()不仅会关闭对话框,还会处理shell。而这正是问题因为
每次调用open方法时,我都不想重建对话框GUI。我在程序启动时创建了所有对话框,然后只在需要时打开和关闭它。
在主程序中的不同位置关闭对话框后,我需要一些文本字段值或复选框状态。因此,保持对话框对象的引用并实现一些getter来提取数据似乎是个好主意。但如果外壳被处理掉,我就没有机会获得这些信息。
如果处理了shell,那么我将松开对话框的“状态”,因此我必须在下次显示对话框时重新填充它。
所以我的问题:是否有可能阻止shell处理? 或者是否有另一个我忽略的概念,所以我不必重构我的完整对话框?
答案 0 :(得分:0)
$('.accordion > dt > a').click(function(event) {
var clickID = event.target.id;
getLogin();
$(this).parent().css('transform','scale(1.1,1.1)');
$(this).parent().next().delay(200).slideDown(600,'linear');
$("#" + clickID +"username").append(makeUsername);
$("#" + clickID +"password").append(makePassword);
$('.downloads').delay(600).slideDown(600);
return false;
});
您可以使用setVisible(false)代替close
所以它会被隐藏而不会被处置。
隐藏
后,您可以获取文本框的值无需再次重建
隐藏后,文本框中的过去值将存在。