2012-10-02 4 views
1

안녕하세요,버튼 클릭시 창 닫기

저는 Java Swing을 사용하고 있으며 버튼 클릭으로 창을 닫고 싶습니다. 이 작업을 수행하는 가장 좋은 방법으로 actionlistener를 사용하는 것을 모르지만 현재 컴파일 오류가 발생하여 올바르지 않아야합니다. 여기

내 코드 :

public class assignment2 
    { 

     public static void main(String[] args){ 
      MyFrame f = new MyFrame(); //open the inital gui interface 
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      f.setVisible(true); //set it visibile 
     } 
    } 

    //this is the initial gui screen, presenting user with options for which action they would like to take 
    //al actions for the gui are commenced here 
    class MyFrame extends JFrame{ 

     public MyFrame(){ 

      buttonPanel1 p = new buttonPanel1(); // add the buttons for this frame 
      add(p); 

      setSize(800,600); 
      setTitle("Travel Console"); 
      setLocationRelativeTo(null); 
     } 
    } 

    class buttonPanel1 extends JPanel{ 
     public buttonPanel1(){ 
      //create buttons 
      JButton addItem = new JButton("Add an Item"); 
      JButton deleteItem = new JButton("Delete an item"); 
      JButton listItem = new JButton("List items"); 
      JButton editItem = new JButton("Edit an item"); 
      JButton bookFlight = new JButton("Book a flight"); 
      JButton save = new JButton("Save data"); 
      JButton load = new JButton("Load data"); 
      JButton exit = new JButton("Exit"); 

      //set layout manager for button panel 
      setLayout(new GridLayout(8,1,1,5)); 

      //create buttons 
      add(addItem); 
      add(deleteItem); 
      add(listItem); 
      add(editItem); 
      add(bookFlight); 
      add(load); 
      add(save); 
      add(exit); 

      addItemListener addList = new addItemListener(); 
      addItem.addActionListener(addList); 
      exitListener exitList = new exitListener(); 
      exit.addActionListener(exitList); 
     } 

    } 

    //listener classes for the inital gui page. each button has its own actionlistener which launches the selected option 
    class addItemListener implements ActionListener{ 
     public void actionPerformed(ActionEvent event){ //launch add item 
      addItemFrame addItem = new addItemFrame(); 
      addItem.setDefaultCloseOperation(addItemFrame.DISPOSE_ON_CLOSE); 
      addItem.setVisible(true); 
     } 

    } 
class addItemFrame extends JFrame{ 
    public addItemFrame(){ 
     addItemButtonPanel b = new addItemButtonPanel(); // add the buttons for this frame 
     add(b); 

     setSize(800,500); 
     setTitle("Add an Item"); 
     setLocationRelativeTo(null); 
    } 
} 
//part of addItemFrame class 
class addItemButtonPanel extends JPanel{ 
    public addItemButtonPanel(){ 
     JLabel selectItem = new JLabel("Select which item you would like to add:"); 
     JButton newCustomer = new JButton("Customer"); 
     JButton newflight = new JButton("Flight"); 
     JButton newMovie = new JButton("Movie"); 
     JButton goBack = new JButton("Return to main menu"); 

     setLayout(new GridLayout(5,1,1,5)); 

     add(selectItem); 
     add(newCustomer); 
     add(newflight); 
     add(newMovie); 
     add(goBack); 

     goBackListener gbList = new goBackListener(); 
     goBack.addActionListener(gbList); 
    } 
} 

//listener classes for the addItemFrame 
class goBackListener implements ActionListener{ 
    public void actionPerformed(ActionEvent event){ 
     addItemFrame.dispose(); 
    } 

} 

오전 데 문제가 주 메뉴 화면이 다시 표시되도록 효과적으로 단지 현재 창을 닫습니다 goBackListener 나열된 마지막 클래스와 함께입니다. addItemListener 클래스에 생성 된 addItemFrame에 대한 정적 참조가 필요합니다. 하지만 정적으로 변경하는 것은 잘못된 수정 자입니까?

어떻게 해결할 수 있습니까?

+1

* "컴파일 오류"addItemFrame의 인스턴스를 보냅니다. * "actionListener를 사용하는 것이 가장 좋은 방법인지는 알지 못합니다"*'WindowListener'를 찾거나'JFrame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE)'를 호출하십시오. –

+1

Btw, 정말 Sun Java 명명 규칙을 고수해야합니다. 클래스 이름은 항상 대문자로 시작합니다! –

+1

'JFrame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE)'를 이미 사용하고 있다면'JFrame'에'dispose'를 호출하면 닫히고 JVM을 종료합니다 (데몬이 아닌 모든 스레드가 완료되면).) – MadProgrammer

답변

3

//listener classes for the addItemFrame 
class goBackListener implements ActionListener{ 
    private addItemFrame frame; 
    public goBackListener(addItemFrame frame){ 
     this.frame= frame; 
    } 
    public void actionPerformed(ActionEvent event){ 
     frame.dispose(); 
    } 
} 

을 시도하고 * 복사/질문에 편집으로 붙여 넣을 그것의 생성자에