我在按钮栏中有一个JFace对话框和一个切换按钮(其文本是“冻结”或“解冻”)。
最初我选择一个对象并单击菜单项以打开对话框。
从那时起,每当我点击切换按钮时(当文本上的文字为“解冻”时),对话框应关闭并重新打开。
我如何实现这一目标?
答案 0 :(得分:0)
这应该让你知道如何做到这一点(快速破解):
private static MyDialog dialog;
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final Button openDialog = new Button(shell, SWT.TOGGLE);
openDialog.setText("Toggle dialog");
openDialog.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event arg0)
{
if (openDialog.getSelection())
{
if (dialog == null)
{
dialog = new MyDialog(new Shell(display));
dialog.open();
}
if(dialog.getShell() != null && !dialog.getShell().isDisposed())
dialog.getShell().setVisible(openDialog.getSelection());
}
else
{
if (dialog != null && dialog.getShell() != null && !dialog.getShell().isDisposed())
dialog.getShell().setVisible(openDialog.getSelection());
}
}
});
shell.open();
shell.pack();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
private static class MyDialog extends Dialog
{
public MyDialog(Shell parentShell)
{
super(parentShell);
setShellStyle(SWT.CLOSE | SWT.MODELESS | SWT.BORDER | SWT.TITLE);
}
@Override
protected Control createDialogArea(Composite parent)
{
Composite container = (Composite) super.createDialogArea(parent);
Text text = new Text(container, SWT.BORDER);
return container;
}
@Override
protected void configureShell(Shell newShell)
{
super.configureShell(newShell);
newShell.setText("Some dialog");
}
@Override
protected Point getInitialSize()
{
return new Point(450, 300);
}
}
首次按下该按钮将创建并打开对话框,并隐藏/取消隐藏后续按下事件(使用Shell#setVisible(boolean)
)。
如果这不是您的想法,请更新您的问题或发表评论。