2013-03-26 47 views
3

我在這裏使用Java's Swing來製作UI應用程序。我創建了一個帶有一些按鈕的JFrame。當我點擊這個按鈕時,我想要一個新的JFrame在這個地方有一些不同的內容。但是,我不希望在這裏加載新的JFrame。當我們點擊不同的按鈕時,其內容發生變化的JFrame

我知道的一種方法是在第一個JFrame的按鈕的actionPerformed(ActionEvent obj)方法中將第二個JFrame的可見性設置爲True。但它再次加載一個新的JFrame,我不想那樣。

public class FirstUI extends JFrame { 
    JButton but1; 

    public FirstUI(){ 
     but1= new JButton("Click here"); 
     add(but1); 

    XYZ obj= new XYZ(): 
    but1.addActionListener(obj); 
    } 

    public class XYZ implements ActionListener{ 
     public void actionPerformed(ActionEvent obj1){ 

      // WHAT TO DO HERE 
     } 
    } 
} 

我只想要一個單一的JFrame,其內容隨着我們點擊不同的按鈕而改變。我怎樣才能做到這一點?

+0

你爲什麼不試試JInternalFrame? – Dhinakar 2013-03-26 08:05:55

+0

因此,爲了澄清,您不一定需要新的JFrame,而是在當前JFrame中顯示新內容,單擊按鈕時,對不對? – 2013-03-26 08:06:09

+0

@Simon:是的。沒錯 – OneMoreError 2013-03-26 08:07:39

回答

11

看一看CardLayout,這將允許你切換幀的內容:

一個CardLayout對象是容器的佈局管理器。它將容器中的每個組件視爲卡片。一次只能看到一張卡片,容器就像一疊卡片一樣。添加到CardLayout對象的第一個組件是容器第一次顯示時的可見組件。

查看How to Use CardLayout舉例。

3

您也可以在運行時動態操作JFrame的內容。您可以使用add(...),remove(...),removeAll(...)方法在顯示幀之前添加和刪除內容。完成之後,您需要調用revalidate()repaint()修改後的容器的方法,以使所有內容都能夠正常顯示並正確顯示。

但是我認爲正確的解決方案取決於您正在嘗試實施的實際概念。如果您想要添加或刪除幾個GUI元素來強調功能,那麼正確的方法是按照我所述操作容器。但是如果你想要稍微不同的GUI取決於系統狀態(不超過2-3),那麼CardLayout將是更合適的選擇

0

您可以設置父類的可見性爲false。

然後,您只需一次獲取所需內容即可獲得一個Frame。

你必須在按鈕的Click事件創建框架和調用setVisible(FASE)的靜態對象。

Ex。

public class demo { 
static JFrame jf; 
public static void main(String a[]) 
{ 
    JButton b=new JButton("OK"); 
    JPanel jp=new JPanel(); 
    jf=new JFrame(); 
    jf.setVisible(true); 
    jf.setSize(200,200); 
    jf.add(jp); 
    jp.add(b); 

    b.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e) 
    { 
    jf.setVisible(false); 
    JFrame f= new JFrame(); 
    f.setSize(200,200); 
    f.setVisible(true); 
    } 
    }); 
} 

}

它會幫助你。

你明白了嗎?

0

一種方法是更改​​JFrame的內容窗格。這基本上是一個JPanel。你可以通過frame.setContentPane(<your new panel>);
這樣做第二種方法是做@Peter Lang所做的。那就是使用可以更改不同內容組的佈局管理器。

相關問題