2012-05-02 2 views
0

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) { 
     } 
    }); 
} 
+0

이렇게하는 방법이 있을지 모르겠다.하지만 대안은 버튼을 제거/숨기고 버튼에 'JLabel'을 넣는 것이다. – twain249

답변

2

AbstractButton.setDisabledIcon(Icon)를 참조하십시오 여기에

은 내가 어떤 도움 경우에 문제가 코드의 부분이다.

+0

+1. 나는 전에 이것을 언급했을지 모르지만, [귀하의 프로파일] (http://stackoverflow.com/users/1291492/user1291492)을 편집하고 귀하의 이름/닉으로 표시되는 '감옥 번호'를 변경할 수 있습니까? 뭔가 (비 공격적인 것) 다른 것? 숫자로 사용자를 추적하는 것은 매우 어렵습니다. : ( –

+0

글쎄, 내가 원했던 라인을 따르지만,이 프로젝트에서는 SWT를 사용하고 있는데, 이는 원래 게시물에서 명확히하지 않은 것에 대한 내 잘못이다. SWT에서 이와 유사한 기능이 있는지 알고 계신가요? – Jem

+0

내 익명 성 같은 것 – ControlAltDel

0

Button.setEnabled (boolean)를 사용하는 대신 버튼을 활성화/비활성화하려는 위치에서 버튼 디스플레이에서 이벤트를 필터링 할 수 있습니다.

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

버튼을 사용/사용 중지하려면 마우스 이벤트 및 키보드 이벤트에서 필터를 추가/제거하십시오.

0

FillLayout을 사용하여 버튼을 복합체에 배치하지 말고 버튼을 비활성화하는 대신 상위 컴포지트를 비활성화하십시오. 버튼이 활성화 된 것처럼 보이지만 마우스 클릭과 탭 이동은이 버튼에 도달하지 않습니다.

경고 : 사용자가 클릭 할 수없는 활성화 된 버튼을 보는 것은 귀찮을 수 있지만 이는 사용자가 요청한 것입니다.

관련 문제