2016-04-08 54 views
0

我有這樣的代碼組件沒有出現在西部邊界佈局

package com.company; 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Alarm extends JFrame { 
JFrame frame = new JFrame("Java Alarm Clock"); 
JMenuBar menuBar = new JMenuBar(); 

JMenu clock = new JMenu("Clock"); 
JMenu alarm = new JMenu("Alarm"); 
JMenu help = new JMenu("Help"); 

public Alarm() { 
    super("Java Alarm Clock"); 
    getContentPane().setBackground(new Color(204,204,255)); 
    setLayout(new BorderLayout()); 
    setDefaultCloseOperation(frame.EXIT_ON_CLOSE); 
    setSize(770,470); 
    setVisible(true); 

    add(new pclock() , BorderLayout.WEST); 

    add(menuBar , BorderLayout.NORTH); 
    menuBar.setBackground(new Color(204,204,255)); 
    menuBar.add(clock); 
    menuBar.add(alarm); 
    menuBar.add(help); 
} 

class pclock extends JPanel { 
    public void paintComponent(Graphics g) { 
     setBackground(new Color(204,204,255)); 
     super.paintComponent(g); 
     g.setColor(Color.WHITE); 
     g.fillOval(40, 100, 180, 180); 
    } 
} 

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

我所要的輸出是這樣的產品圖 enter image description here

但是當我運行代碼的圈子不會出現 當我這個代碼

add(new pclock() , BorderLayout.WEST); 

改變

它只會出現0
add(new pclock()); 

那麼如何讓它像左圖那樣出現? 謝謝

+0

你能告訴我們它目前的樣子嗎,即你看到的問題? –

+1

'public void paintComponent(Graphics g){ setBackground(new Color(204,204,255)); super.paintComponent(g);'調用'setBackground(new Color(204,204,255));'應該在構造函數中。它只需要做一次,並且我們不應該改變paint方法中的組件的狀態,因爲這會觸發'repaint()'! –

+0

'setVisible(true);'應該是'Alarm'構造函數中的最後一個方法調用。 –

回答

4
  1. 類名應該以大寫字母開頭。您自定義的類名稱不正確。

  2. BorderLayout的WEST區域將尊重添加到它的任何組件的寬度。您的自定義組件的大小爲(0,0),因此不需要顯示任何內容。您需要覆蓋自定義類的getPreferredSize()方法以返回時鐘的大小。

有關更多信息和工作示例,請參閱Swing教程中關於Custom Painting的部分。