我正在为用户界面开发一个带SWT的简单Java应用程序。 一切正常,但我对变量声明顺序有一些问题(这是我的第一个SWT应用程序)。
我有两个按钮,名为btnStop和btnStart,附带一个SelectionAdapter事件。
这是他们应该拥有的行为:
事实是:如果我在btnStart之前声明btnStop,那么前者的事件不能设置后者禁用,反之亦然,因为Eclipse说两个变量中的一个(取决于声明顺序)尚未初始化。
以下是代码的一部分:
final Button btnStop = new Button(shlFinalFantasyXiv, SWT.NONE);
btnStop.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Check.keepPinging = false;
comboServer.setEnabled(true);
btnStart.setEnabled(true); // <- ERROR HERE
btnStop.setEnabled(false);
}
});
btnStop.setBounds(357, 106, 75, 25);
btnStop.setText("Stop");
final Button btnStart = new Button(shlFinalFantasyXiv, SWT.NONE);
btnStart.addSelectionListener(new SelectionAdapter() {
// some stuff
}
如果您有任何建议,我们将非常感激。在此先感谢您的帮助。
答案 0 :(得分:1)
在声明两个按钮之前,不要设置选择侦听器:
final Button btnStop = new Button(shlFinalFantasyXiv, SWT.NONE);
// set text, layout
final Button btnStart = new Button(shlFinalFantasyXiv, SWT.NONE);
// set text, layout
btnStop.addSelectionListener(new SelectionAdapter() {
// code
}
btnStart.addSelectionListener(new SelectionAdapter() {
// some stuff
}
顺便说一下,了解如何使用Layouts来布置控件。使用setBounds
表示如果使用的字体发生变化,事情就会搞砸。
答案 1 :(得分:0)
您的两个按钮都需要一个全局ActionListener。它按下了按钮被按下的IF,它将激活一个并禁用另一个。
请看一下这个概念在“多个来源”一章中说明的内容:http://zetcode.com/tutorials/javaswingtutorial/swingevents/
你使用SWT,但是在swing中概念是相同的。