2012-08-24 125 views
3

我只是試圖將JLabel添加到現有的JPanel。這看起來很簡單,我已經搜索了所有的東西。我認爲這是對的,但標籤沒有出現在我的面板上。有人看到我失蹤了嗎?謝謝!Java Swing:將JLabel添加到JPanel

ResultsPanel myPanel = new ResultsPanel(pnlResults); //pnlResults is an existing JPanel 
myPanel.addLabel(pnlResults); 

public class ResultsPanel extends JPanel { 

    JPanel myPanel; 

    public ResultsPanel(JPanel thisPanel) { 
     myPanel = thisPanel; 
    } 

    public void addLabel(JPanel myResults) { 
     JLabel myLabel = new JLabel("test", JLabel.LEFT); 
     myPanel.setLayout(new FlowLayout()); 
     add(myLabel);   
    } 

} 

編輯:在迴應下面的立即回覆,我同意這似乎是總的矯枉過正。我去了這條道路,因爲下面的代碼也將JLabel不會導致被添加到我的JPanel:

JLabel myLabel = new JLabel("test"); 
pnlResults.add(myLabel); 

我寧願使用此代碼,所以如果你認爲它是比較隨意對此置評可能會工作(當然有一些修改)。再次感謝!

+1

見我最後的評論對我的崗位每上次編輯 –

+0

謝謝,亞歷克斯。我看了你的評論。我認爲我在編輯中所做的是一樣的,不是嗎?我的JPanel位於已存在的JDialog上(由GUI構建器創建),因此我不需要在代碼中使用該部分。這兩行只是JDialog表單構造函數的一部分。我是否正確地遵循你的建議? – Alex

+0

你可以多發一點你的代碼(你可以拿出一些與問題無關的東西,只保留swing的東西)?這應該有幫助 –

回答

7

這似乎是跳過籃球只是爲了做一件基本的事情;只需撥打

JLabel label = new JLabel("Test text");//initialize the label 
//do some stuff with label here maybe... 
panel.add(label);//now add it 

有沒有必要讓一個類擴展JPanel,並且包含一個JPanel;如果一個類擴展了JPanel,爲了獲得JPanel實例,只需使用這個(所以addLabel會改爲this.setLayout(blah))。但是,當然,也沒有必要,甚至對於如添加的JLabel

總體簡單的東西子類的JPanel,這裏幾乎是最簡單的Swing應用程序:

JFrame frame = new JFrame("Basic Swing");//Make a frame 
    frame.setSize(300, 300);//Give it a size 
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//Make it go away on close 
    JPanel panel = new JPanel();//Make a panel 
    frame.add(panel);//Add it to your frame 

    JLabel label = new JLabel("Hello StackOverflow!");//Make a label 
    panel.add(label);//Add it to the panel (which is on the frame) 

    frame.setVisible(true);//Show the frame 
+0

不能同意更多。我試過這個確切的代碼(只是試了一遍)。同樣的結果 - 沒有標籤。 – Alex

+1

@ usr55410看到我的編輯,添加了一個基本的swing應用程序,或者比較你的,並找到你的錯誤,或者只是在這裏添加更多的代碼 –

+0

我明白了。這個問題不在這個代碼中。我的JPanel必須設置爲FlowLayout。非常感謝你的幫助。我很感激! – Alex

5

首先,你從JPanel

擴展

其次,你提供你自己現在JPanel

,從您的代碼段,有沒有辦法來判斷是否有ResultsPanemyPanel已被添加到0任何種類的,但從你所說的話,我會建議這將是你的主要問題。

-1

試試這個

JLabel myLabel = new JLabel("test text"); 
myLabel.setSize(myLabel.getPreferredSize()); 
panel.add(myLabel); 
panel.revalidate(); 
panel.repaint(); 
+0

應該是'getPreferredSize' –