2011-03-16 75 views
0

我正在寫一個程序,它只是一個簡單的形狀製造者,我應該是我的主面板,ShapeMakerPanel,以及那個面板上的2個面板,controlPanel(它包含用於選擇形狀的按鈕和清理它等)和drawingArea(實際繪製形狀的地方),但無論我做什麼,我都無法將繪圖顯示在drawingArea上。如果我只是使用paintComponent並註釋掉添加(drawingArea),那麼繪圖的東西就起作用了,但是在最底層,我該如何繪製drawingArea Jpanel。此外,當我畫的形狀,我只能有一次一個,因爲我每次開始一個新的,面板擦拭clean`在JPanels上繪畫

super.paintComponent(g); 
    g.setColor(penColor); 
    if (p1 != null && p2 != null) 
    { 
     if (shapeChoice.getSelectedItem().equals("Line")) 
     { 
      Line line = new Line(p1.x, p1.y, p2.x, p2.y); 
      line.draw(g); 
     } 
    } 

我知道它的super.paintComponent方法(G)搞砸了我,但沒有,因爲我拖動鼠標,它會繪製數百行。

如果您想知道Line類,我們必須爲每個繪製的形狀創建一個類,draw()方法只是使用線的座標並將其放入drawLine()中。

回答

1

請勿在ShapeMakerPanel中重寫paintComponent();在drawingArea的類中覆蓋它(如果drawingArea是普通的JPanel,則創建JPanel的新子類)。一般來說,您需要對要繪製的組件進行子類化。

+0

備註:在大多數情況下,JPanel不會爲JComponent未提供的自定義繪畫帶來任何影響。 – 2011-03-16 04:05:47

0

此外,當我做畫的形狀,我只能有一次一個,因爲我每次開始一個新的,面板擦拭clean`

Custom Painting Approaches的一對夫婦如何解決這個問題。