Java:JPanel上的完美像素绘制

时间:2018-12-19 13:28:39

标签: java jpanel drawing2d pixel-perfect

我正在使用OpenJDK 11:

openjdk版本“ 11.0.1” 2018-10-16
OpenJDK运行时环境18.9(内部版本11.0.1 + 13)
OpenJDK 64位服务器VM 18.9(内部版本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);
}

}

但是,有些线之间没有空隙,而不是在另一条线之下绘制一条线: Lines drawn with gaps

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

但是,当精确度真正重要时,如何使其达到像素完美?

1 个答案:

答案 0 :(得分:1)

我在多个jdk版本中对其进行了测试。结果是: OpenJDK运行时环境(内部版本1.8.0_40-b25):正常工作
OpenJDK运行时环境(内部版本9 + 181):错误行为
OpenJDK运行时环境18.3(内部版本10.0.2 + 13):错误行为
OpenJDK运行时环境18.9(内部版本11.0.1 + 13):错误行为

感谢大家的时间和帮助。