gpt4 book ai didi

Java 在 drawRect 中 Swing 奇怪的额外像素

转载 作者:行者123 更新时间:2023-11-30 11:11:33 25 4
gpt4 key购买 nike

我偶然发现了图形 drawRect 的一个奇怪问题 - 它在矩形的左下角和右下角添加了两个额外的像素。这是虚拟机问题吗?或者我的理解是错误的?我在 Windows 8.1 64 位 java SE 1.8.0_25 上运行它。

编辑:我已编辑代码以正确覆盖paintComponent。我还注意到,当窗口首次出现时,我确实看到了所附屏幕截图中的内容(带有额外的像素),但是当我将其调整为较小的窗口并返回时(因此迫使 EDT 再次重新绘制整个面板) - 像素消失并且不会在随后的窗口大小调整中重新出现。
我什至添加了 fillRect 来最小化伪影的影响(如果有的话),但仍然无济于事。

我不知道该怎么做。

编辑 2: SSCCE 修改为从 EDT 运行 - 结果仍然相同

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class GuiTest extends JFrame
{
public GuiTest()
{
super( "Test" );

setContentPane( new MyPanel() );
setSize( new Dimension( 200, 200 ) );
setVisible( true );
}

public static void main( String[] args )
{
SwingUtilities.invokeLater( new Runnable()
{
@Override
public void run()
{
new GuiTest();
}
} );
}

class MyPanel extends JPanel
{
@Override
protected void paintComponent( Graphics g )
{
super.paintComponent( g );
g.setColor( Color.WHITE );
g.fillRect( 0, 0, getWidth(), getHeight() );
g.setColor( Color.BLACK );
g.drawRect( 10, 10, 100, 100 );
}
}
}

screenshot

最佳答案

哈!
我刚刚注意到这是一个硬件加速问题。
如果我使用 -Dsun.java2d.d3d=false 将其关闭,那么一切似乎都正常绘制 - 没有额外的像素。我已经检查了我的显示适配器 (NVIDIA GeForce GTX 850M) 驱动程序(按照@Fast Snail 的建议)并且它是最新的。
这很奇怪 - 但仍然没有答案,问题的根源至少很清楚。

关于Java 在 drawRect 中 Swing 奇怪的额外像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27361309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com