回 帖 发 新 帖 刷新版面

主题:[讨论]eclipse中按钮的问题

我在Eclipse中运行这个程序:
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import java.awt.Color;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;



public class A{

    /**
     * Launch the application
     * @param args
     */
    public static void main(String[] args) {
        final Display display = Display.getDefault();
        final Shell shell = new Shell();
        shell.setSize(500, 375);
        shell.setText("SWT Application");
        shell.open();

        final Button button = new Button(shell, SWT.NONE);
        button.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent e)
            {
                button.setForeground(Color.blue);
                button.setBackground(Color.cyan);
            }
        });
        button.setText("button");
        button.setBounds(60, 60, 120, 60);
        shell.layout();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
    }
    
}
提示这两行    button.setForeground(Color.blue);
              button.setBackground(Color.cyan);
出错了,请问应该怎么改才能让按钮能够响应到这个事件?

回复列表 (共10个回复)

沙发

button是final变量 ?

板凳

我觉得这里改成(没测试过)
             
     public class A implements MouseListener

3 楼

final变量是自动生成的按钮类型,这个没事的吧?
to zhangheng77,我有这样改过啊,但还是不行啊,还能看出其他的错误吗?

4 楼

把button的final去掉看看。

final不是常量吗,既然是常量还可以再修改吗?

5 楼

还是不行啊,去掉final不能引用了button了
加上去的是这个错误:
类型 Control 中的方法 setBackground(Color)对于参数(Color)不适用

6 楼

     button.setForeground(display.getSystemColor(SWT.COLOR_BLUE));
                 button.setBackground(display.getSystemColor(SWT.COLOR_CYAN));

7 楼

这样改了可以运行,但没有响应那两个事件啊,怎么办啊?为什么响应不了?

8 楼

SWT以前没用过,
我刚刚试过了,鼠标监听是没错的,
你把这个改一下,你会发现,你点鼠标的时候是可以响应的
public void mouseDown(MouseEvent e){

 button.setText("Hello");

}

 });


但是估计是颜色那里有问题,我在网上查了下:
“SWT封装的Button是不能设置背景的。”
“只能实现自我绘制的Button组件”
参见
http://www.eclipseworld.org/bbs/read.php?tid=7393
http://www.eclipseworld.org/bbs/read.php?tid=5107

9 楼

谢谢,我就是搞不懂为什么只有颜色这里不行,其他都响应得了,今天看了贴明白了

10 楼

Color对象用错了,不用使用java.awt.Color,应该用org.eclipse.swt.graphics.Color

我来回复

您尚未登录,请登录后再回复。点此登录或注册