간단한 작업 관리자를 만드는 중입니다. JButton을 클릭하면 새 JFrame을 열고 싶습니다. 창이 열렸지 만 문제는 여러 창이 열렸습니다. App (Main)과 NewTask의 두 클래스가 있습니다. 누군가 코드를보고 내가 뭘 잘못하고 있는지 잘 볼 수 있다면, 코드를 너무 많이 게시하면 죄송합니다. 미리 감사드립니다.JButton 문제를 사용하여 새 JFrame 열기
App Class
JButton btnNewTask = new JButton("New Task");
btnNewTask.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JFrame frame = new JFrame ("New Task");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
//frame.getContentPane().add (new NewTask());
frame.pack();
frame.setVisible (true);
}
});
btnNewTask.setBounds(10, 216, 116, 23);
contentPane.add(btnNewTask);
NewTask Class
/**
* Launch the application.
*/
//public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
NewTask frame = new NewTask();
frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public NewTask()
{
setTitle("New Task");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
죄송합니다.이 줄은 //frame.getContentPane().add (new NewTask())를 주석 처리했습니다. 이 주석 처리를 통해 빈 JFrame을 한 번만 열 수 있습니다. – user1857403
참고 : [여러 JFrame 사용, 좋음/나쁨 연습] (http://stackoverflow.com/questions/9554636/the-use-of-multiple-jframes-good-bad-practice) 대신 JDialog '또는 ['CardLayout'] (http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html)을 참조하십시오. 또한 null/absolute Layout을 사용하지 말고 적절한 ['LayoutManger'] (http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html)를 사용하십시오. 그리고 [SSCCE] (http://sscce.org) (특히 컴파일 가능한 코드) –