2013-08-16 81 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。他們是你的朋友。