在禁用按钮上显示图像,图像是否为灰色?

时间:2012-05-02 17:22:38

标签: java image button swt

我正在java swt中编写一个播放tic tac toe的程序,我找不到在按钮上显示带有x或o的图像的方法,而不使用button.setImage(image)方法。当我这样做时,图像变成灰色,我不希望这样。是否有任何方法可以实现这一点,当我点击按钮,按钮被禁用并且图像显示在它上面,或者我可以至少使按钮在禁用时不变灰?

还应该注意我正在使用SWT作为我的GUI。

如果有任何帮助,以下是我遇到问题的部分代码:

public static void drawX(Button b, Shell s, Image x){   //draws an X image
        int topLeft_X=b.getLocation().x;
        int topLeft_Y=b.getLocation().y;
        GC gc = new GC(b);
        gc.drawImage(x,  topLeft_X, topLeft_Y);
    }


public static void drawO(Button b, Shell s, Image o){   //draws an O image
    int topLeft_X=b.getLocation().x;
    int topLeft_Y=b.getLocation().y;
    GC gc = new GC(b);
    gc.drawImage(o,  topLeft_X, topLeft_Y);
}

static double turnCount = 1;        

public static void button(final Button b, final Shell s,  final int i, final int j, final Image g, final Image h){      //the method that would make the image appear
    b.addSelectionListener(new SelectionListener() {

        public void widgetSelected(SelectionEvent e) {
            b.setEnabled(false);
            turnCount++;
            if(p1()){
                a[i][j]++;
                drawX(b, s, g);
                b.setVisible(false);
            }
            else{
                a[i][j]--;
                drawX(b, s, h);
                b.dispose();
            }
        }

        public void widgetDefaultSelected(SelectionEvent e) {
        }
    });
}

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

您可以在按钮显示屏上过滤事件,而不是使用Button.setEnabled(boolean),您可以在任何位置启用/禁用按钮。

<强> button.getDisplay()addFilter(EVENTTYPE,听者)。 button.getDisplay()removefilter我(EVENTTYPE,听者);

如果要禁用/启用按钮,请在鼠标事件和键盘事件上添加/删除过滤器。

答案 2 :(得分:0)

为什么不使用FillLayout将按钮放在复合中,而不是禁用按钮,禁用父复合。按钮将启用,但鼠标单击和制表符导线将无法到达。

警告:用户看到无法点击的已启用按钮可能会很烦人,但这就是您的要求。