2017-04-02 1 views
0
for(int row = 0; row < 10; row++) 
{ 
    for(int col = 0; col < 10; col++) 
    { 
      button = new JButton(); 

      panel_1.add(button); 
    } 
} 

    button.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      //If Button is clicked, make the button unclickable 
      if(button == (JButton)e.getSource()) 
      { 
       button.setEnabled(false); 

      } 
     } 

    }); 

각 JButton을 클릭 할 수 있도록 10x10 격자 단추 레이아웃을 클릭 할 수 없도록 만듭니다. 그러나이 방법은 오른쪽 아래 버튼을 클릭 취소 할 수 없게 만들고 다른 버튼을 만들지 않습니까? 뭐가 문제 야? 나는 버튼을 만드는 책임을지는 forLoop 외부에 ActionListener를 놓았다. 나는 무슨 일이 일어나고 있는지 모른다. BSD 코드 작동 :JButton을 클릭 한 후에 클릭 취소 가능하게 만드는 방법

여기에 편집

http://imgur.com/a/5hTRB

처럼 보이는거야. 버튼이나 무언가를 추가하기 전에 ActionListener를 추가하십시오.

답변

3

마지막으로 생성 된 버튼에만 ActionListener를 추가합니다.

루프 내부에서 생성 된 모든 버튼에 ActionListener를 추가해야합니다. 당신이 당신의 패널에서 모든 버튼을 비활성화 할 때문에

ActionListener al = new ActionListener() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     JButton button = (JButton)e.getSource(); 
     button.setEnabled(false); 
    } 
}; 

for(int row = 0; row < 10; row++) 
{ 
    for(int col = 0; col < 10; col++) 
    { 
      button = new JButton(); 
      button.addActionListener(al); 
      panel_1.add(button); 
    } 
} 
2

:

그래서 코드가 같은 것을해야한다. 버튼 액션 리스너는 for 루프 안에 있어야합니다.

button = new JButton(); 
button.addActionListener(new ActionListener() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     //If Button is clicked, make the button unclickable 
     if(button == (JButton)e.getSource()) 
     { 
      button.setEnabled(false); 

     } 
    } 

}); 
+0

각 버튼마다 별도의 ActionListener를 만들 필요가 없습니다. 동일한 ActionListener는 모든 버튼에서 공유 할 수 있습니다. – camickr

+0

감사합니다. 이제 나는 다른 문제들에 대해서 가서 외칠 것입니다. 고맙습니다. – Anonymous

+0

@Anonymous – bsd

관련 문제