2016-10-28 6 views
0

현재 Game of Life에서 작업 중이며 사용자가 GUI에서 셀을 누를 때 버튼이있는 ArrayList에 추가하려고합니다.JButton을 사용하여 ArrayList에 추가

local variables referenced from an inner class must be final or effectively final 

코드가 어떻게 내 접근 방식을 변경하지 않고이 오류를 해결할 수 있습니다

private static ArrayList<Integer> coordinates = new ArrayList<Integer>(); 
    public static void makeCells() 
    { 
     //Frame Specs 
     JFrame frame = new JFrame(); 
     frame.setVisible(true); 
     frame.setSize(1000,1000); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     //buttons Panel 
     JPanel blocks = new JPanel(); 
     blocks.setLayout(new GridLayout(50, 50)); 
     for(int col=0;col<50;col++) 
     { 
      for(int row = 0; row <50 ;row++) 
      { 
       JButton button = new JButton(); 
       blocks.add(button); 
       button.addActionListener(new ActionListener() 
        { 
         public void actionPerformed(ActionEvent changeColor) 
         { 
          button.setBackground(Color.YELLOW); 
          final int x = col, y =row; 
          coordinates.add(x); 
          coordinates.add(y); 
         }}); 
      } 
     } 
     frame.add(blocks); 
    } 

입니다 :

내 현재의 접근 방식은 나에게 오류를주고있다?

+0

을, 오류 메시지를 구글로하시기 바랍니다. –

답변

1

당신은 rowcol의 최종 복사본을 만들 수 있습니다 :이 질문에 일주일에 적어도 몇 시간을 요청함에 따라 향후

private static ArrayList<Integer> coordinates = new ArrayList<Integer>(); 
public static void makeCells() 
{ 
    //Frame Specs 
    JFrame frame = new JFrame(); 
    frame.setVisible(true); 
    frame.setSize(1000,1000); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    //buttons Panel 
    JPanel blocks = new JPanel(); 
    blocks.setLayout(new GridLayout(50, 50)); 
    for(int col = 0; col < 50; col++) 
    { 
     for(int row = 0; row < 50; row++) 
     { 
      JButton button = new JButton(); 
      blocks.add(button); 
      final int finalRow = row; 
      final int finalCol = col; 
      button.addActionListener(new ActionListener() 
       { 
        public void actionPerformed(ActionEvent changeColor) 
        { 
         button.setBackground(Color.YELLOW); 
         int x = finalCol, 
          y = finalRow; 
         coordinates.add(x); 
         coordinates.add(y); 
        }}); 
     } 
    } 
    frame.add(blocks); 
}