2014-10-12 4 views
-1

JButton으로 채워진 GridLayout입니다. 버튼을 누를 때 JButton 클릭 한 인접 버튼을 제외한 모든 버튼을 비활성화하고 싶습니다.ArrayOutOfBoundsException을 방지하는 방법은 무엇입니까?

btnLetter.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent e) { 


         for (int i = 0; i < tab.length; i++) { 
          for (int j = 0; j < tab.length; j++) { 
           tab[i][j].setEnabled(false); 
           for (int ii = 0; ii < tab.length; ii++) { 
            for (int jj = 0; jj < tab.length; jj++) { 
             if (tab[ii][jj] == (JButton) e.getSource()) { 

              tab[ii][jj + 1].setEnabled(true); 
              tab[ii + 1][jj + 1].setEnabled(true); 
              tab[ii + 1][jj].setEnabled(true); 
              tab[ii - 1][jj].setEnabled(true); 
              tab[ii - 1][jj + 1].setEnabled(true); 
              tab[ii - 1][jj - 1].setEnabled(true); 
              tab[ii][jj - 1].setEnabled(true); 
              tab[ii + 1][jj - 1].setEnabled(true); 
             } 
            } 
           } 

          } 
         } 
        } 

       } 
      }); 
+1

'ii' =='0' 일 때'ii-1'의 값은 무엇입니까? 'for/each' 루프를 사용하면 이러한 종류의 'one off errors'가 발생하지 않습니다! –

답변

1

당신이 경우 배열 범위를 벗어을 가져올 수를 뺀/추가되는 클릭 된 버튼을 마지막/첫 번째 행/열되는 경우를 처리해야합니다 :이 코드가 있습니다.

예를 들어 tab[ii + 1][jj + 1].setEnabled(true)을 호출하기 전에 ii < tab.length-1jj < tab.length-1을 확인해야합니다.

+0

내가하고 싶은 일은 인접한 버튼을 제외한 모든 버튼을 비활성화하는 것입니다. 따라서 버튼 탭 [0] [0]을 클릭하면 탭 [0] [1], 탭 [1] [0] 및 탭 [1] [1] 활성화 할 수 있습니다. – Nawid

관련 문제