3

我正在创建一个简单的任务管理器,我遇到的问题是我想在单击 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);
4

2 回答 2

1

仅创建一次新框架作为 ActionListener 的字段,并使用按钮更改其可见性。

  JFrame frame = null;

  public void actionPerformed(ActionEvent e) {
    if ( frame == null ) {
      frame = new NewTask();
      frame.pack();
    }
    frame.setVisible( !frame.isVisible() );
  }

但仍然是个坏主意,因为有多个帧 =)

如何制作对话框

于 2012-11-27T19:23:15.183 回答
0

创建多个 JFrame 最终实际上是不好的做法。您的程序最终看起来不连贯,而代码最终看起来很丑陋。

我建议使用 CardLayout。它非常易于使用,最终超级方便。另外,如果这是为了学校,我肯定会建议 CardLayout,因为教授们真的不喜欢当你有特定的函数调用新 JFrame 的打开时。;)

于 2012-11-28T21:12:03.590 回答