2016-11-18 64 views
0

當我運行這段代碼時PaintComponent永遠不會被調用,因爲「繪製」消息永遠不會被打印,我不知道爲什麼?誰能幫忙?PaintComponent不會被JPanel調用

public class DisplayManager extends JPanel { 

public static final int WIDTH = 700, HEIGHT = 900; 

public Bottle bottle1 = new Bottle("res/bottleimage.png"); 
public Slider slider1 = new Slider(); 

public void initDisplay() 
{ 
    JFrame frame = new JFrame(); 
    JPanel panel = new JPanel(); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(new Dimension(WIDTH, HEIGHT)); 

    frame.add(panel); 

    frame.setVisible(true); 
} 

@Override 
public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    bottle1.imageIcon.paintIcon(this, g, 50, 50); 
    System.out.println("painted"); 
} 
} 
+1

如果你的'DisplayManager'應該是'JPanel',你必須將'DisplayManager'添加到'Frame'而不是一個新的'JPanel'。 'frame.add(this)'而不是'frame.add(面板)' –

+0

感謝夥計這工作 – PDPIG

+0

@PDPIG,這只是解決方案的一半。 – camickr

回答

2

有幾個與基本代碼的問題:

  1. 已經提到你需要你的DisplayManager類添加實例的框架或面板。

  2. 當您進行自定義繪畫時,您需要覆蓋組件的getPreferredSize()方法以返回所需的尺寸。目前您的組件的首選大小是(0,0)。

到DISPLAYMANAGER添加到框架的建議只能是因爲默認佈局管理器是一個BorderLayout,默認情況下被添加到,這意味着它獲得幀中所有可用空間的佈局CENTER

但是如果你使用:

frame.add(this, BorderLayout.PAGE_START); 

你不會看到的元件尺寸它的大小爲(0,0);

相關問題