0

我正在使用 OpenJDK 11:

openjdk 版本“11.0.1” 2018-10-16
OpenJDK Runtime Environment 18.9(build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9(build 11.0.1+13,混合模式)

试图让应用程序在 JPanel 中绘制一些东西,我注意到一些令人讨厌的不准确之处。

以下代码应该在另一个下方绘制一系列线条(交换颜色是为了演示正在发生的事情):

class TestPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    setBackground(Color.WHITE);

    g.setColor(Color.RED);
    g.drawLine(301, 1, 350, 1);
    g.setColor(Color.BLUE);
    g.drawLine(301, 2, 350, 2);
    g.setColor(Color.GREEN);
    g.drawLine(301, 3, 350, 3);
    g.setColor(Color.RED);
    g.drawLine(301, 4, 350, 4);
    g.setColor(Color.BLUE);
    g.drawLine(301, 5, 350, 5);
    g.setColor(Color.GREEN);
    g.drawLine(301, 6, 350, 6);
    g.setColor(Color.RED);
    g.drawLine(301, 7, 350, 7);
    g.setColor(Color.BLUE);
    g.drawLine(301, 8, 350, 8);
    g.setColor(Color.GREEN);
    g.drawLine(301, 9, 350, 9);
    g.setColor(Color.RED);
    g.drawLine(301, 10, 350, 10);
}

}

然而,不是让一条线在另一条线下方绘制,而是在一些线之间存在间隙: 画有间隙的线条

我想这可能是由虚拟坐标系和物理坐标系之间的转换引起的。

然而,当精确度真的很重要时,如何让它像素完美呢?

4

1 回答 1

1

我在几个 jdk 版本上对其进行了测试。结果是: OpenJDK Runtime Environment (build 1.8.0_40-b25): 工作正常
OpenJDK Runtime Environment (build 9+181): 错误行为
OpenJDK Runtime Environment 18.3 (build 10.0.2+13): 错误行为
OpenJDK Runtime Environment 18.9 (build 11.0.1+13):错误行为

谢谢大家的时间和帮助。

于 2018-12-20T10:13:37.983 回答