Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在禁用按钮上显示图像,图像是否为灰色?_Java_Image_Button_Swt - Fatal编程技术网

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

Java 在禁用按钮上显示图像,图像是否为灰色?,java,image,button,swt,Java,Image,Button,Swt,我正在用JavaSWT编写一个程序,它可以播放tic-tac-toe,如果不使用button.setImage(image)方法,我无法找到在按钮上显示带有x或o的图像的方法。当我这样做时,图像会变成灰色,我不希望这样。当我点击按钮时,有没有办法使按钮变为禁用状态,并且图像显示在其上方,或者我至少可以使按钮在禁用时不变灰 还应该注意的是,我在GUI中使用SWT 以下是我遇到问题的代码部分(如果有帮助): public static void drawX(Button b, Shell s, Im

我正在用JavaSWT编写一个程序,它可以播放tic-tac-toe,如果不使用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) {
        }
    });
}

请参阅。

而不是使用Button.setEnabled(布尔值),无论何时要启用/禁用按钮,都可以筛选按钮显示上的事件

按钮.getDisplay().addFilter(事件类型,侦听器); getDisplay().removeFilter(eventType,listener)


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

为什么不将按钮放入具有FillLayout的组合中,而不是禁用按钮,禁用父组合。按钮看起来已启用,但鼠标单击和选项卡遍历将无法到达该按钮


警告:用户看到无法单击的已启用按钮可能会感到恼火,但这正是您所要求的。

可能有一种方法可以做到这一点,我不知道,但另一种方法是删除/隐藏按钮,并在其位置放置一个
JLabel
。+1。我以前可能提到过这一点,但您是否可以编辑和更改显示为您的姓名/nic的“监狱号码”。去做别的(非冒犯性的)事?很难用数字来跟踪用户(好吧,这是我想要的,但是对于这个项目,我正在使用SWT,这是我没有在我的原始帖子中澄清的错误。你知道SWT中是否有类似的功能吗?“我有点喜欢我的匿名性”很公平,但“毛茸茸的兔子”或“冥王星”或“匿名性”也一样..匿名。(我只是说…)