2012-05-17 3 views
0

나는 Maze (extends JPanel) 클래스를 가지고있다. 나는이 클래스의 변수를 새로운 변수로 바꾸는 "새로운"버튼을 만들고 싶습니다.JPanel을 다른 JPanel으로 바꾸는 방법은 무엇입니까?

btnNewMaze.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      maze.repaint(); 
      maze = new Maze((int) xSpinner.getValue(), (int) ySpinner.getValue()); 
      maze.repaint(); 
     } 
    }); 

다른 버튼이 정상적으로 작동합니다. 하지만이 방법은 올바르게 작동하지 않습니다. 다시 그리기, 메서드 예외 등을 수행하지 마십시오. 어떻게 해결할 수 있습니까? 아니면 다른 코드로 바꿀 수 있습니까?

+0

은 어디에서 그 코드를 호출? Maze 클래스 안에 있습니까? 또한 예외는 무엇입니까? – Tharwen

+0

던져진 예외는 무엇입니까? –

+0

다른 클래스 (Main)에서 코드를 호출하고 있습니다. ArrayIndexOutOfBoundsException,하지만 그것은 Maze 클래스의 메서드와 연결되어 있습니다. – DarkSun

답변

2

어떻게 든 원하는 것은 단추를 누를 때 표시되는 컨테이너 (예 : JPanel)에 추가 된 미로 객체가 새로운 미로 인스턴스로 대체된다는 것입니다.

예를 들어이 미로 객체가 이미 컨테이너 (예 : JPanel)에 추가 된 경우 제공된 코드를 실행하면 maze = new Maze (. ..), 오래된 미로 객체는 컨테이너에 추가 된 상태로 유지되며 영향을받지 않습니다. 컨테이너는 여전히 오래된 maze 객체에 대한 내부 참조를 보유합니다.

사실

, 무슨 코드 미로 = 실행 새로운 미로 (...)는, 이전의 미로 개체를 대체하지 않습니다. 사실 기존의 인스턴스가 컨테이너에 부착 된 채로 참조 변수 미로이 새로운 Maze() 객체를 가리키고 있습니다.

컨테이너에 이미 추가 된 오래된 미로 객체로 대체하면 컨테이너에서 제거하고 새 미로 객체를 추가해야합니다.

이 모든 것이 사실 일 수는 없지만 제공된 정보를 통해 이해할 수있었습니다. 제발, 우리에게 세부 사항을 알려주세요 (전체 수업이나 방법, 던져진 예외, 정확히하려는 일, 등등).

+0

고마워, 그게 문제 야. – DarkSun

1

제공된 코드에 JButton이 표시되지 않습니다. 버튼을 원한다면 (다른 객체처럼) 버튼을 구성해야하고 아마도 해당 컨테이너에 버튼을 추가해야합니다.

1

당신의 maze 인스턴스가 패널에 추가됩니다 가정하면, 새로운 인스턴스로 교체하기 전에 패널에서 제거해야 :

this.remove(maze); 
maze = new Maze(....); 
this.add(maze, ...); 
관련 문제