我正在创建一个简单的任务管理器,我遇到的问题是我想在单击JButton时打开一个新的JFrame。窗口打开但问题是多个窗口打开。我有两个类App(Main)和NewTask。如果有人可以查看代码,看看我做错了什么就会很棒,抱歉,如果我发布的代码太多,请提前致谢。
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);
答案 0 :(得分:1)
仅创建一个新框架作为ActionListener的一个字段,并使用按钮更改它的可见性。
JFrame frame = null;
public void actionPerformed(ActionEvent e) {
if ( frame == null ) {
frame = new NewTask();
frame.pack();
}
frame.setVisible( !frame.isVisible() );
}
但仍然是个坏主意,因为多帧=)
答案 1 :(得分:0)
最终创建多个JFrame最终会成为不好的做法。你的程序最终看起来不连贯,代码最后看起来很难看。
我建议使用CardLayout。它非常易于使用,最终变得非常方便。此外,如果这是为了学校,我肯定会建议CardLayout,因为教授真的不喜欢当你有特定的功能调用新的JFrame开放。 ;)