我正在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) {
}
});
}
答案 0 :(得分:2)
答案 1 :(得分:0)
您可以在按钮显示屏上过滤事件,而不是使用Button.setEnabled(boolean),您可以在任何位置启用/禁用按钮。
<强> button.getDisplay()addFilter(EVENTTYPE,听者)。 button.getDisplay()removefilter我(EVENTTYPE,听者); 强>
如果要禁用/启用按钮,请在鼠标事件和键盘事件上添加/删除过滤器。
答案 2 :(得分:0)
为什么不使用FillLayout将按钮放在复合中,而不是禁用按钮,禁用父复合。按钮将启用,但鼠标单击和制表符导线将无法到达。
警告:用户看到无法点击的已启用按钮可能会很烦人,但这就是您的要求。