2011-11-08 85 views
3

各位程序員,您好!我試圖添加兩個JLabel到JFrame,但添加標籤的第二個添加方法似乎覆蓋了我的第一個添加方法。我嘗試使用2個不同的標籤變量來解決這個問題,並使用setLocation方法爲每個標籤提供不同的座標點。但我似乎無法解決它。爲什麼我不能在我的程序中添加兩個標籤?順便說一句,我沒有得到任何錯誤。似乎更多的是我似乎無法解決的邏輯錯誤。在java中添加更多標籤

這裏是我當前的代碼:

import javax.swing.*; 

public class test { 

    private static JLabel label; 

    private static JLabel label1; 
    public static void main(String[] args){ 
     initializeLabel(); 
     initializeImage(); 
     initializeFrame(); 
    } 

    private static void initializeLabel(){ 
     label = new JLabel(); 
     label.setText("hi"); 
     label.setLocation(54,338); 
    } 

    private static void initializeImage(){ 
     label1 = new JLabel(); 
     label1.setText("sss"); 
     label1.setLocation(55, 340); 
    } 

    private static void initializeFrame(){ 
     JFrame frame = new JFrame(); 
     frame.add(label1); 
     frame.add(label); 

     frame.setVisible(true); 
    } 

}// class 
+0

考慮使用佈局,盧克。 –

回答

3

JFrame的默認佈局爲BorderLayout,默認位置是BorderLayout.CENTER

爲方便起見,BorderLayout解釋缺少字符串規範一樣的恆定CENTER的。

實際上,第二個標籤取代了第一個標籤。

4

閱讀Layout Managers。一個框架的默認佈局管理器是BorderLayout。您的代碼將兩個標籤添加到佈局的CENTER中。這不可能。 BorderLayout上的每個位置只能包含一個組件(它可能是一個帶有其他組件的JPanel)。

您需要使用不同的佈局管理器。不知道你的確切需求,很難建議使用哪個佈局管理器。

另外,擺脫所有這些靜態方法。 Swing教程有很多示例,可以讓您更好地瞭解如何構建您的程序。

6

按照以下方式更改您的代碼。

private static void initializeFrame(){ 
    JFrame frame = new JFrame(); 

    frame.setLayout(new FlowLayout()); // <-- you need this for now 

    frame.add(label1); 
    frame.add(label); 
    frame.setVisible(true); 

    // optional, but nice to have. 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
} 

請學習更多搖擺佈局在這裏:A Visual Guide to Layout Managers

更多:Creating a GUI With JFC/Swing

+2

我試圖決定是否對推薦將佈局更改爲「FlowLayout」的帖子進行投票。我決定用「現在」的代碼評論來發布你的帖子,並且有2個鏈接指向了這個年級。 +1 –

+0

@AndrewThompson:謝謝你的反饋。給定的代碼示例全部用靜態方法編寫。它顯示了提問者不成熟的人正在努力學習java和swing。我的想法是,我不應該解釋所有的細節,而應該告訴他如何第一次做正確的事情。當他能夠走到這麼遠時,也應該能夠肯定地通過下一個障礙。他只需要一些指導。當我給出答案時,這就是我想的。這就是所有...... – Kowser

+0

@AndrewThompson另外我也注意到他以前的NPE問題,所以他是一個很好的學習者,我相信他只是需要正確的方向。他也可以找到他的解決方案。 – Kowser

0

添加frame.setLayout(new FlowLayout());後的構建框架。