0

我正在用 java swt 编写一个播放井字游戏的程序,但如果不使用 button.setImage(image) 方法,我找不到在按钮上显示带有 x 或 o 的图像的方法。当我这样做时,图像会变灰,我不希望这样。有什么办法可以做到,所以当我单击按钮时,按钮会被禁用并且图像会显示在它上面,或者我至少可以让按钮在禁用时不灰显吗?

还应该注意的是,我在我的 GUI 中使用了 SWT。

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

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) {
        }
    });
}
4

3 回答 3

2

AbstractButton.setDisabledIcon(Icon)

于 2012-05-02T17:32:16.697 回答
0

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

button.getDisplay().addFilter(eventType,listener); button.getDisplay().removeFilter(eventType,listener);

当您想禁用/启用按钮时,添加/删除鼠标事件和键盘事件的过滤器。

于 2012-05-04T11:23:54.467 回答
0

为什么不用FillLayout 将按钮放在一个组合中,而不是禁用按钮,而是禁用父组合。按钮看起来已启用,但鼠标单击和选项卡遍历不会到达它。

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

于 2013-10-18T15:08:13.660 回答