3

私は単純なタスク マネージャーを作成しています。私が抱えている問題は、JButton をクリックしたときに新しい JFrame を開きたいということです。ウィンドウは開いていますが、問題は複数のウィンドウが開いていることです。App(Main) と NewTask の 2 つのクラスがあります。誰かがコードを見て、私が間違っていることを確認できれば、それは素晴らしいことです。コードを投稿しすぎたら申し訳ありません。よろしくお願いします。

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 に答える