2012-11-22 125 views
1

我想用Java創建一個簡單的GUI。我知道創建JLabel等的基本知識。但是,我找不到爲什麼我的JLabel沒有顯示在屏幕上。這裏是我的代碼:Java GUI不會顯示JLabel

package test; 

import java.awt.Color; 
import java.awt.Font; 
import java.awt.GridLayout; 
import java.awt.event.*; 
import javax.swing.*; 

public class A1Panel extends JPanel implements ActionListener { 
    JLabel firstInt; 

    public void init() { 
     makeComponents(); 
     makeLayout(); 
    } 

    private void makeComponents() { 
     firstInt = new JLabel("First argument"); 
     firstInt.setFont(new Font("Helvetica", Font.BOLD, 16)); 
     firstInt.setBackground(Color.lightGray); 
     firstInt.setVisible(true); 
     firstInt.setHorizontalAlignment(SwingConstants.CENTER); 
    } 

    private void makeLayout() { 
     add(firstInt); 
    } 

    public void actionPerformed(ActionEvent e) {  
    } 
} 

我再加入我的JPanelJFrame使用不同的類名爲GUI:

import test.A1Panel; 

public class GUI { 
public static void main(String[] args) {  
    JFrame frame = new JFrame("Testing GUI"); 
    frame.setLayout(new GridLayout(1,3)); 

    JPanel panel = new A1Panel(); 
    panel.setBorder(BorderFactory.createRaisedBevelBorder()); 
    frame.add(panel); 

    frame.setSize(800,600); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    frame.pack(); 
    } 
} 

當我打編譯,我所得到的是一個有三個空一個簡單的框架面板。我不明白爲什麼我的JLabel不在第一個面板中,因爲我已將它添加到我的框架中。我錯過了什麼嗎?

+0

呼叫搖擺相關的代碼後,不主線程。 –

回答

1

添加標籤的代碼實際上並未在主要中調用,是嗎?所以仔細看一下,init是什麼時候實際調用的?

看那

private void makeLayout() 

方法。

2

你以後實例A1Panel,你有沒有叫A1Panel.init()

我建議刪除init()並添加所有代碼的A1Panel構造。但是,如果你想保持init()功能,你會怎麼稱呼它後JPanel panel = new A1Panel()

+0

然後我應該在哪裏調用它? – iHubble

+0

@ fireshadow52,不正確。如果他要調用'panel.init()',它可以工作,而不需要'static'修飾符。 – Timr

1

如果我通過A1Panel()更換public void init(),它的工作。感謝您的幫助。

2

框架不是空的,面板是。我的代碼中沒有任何地方可以看到對方法init()makeComponents()的調用。事實上,我會變成你的init()方法爲構造函數,像這樣:

public A1Panel() { 
    makeComponents(); 
    makeLayout(); 
} 

這另一種方法是調用panel.init()的EDT線程上宣佈JPanel panel = new A1Panel()