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
에 대한 정적 참조가 필요합니다. 하지만 정적으로 변경하는 것은 잘못된 수정 자입니까?
어떻게 해결할 수 있습니까?
* "컴파일 오류"
addItemFrame
의 인스턴스를 보냅니다. * "actionListener를 사용하는 것이 가장 좋은 방법인지는 알지 못합니다"*'WindowListener'를 찾거나'JFrame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE)'를 호출하십시오. –Btw, 정말 Sun Java 명명 규칙을 고수해야합니다. 클래스 이름은 항상 대문자로 시작합니다! –
'JFrame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE)'를 이미 사용하고 있다면'JFrame'에'dispose'를 호출하면 닫히고 JVM을 종료합니다 (데몬이 아닌 모든 스레드가 완료되면).) – MadProgrammer