SWT:在Linux上使用setEnabled()后单击按钮的问题

时间:2010-03-30 11:31:05

标签: java events button swt click

我在使用setEnabled()之后有一个奇怪的SWT和Button案例 - 似乎我至少禁用并启用了一次按钮 - 我无法再用鼠标点击它了...已经将代码缩小到非常基本:

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class TestButton {

    public TestButton() {
        Display display = new Display();
        Shell shell = new Shell(display);
        GridLayout mainLayout = new GridLayout();
        shell.setLayout(mainLayout);
        shell.setSize(100, 100);

        Button testButton = new Button(shell, SWT.PUSH);
        testButton.addSelectionListener(new TestClickListener());
        testButton.setText("Click me!");
        //testButton.setEnabled(false);
        //testButton.setEnabled(true);

        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) display.sleep();
        }
        display.dispose();
    }

    class TestClickListener implements SelectionListener {

        @Override
        public void widgetDefaultSelected(SelectionEvent e) {
        }

        @Override
        public void widgetSelected(SelectionEvent e) {
            System.out.println("Click!");
        }
    }

    public static void main(String[] args) {
       new TestButton();
    }

}

当我将这2行注释掉时 - 我可以正确点击按钮并始终获得“点击!”记录,但如果我取消注释 - 然后我不能再用鼠标正确点击按钮 - 按钮在视觉上似乎被点击,但没有记录任何内容...

我在这里做错了吗?或许这可能是Linux平台上的某种错误?因为在Mac上运行相同的代码我从来没有遇到过这样的问题......

感谢任何提示!

P.S。在Ubuntu 9.10,Gnome + Compiz,Sun Java 1.6.0.16上运行代码

1 个答案:

答案 0 :(得分:1)

  

或许这可能是Linux平台上的某种错误?

使用最新版本的eclipse,它使用SWT,在Linux上,某个对话框有一个按钮,点击什么都不做。也许你碰到了同样的事情。这可以通过在启动eclipse时在环境变量中指定GDK_NATIVE_WINDOWS=1来解决。