0

我想在两个 JPanel 之间画线;请验证我的代码是否在“g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);”处给出 NULL 指针异常

代码::

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

2 回答 2

4

因为您将值转换存储 NULLg2d.

看看这段代码:

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

在第一行中,gNULL。它正在被强制转换并分配给g2d. 所以,g2d变成NULL这意味着它不能被使用。

于 2013-05-18T10:06:39.023 回答
1

你有很多选择。

基本前提是,您需要一些方法来“在”当前容器(以及它的子容器)的顶部“绘制”。

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

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

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

于 2013-05-18T10:30:58.690 回答