两个JPanel之间的画线

时间:2013-05-18 09:58:32

标签: java swing jpanel graphics2d

我想在两个JPanel之间绘制线条;请验证我的代码是否给出了一个NULL指针Exception at “g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);”

代码::

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);
}

2 个答案:

答案 0 :(得分:4)

因为您投射存储 NULL值为g2d

看看这段代码:

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

在第一行中,gNULL。它正在投射并分配给g2d。因此,g2d变为NULL,这意味着无法使用它。

答案 1 :(得分:1)

您有很多选择。

基本前提是,您需要某种方式在当前容器(及其子项)的顶部绘制“覆盖”。

你可以覆盖父容器的paint方法,但这非常不推荐,因为它会产生很多令人讨厌的副作用。

更好的解决方案是利用JRootPane的玻璃窗格

  • 查看here了解详情。
  • 检查here以获取示例

你也可以使用JXLayer(或Java 7中已知的JLayer)来获得相同的结果,但我没有一个现成的例子