2017-04-02 14 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); 

      } 
     } 

    }); 

私はこの10 x 10グリッドボタンのレイアウトをクリックしないでクリックすると、各JButtonをクリックしたいと思います。しかし、この方法では、右下のボタンはクリック不可能になり、他のボタンは表示されません。どうしましたか?私はボタンを作る責任を負う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

関連する問題