2014-02-08 103 views
0

我剛剛開始擺動Java ...我有這個問題關於創建一個單獨的JPanel類放在主類(一與JFrame),JPanel不會出現在主類中。該程序可以運行,但只有框架纔會顯示。我希望我能看到帶有「hallo」標籤的面板,但沒有。JPanel將不會顯示在JFrame(主類) - 初學者Java

我知道我一直在尋找在這個網站的其他解決方案,但我沒有真正得到它的一些。

這是我的JPanel類:

import javax.swing.*; 

public class CreatePanel extends JPanel 
{ 
    private JPanel panel = new JPanel(); 
    private JLabel narrate; 

    public void setNarrate(String label) 
    { 
     narrate = new JLabel(label); 
     panel.add(narrate); 
     panel.setVisible(true); 
    } 

    public JPanel getPanel() 
    { 
     return panel; 
    } 
} 

這是與JFrame的主類:

import javax.swing.*; 

public class Maine extends JFrame 
{ 
    private static JFrame frame = new JFrame(); 

    public static void main(String[] args) 
    { 
     new Maine(); 

     CreatePanel panel1 = new CreatePanel(); 

     panel1.setNarrate("Hallo"); 
     panel1.getPanel(); 
     frame.add(panel1); 
    } 

    public Maine() 
    { 
     frame.setTitle("Detective Game"); 
     frame.setSize(500,500); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     frame.setLocationRelativeTo(null); 
     frame.setIconImage(new ImageIcon("agent.png").getImage()); 
    } 
} 
+0

當你的類擴展JFrame時,你不需要通過構圖來完成。只需在你的類構造函數中調用方法即可! –

回答

2

你混淆繼承和組合。你的CreatePanel類擴展了JPanel。所以它是一個JPanel。但是在此面板中沒有任何組件,因爲您所做的是創建另一個JPanel並向此另一個JPanel添加標籤。

總之,你CreatePanel類應該是:

public class CreatePanel extends JPanel { 
    private JLabel narrate; 

    public CreatePanel(String label) { 
     narrate = new JLabel(label); 
     this.add(narrate); 
    } 
} 

也就是說,使用面板只包含一個標籤是沒有用的。您可以直接將標籤添加到框架。

0

你打電話給panel1.getPanel(),但除了佔用內存外,它什麼也不做。做frame.add(panel1.getPanel()),你得到面板,然後添加它。在你的代碼中,你得到的面板,但不分配給任何東西。