java SWT单击按钮打开另个窗体
窗体1publicclassaextendsShell{staticDisplaydisplay;staticashell;publicstaticvoidmain(St...
窗体1
public class a extends Shell {
static Display display;
static a shell;
public static void main(String args[]) {
try {
display= Display.getDefault();
shell = new a(display, SWT.SHELL_TRIM);
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public a(Display display, int style) {
super(display, style);
createContents();
}
protected void createContents() {
setText("SWT Application");
setSize(500, 375);
final Button button = new Button(this, SWT.NONE);
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
b b=new b(display,SWT.CLOSE);
b.open();
shell.setVisible(false);
}
});
button.setText("button");
button.setBounds(210, 168, 48, 25);
//
}
@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}
窗体2:为窗体添加关闭事件
addShellListener(new ShellAdapter() {
public void shellClosed(final ShellEvent e) {
a a=new a(b.display,SWT.CLOSE);
a.setVisible(true);
}
});
为什么第一次打开窗体一点按钮会打开窗体二 关闭窗体2也会将窗体1显示出来 可是再次点击按钮 窗体一却不隐藏了 而且关闭窗体2有新打开个窗体1 展开
public class a extends Shell {
static Display display;
static a shell;
public static void main(String args[]) {
try {
display= Display.getDefault();
shell = new a(display, SWT.SHELL_TRIM);
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public a(Display display, int style) {
super(display, style);
createContents();
}
protected void createContents() {
setText("SWT Application");
setSize(500, 375);
final Button button = new Button(this, SWT.NONE);
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
b b=new b(display,SWT.CLOSE);
b.open();
shell.setVisible(false);
}
});
button.setText("button");
button.setBounds(210, 168, 48, 25);
//
}
@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}
窗体2:为窗体添加关闭事件
addShellListener(new ShellAdapter() {
public void shellClosed(final ShellEvent e) {
a a=new a(b.display,SWT.CLOSE);
a.setVisible(true);
}
});
为什么第一次打开窗体一点按钮会打开窗体二 关闭窗体2也会将窗体1显示出来 可是再次点击按钮 窗体一却不隐藏了 而且关闭窗体2有新打开个窗体1 展开
1个回答
展开全部
步骤1、首先执行a类中main方法时,创建了一个a,这是a的第一个实例,并把它赋给了a类中的静态类变量shell。
步骤2、之后,窗体1(a类的第一个实例)中点击按钮弹出窗体b,隐藏窗体1(a类的第一个实例)
步骤3、再之后,关闭窗体b,这时在窗体b的shellClosed方法中执行a a=new a(b.display,SWT.CLOSE); 这行代码新生成了一个a的实例,这是a的第二个实例,与a的第一个实例(a类中的静态类变量shell)是两个不同的实例,然而在a类的createContents方法中button的widgetSelected方法中执行的是shell.setVisible(false);,即只隐藏a的第一个实例,而由窗体2关闭所生成的a的第二个实例是没有隐藏的。
所以,窗体2的关闭事件需要修改如下:
addShellListener(new ShellAdapter() {
public void shellClosed(final ShellEvent e) {
a.shell.setVisible(true);
}
});
如果a类和b类不在同一个包中,可以将a类的静态类变量shell声明为public。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询