2012-05-02 6 views
0

私は、tic tac toeを実行する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) { 
     } 
    }); 
} 
+0

これを行う方法があるかもしれませんが、わかりませんが、代わりにボタンを削除/非表示にして、その場所に 'JLabel'を置くことができます。 – twain249

答えて

2

AbstractButton.setDisabledIcon(Icon)を参照してください。

+0

+1。私は以前これを言及しているかもしれませんが、[あなたのプロフィール](http://stackoverflow.com/users/1291492/user1291492)を編集してあなたの名前/ニックに示す「刑務所番号」を変更することができます。何か(非攻撃的なもの)に?ユーザーの数を追跡するのはとても難しいです。 :( –

+0

これは私の望む線に沿っていますが、このプロジェクトではSWTを使用しています。これは私の元の投稿で明確にしていない私のせいです。SWTに匹敵する機能があれば分かりますか? – Jem

+0

私の匿名のようなもの – ControlAltDel

0

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

button.getDisplay()。addFilter(eventType、listener);button.getDisplay()。removeFilter(eventType、listener);

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

0

FillLayoutを使用してボタンをコンポジットに配置し、ボタンを無効にするのではなく、親コンポジットを無効にすることをおすすめします。ボタンは有効に見えますが、マウスクリックとタブトラバースはそれに届きません。

警告:ユーザーがクリックできない有効なボタンを表示するのは面倒かもしれませんが、これはあなたが尋ねたものです。

関連する問題