2013-05-18 187 views
0

我想繪製兩個JPanel之間的線;請驗證我的代碼,因爲它提供了一個空指針異常在 「g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);」兩個JPanel之間的繪製線

代碼::

Draw(JPanel one , JPanel two) 
{ 
    //Draw Line 
    Graphics2D g=null; 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
    RenderingHints.VALUE_ANTIALIAS_ON); 
    g2d.setColor(Color.lightGray); 
    2d.fillRect(0, 0, getWidth(), getHeight()); 
    g2d.setColor(Color.black); 
    Stroke s = new BasicStroke(4.0f); 


    // For getting the points of JPanel ona and two// 

    int x1 = one.getX() + one.getWidth()/2; 
    int y1 = one.getY() + one.getHeight()/2; 
    int x2 = one.getX() + one.getWidth()/2; 
    int y2 = two.getY() + two.getHeight()/2; 

    //Drawing line 
    g2d.drawLine(x1, y1, x2, y2); 
} 

回答

4

因爲你鑄造存儲NULL值​​。

看這個代碼:

Graphics2D g=null; 
Graphics2D g2d = (Graphics2D) g; 

在第一行中,gNULL。它正在投射並分配到​​。所以,​​變成NULL這意味着它不能使用。

+0

什麼一個例子那麼呢?建議? – Asd

+0

檢查更新的答案。 –

+0

強烈推薦重寫任何組件的「paint」。我也相當肯定,如果你重寫父容器的'paint'方法,它仍然不能正常工作。花了一些時間與類似的問題,並遇到這個問題我的自我 – MadProgrammer

1

您有多個選項。

基本的前提是,您需要某種方式在當前容器(它是孩子)的頂部繪畫「上方」。

你可以覆蓋父容器的paint方法,但是這是非常不推薦的,因爲它會產生很多令人討厭的副作用。

更好的解決方案,以充分利用JRootPane的玻璃板

  • 檢查here的更多細節。
  • 檢查here爲例

你也使用JXLayer(或JLayer,因爲它在Java 7中的已知)以達到相同的結果,但我沒有現成的

相關問題