2013-08-16 55 views
0

大家好我是新来的java。我试图将我的“Next”JButton重定向到另一个类中的另一个框架(DriversLicenseApplicant)。问题是当我点击“下一步”按钮时,它一直打开我的程序正在执行的框架,即MainInfo。你能帮我用我的代码吗?谢谢你们。 :)使用JButton访问另一个类中的另一个帧

final JButton btnNext = new JButton("Next"); 
    btnNext.setBounds(824, 623, 89, 51); 
    contentPane.add(btnNext); 
     btnNext.addActionListener(
       new ActionListener(){ 


     public void actionPerformed(ActionEvent e) { 
      if (btnNext.isSelected()) { 
      DriversLicenseApplicant frame = new DriversLicenseApplicant(); 
      MainInfo objMain = new MainInfo(); 
        frame.setVisible(true); 
         objMain.setVisible(false); 



     } 
     } 
    }); 

回答

0

发生了什么

的关键线在这里

1 DriversLicenseApplicant frame = new DriversLicenseApplicant(); 
2 MainInfo objMain = new MainInfo(); 
3 frame.setVisible(true); 
4 objMain.setVisible(false); 

此块之前,你有一帧this。 (在Java中,您指的是您所在的对象为this。)this已打开。

在第1行,您将创建一个新框架frame,使您的总帧数为2。隐藏了frame

在第2行,您将创建第三个框架objMain。它与this在同一班,但它是一个不同的实例。 (类和实例之间的差异的解释可以发现on Stackon Oracle's website)。 objMain已被隐藏,但是this已开放。

在第3行,您打开frame。现在thisframe已打开,而隐藏了objMainthis因为Java's focus rules而保持焦点。

在第4行,您将隐藏objMain。这没有效果,因为objMain从来没有打开过。你仍然有3帧,thisframe都是开放的,并且this仍然有焦点。

如何修复

DriversLicenseApplicant frame = new DriversLicenseApplicant(); 
frame.setVisible(true); 
this.setVisible(false); 

更换这些线路将打开新的框架和隐藏当前的一个。

但我认为可能存在潜在的设计问题。每个程序通常只有一个框架。您可能需要考虑使用JDialog作为第二个窗口。您也可以将它们放在同一个框架中,并使用CardLayout在它们之间切换。还要更改类别以扩展JPanel,以便您可以将它们放入窗口的内容窗格中。它增加了灵活性,对于您选择的任何一种方法都很有用。

一件事

我不能不提将JButton的绝对定位。请使用layouts。他们是你的朋友。