2012-05-02 125 views
0

我正在寫一個程序在java swt中播放tic tac toe,並且我找不到使用button.setImage(image)方法在按鈕上顯示帶有x或o的圖像的方法。當我這樣做時,圖像變成灰色,我不想那樣。有沒有什麼辦法可以讓我點擊按鈕,按鈕變成禁用狀態,圖像顯示在屏幕上,或者我至少可以讓按鈕在禁用狀態時不會灰顯?在禁用按鈕上顯示圖像,而不會顯示灰色圖像?

另外它應該指出我使用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

可能有辦法做到這一點,我不知道,但另一種方法是刪除/隱藏按鈕,並放置一個'JLabel'的地方。 – twain249

回答

2
+0

+1。我之前可能已經提到過這一點,但是你可以編輯[你的個人資料](http://stackoverflow.com/users/1291492/user1291492)並更改顯示爲你的名字/網點的「監獄號碼」。到什麼東西(任何非冒犯性的)其他?用數字跟蹤用戶是非常困難的。 :( –

+0

嗯,這是我想要的,但對於這個項目我使用SWT,這是我的錯,因爲我的原始文章沒有說明。你知道SWT中是否有類似的功能嗎? – Jem

+0

I有點像我的匿名 – ControlAltDel

0

而不是使用Button.setEnabled(boolean),您可以在其中任何位置啓用/禁用按鈕,您可以在按鈕顯示上過濾事件。

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

當您想禁用/啓用按鈕時,在鼠標事件和鍵盤事件上添加/刪除過濾器。

0

爲什麼不使用FillLayout將按鈕放入組合中,而不是禁用該按鈕,則禁用父組合。按鈕將啓用,但鼠標點擊和標籤遍歷不會達到它。

警告:用戶看到無法點擊的已啓用按鈕可能很煩人,但這是您要求的。