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

FillLayout を使用してボタンをコンポジットに配置し、ボタンを無効にする代わりに、親コンポジットを無効にしてみませんか。ボタンは有効に見えますが、マウス クリックとタブ トラバースは到達しません。

警告: クリックできない有効なボタンが表示されるのはユーザーにとって煩わしいかもしれませんが、これはあなたが求めたものです。

于 2013-10-18T15:08:13.660 に答える
0

Button.setEnabled(boolean) を使用する代わりに、ボタンを有効/無効にしたい場合はいつでも、ボタン表示でイベントをフィルタリングできます。

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

ボタンを無効/有効にしたい場合は、マウス イベントとキーボード イベントのフィルターを追加/削除します。

于 2012-05-04T11:23:54.467 に答える