2012-03-28 51 views
0

我有兩個JFrame當按鈕被點擊時JFrame沒有打開

  1. public class Main extends JFrame
  2. public class ColourOption extends JPanel implements ActionListener,然後將其設置在一個JFrame。

我想開第二的JFrame當我
.setVisible()不工作第一JFrame的按鈕點擊。我也在第二個JFrame中嘗試了revalidate()以及invalidate(),validate()

它可能不起作用的原因是什麼?

+1

看到這個例子HTTP ://stackoverflow.com/questions/5665156/calling-awt-frame-methods-from-subclass/5786005#5786005。它可能對你有用。 – Bishan 2012-03-28 02:48:45

+2

1)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 2)*「我有兩個JFrame。」*參見[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/a/9554657/418556) – 2012-03-28 02:49:02

+2

第二個依賴窗口應該是一個JDialog,不是JFrame。 – 2012-03-28 03:09:41

回答

4

因爲它們來自2個不同的類,所以你只需要定義/實例化另一個類的對象......並且如果在第二個類(ColourOption)中它已經包含setVisible(true),那麼一定沒有問題加載窗口。

//this will be placed on your constructor 
yourButton.addActionListener(new ButtonListener()); 

//listener class 
class ButtonListener implements ActionListener{ 
    public void actionPerformed(ActionEvent ae){ 
     if(ae.getSource() == yourButton){ 
     new ColourOption(); 
     } 
    } 
} 
6

您將有實例,從而具有第二幀(要顯示)的第二類..然後,如果你調用調用setVisible(真)..那麼它必須證明..你在做什麼..你能提供你的按鈕的事件處理..

,這是不好的做法

所以我個人建議你切換到像JTABBEDPANES或更好的替代品CARDLAYOUT

和consid呃意見以及..很好的意見傢伙:) ..尤其是在使用的JDialog此背景下:)

好,如果你仍然想在你的上下文幫助:一個樣本:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
class JFrame1 extends JFrame 
{ 
    public JFrame1() 
    { 
     setLayout(new FlowLayout()); 
     JButton b=new JButton("Click"); 
     add(b); 
     b.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       JFrame jf = new JFrame2(); 
       jf.setVisible(true); 
       jf.setSize(200, 200); 
       jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      } 
     } 
     ); 
} 
    public static void main(String args[]) 
    { 
     JFrame jf = new JFrame1(); 
     jf.setVisible(true); 
     jf.setSize(200, 200); 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

和第二類:

import javax.swing.*; 
import java.awt.*; 
class JFrame2 extends JFrame 
{ 
    public JFrame2() 
    { 
     setLayout(new FlowLayout()); 
     add(new JLabel("2nd Frame")); 
    } 
}  

但同樣,我仍然會建議改用其他方法如我前面提到的:tabbedpanes,cardlayout等。 希望我幫助:)