使用JButton问题打开一个新的JFrame

时间:2012-11-27 18:22:56

标签: java swing jframe jbutton multiple-instances

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

2 个答案:

答案 0 :(得分:1)

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

  JFrame frame = null;

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

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

How to Make Dialogs

答案 1 :(得分:0)

最终创建多个JFrame最终会成为不好的做法。你的程序最终看起来不连贯,代码最后看起来很难看。

我建议使用CardLayout。它非常易于使用,最终变得非常方便。此外,如果这是为了学校,我肯定会建议CardLayout,因为教授真的不喜欢当你有特定的功能调用新的JFrame开放。 ;)