2015-12-15 148 views
0

我最初創建一個JLabel對象,並將其添加到JFrame,但內容沒有顯示up.I發現一個帖子上stackoverflow使用的容器,以顯示JLabelJFrame。我試過了太多,但即使如此,也不能幹活經歷了很多帖子,但我找不到任何解決方案。按鈕正在顯示,但Jlabel沒有在哪裏看到!JLabel沒有顯示出來?

Dimension s=new Dimension(400,400); 
    JFrame l=new JFrame(); 
    l.setSize(s); 
    l.setResizable(true); 
    Dimension s1=new Dimension(100,100); 
    Container me=new Container(); 
    JLabel kingsman=new JLabel ("kingsman"); 

    me.add(kingsman); 
    l.add(me); 

    JButton p=new JButton("Goal"); 
    p.setSize(s1); 
    l.add(p); 
    //l.pack(); 
    l.setVisible(true); 

還有另外一個問題。當我打電話pack()功能,Jframe是越來越縮小到一個小窗口,而不是我所提到的尺寸。 請幫忙!

回答

2

標籤不顯示的原因是JFrame的內容窗格使用BorderLayout作爲其LayoutManager。當您致電l.add(me),然後l.add(p)時,您正在有效地用按鈕替換Container實例。嘗試將Container更改爲JPanel,將標籤和按鈕組件添加到該組件,然後將其添加到框架的內容窗格中。上Layout Managers, too.

閱讀了下面的示例示出了包含一個JPanelJLabel佈置JButton使用​​默認的FlowLayoutLayoutManager

JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JPanel content = new JPanel(); 
    content.add(new JLabel("A Label")); 
    content.add(new JButton("A Button")); 

    frame.add(content); 
    frame.pack(); 
    frame.setVisible(true); 
+0

如果我直接將Jlabel添加到框架而不使用容器會發生什麼? –

+2

@MathewsMathai Nothing(或更重要的是,同樣的事情),'JFrame'是一個容器(實際上它有一個JRootPane',它有一個'contentPane',它增加了一些東西) – MadProgrammer

+1

如果你想直接添加到框架,你將不得不應用一些位置約束。如上所述,使用的LayoutManager是一個BorderLayout,所以不用調用frame.add(label)和frame.add(button),你可以使用frame.add(label,BorderLayout.NORTH) '和'frame.add(按鈕,BorderLayout.CENTRE)'。從設計的角度來看,我建議使用帶有適當內容的LayoutManager的JPanel,然後將面板添加到框架中。 – PA001