2014-10-14 3 views
0

건물의 엘리베이터를 시뮬레이트하는 GUI를 만들려고합니다. (정말로 스레딩/c 스캔을 테스트하기 위해)하지만 엘리베이터 제어판의 버튼과 각 개별 바닥의 버튼을 생성 할 때, 나는 갇혀있다. 각 층마다 새로운 버튼 쌍을 생성하고 엘리베이터마다 새 제어판을 생성하려고 생각했습니다. 또한 다양한 양의 바닥을 갖는 데 어려움이 있습니다. 어쨌든 내 질문에이 일을하는 가장 좋은 방법은 무엇입니까? 아마도 모든 것을 위해 새로운 버튼을 생성 할 필요는 없으며 하나의 세트 만 사용하고 바닥/엘리베이터마다 액션이 수행하는 것을 변경해야할까요? 나는 GUI에 익숙하지 않아서 묻고있다. 층의 수는 변수이 경우 도움동적으로 생성 된 jbuttons

답변

0

모든 엘리베이터와 제어판이 동일한 경우 단일 방법을 사용하여 엘리베이터 또는 제어판을 전달할 수 있습니다. CustomPanel은 JPanel을 확장하고 메소드 foo를가집니다.

public void createElevatorButtons(final CustomPanel panel) { 
    ArrayList<JButton> buttons = new ArrayList<>(); //arraylist of buttons we can keep track of 
    JPanel buttonPanel = new JPanel(); //the visible component 
    for(int i = 1; i <= numberOfFloors;i++) { 
     JButton button = new JButton(String.valueOf(i)); //creates buttons for floors 1 to max 
     buttons.add(button); 
     buttonPanel.add(button); 
    } 
    panel.add(buttonPanel); 

    //add the action listeners 
    for(JButton button : buttons) { 
     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       JButton floor = (JButton) e.getSource(); 
       int floorNumber = Integer.parseInt(floor.getText()); 
       panel.foo(floorNumber); //we tell the elevator/panel/whatever to do something, you will have to extend JPanel to do foo 
      } 
     }); 
    } 
} 
0

주셔서 감사합니다 당신이 버튼의 배열을 만들 수 있습니다 런타임에서 바닥의 수의 정확한을 결정할 때 다음

JButton[] buttons = new JButton[MAX_NUMBER_OF_FLOORS]; 

을, 당신은 갈 수 버튼을 인스턴스화하고 추가하십시오 :

for(int i=0; i<numberOfFloors; i++) { 
    buttons[i] = new JButton(); 
    controlPanel.add(buttons[i]); 
} 

이와 비슷한 것이 작동합니다.

MAX_NUMBER_OF_FLOORS에 100과 같이 큰 숫자를 할당하면 문제가 발생하는 한계가있을 수 있습니다.

관련 문제