2014-03-25 46 views
1

我有2個框架代表條形圖。 valueFrame是整數的輸入文本框。 barFrame是valueFrame對應的條形圖。如何將2個JFrame添加到單個JPanel?

我想採取這2個獨立的幀,並把它們並排放入1個JPanel。所以當程序運行時,我看到1個JPanel裏面有2幀。當我嘗試添加框架時,我得到一個IllegalArgumentException。任何人都可以告訴我如何正確地做到這一點?

public static void main(String[] args) { 
    // TODO code application logic here 
    ArrayList<Double> data = new ArrayList<Double>(); 

    data.add(new Double(33.0)); 
    data.add(new Double(44.0)); 
    data.add(new Double(22.0)); 
    data.add(new Double(22.0)); 

Model model = new Model(data); 

View1 valueFrame = new View1(model); 

    View2 barFrame = new View2(model); 

    model.attach(barFrame); 

    JPanel mainPanel = new JPanel(); 
    mainPanel.setSize(600,400); 
    mainPanel.setLayout(new BorderLayout()); 
    mainPanel.add(valueFrame,BorderLayout.WEST);//IllegalArgumentException 
    mainPanel.add(barFrame,BorderLayout.EAST);//IllegalArgumentException 
    mainPanel.setVisible(true); 
} 

} 

Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a  container 
at java.awt.Container.checkNotAWindow(Container.java:488) 
at java.awt.Container.addImpl(Container.java:1089) 
at java.awt.Container.add(Container.java:971) 
at Ales6_7.Ales6_7.main(Ales6_7.java:43) 
BUILD SUCCESSFUL (total time: 4 seconds) 
+0

@nachokk會的JInternalFrame只是取代JPanel? – Reeggiie

+0

將兩個不同的佈局添加到一個JFrame中以獲得您想要的結果。 - 沒有兩個意見。這是不必要的。 – jrowe08

+0

@ user3345200否,JInternalFrame替換JFrames ..您將InternalFrame添加到DesktopPane,請閱讀我的答案;) – nachokk

回答

3

您不能JFrame添加到JPanel消息是不言自明的是你可以做的是看看給JInternalFrame

使用JInternalFrame類,您可以在另一個窗口中顯示類似JFrame的窗口 。通常,您將內部框架添加到桌面 窗格。桌面窗格又可以用作JFrame的內容窗格。桌面窗格是JDesktopPane的一個實例,它是JLayeredPane的 的子類,它已添加了用於管理多個 重疊內部幀的API。

瞭解更多:How to use InternalFrames

1

如果你想兩幀並排側添加兩個佈局,以你的JFrame(貌似你的JFrame已經使用BorderLayout所以理論上講,你可以添加這兩種新的佈局,以你的JFrameBorderLayout在各自的東部和西部,如果你想獲得您正在試圖達到的樣子。)

更多關於佈局http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html