【问题标题】:Drawing line between two JPanels在两个 JPanel 之间画线
【发布时间】:2013-05-18 09:58:31
【问题描述】:

我想在两个 JPanel 之间画线;请验证我的代码是否给出了 NULL 指针异常 "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);
}

【问题讨论】:

    标签: java swing jpanel graphics2d


    【解决方案1】:

    因为您正在投射存储 NULL 值到g2d

    看看这段代码:

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

    在第一行中,gNULL。它正在被投射并分配给g2d。所以,g2d 变成了NULL,这意味着它不能被使用。

    【讨论】:

    • 那该怎么办?建议?
    • 强烈不建议覆盖任何组件的paint。我也相当肯定,如果您确实覆盖了父容器的 paint 方法,它仍然无法正常工作。花了一些时间处理一个类似的问题,然后我自己也遇到了这个问题
    • @asd,如何准确使用Graphics组件请参考MadProgrammer的回答
    • 仅供参考,请查看Performing Custom PaintingPainting in AWT and Swing 了解有关Swing 绘画的更多详细信息;)
    • 如何包含面板?? JPanel 1 和 JPanel 2 绘制(图形,JPanel 1,JPanel 2)不工作
    【解决方案2】:

    你有很多选择。

    基本前提是,您需要某种方式“在”当前容器(以及它的子容器)的顶部进行绘制。

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

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

    • 查看here了解更多详情。
    • 查看here 示例

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-07
      • 2011-12-04
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 2012-12-20
      相关资源
      最近更新 更多