2012-11-27 3 views
3

간단한 작업 관리자를 만드는 중입니다. 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); 
+0

죄송합니다.이 줄은 //frame.getContentPane().add (new NewTask())를 주석 처리했습니다. 이 주석 처리를 통해 빈 JFrame을 한 ​​번만 열 수 있습니다. – user1857403

+3

참고 : [여러 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) (특히 컴파일 가능한 코드) –

답변

1

새 프레임을 ActionListener 필드로 한 번만 만들고 버튼으로 표시 여부를 변경하십시오. 여러 JFrames 만들기 여러 프레임의 렸기 때문에

JFrame frame = null; 

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

하지만 여전히 RLY 나쁜 생각

는 =)

How to Make Dialogs

+0

도와 주셔서 감사합니다. 여전히 문제가있어 JFrame 대신 JDialog를 사용해 보았습니다. 내 Java 기술은 조용하지만 가난하지만 어쨌든 감사합니다. – user1857403

0

정말 결국 나쁜 관행 될 수있을 테니까요. 프로그램은 일관성없는 것으로 끝나고 결국 코드가 엉망이됩니다.

CardLayout을 사용하는 것이 좋습니다. 사용하기가 쉽고 결국에는 매우 편리합니다. 또한, 학교용이라면, 교수님께서는 특정 기능을 사용하여 새 JFrame을 여는 것이 좋지 않으므로 CardLayout을 제안 할 것입니다. ;)