【问题标题】:Java weird rectangle renderingJava 奇怪的矩形渲染
【发布时间】:2015-08-18 14:32:48
【问题描述】:

我想问一下是不是bug。

当我使用 fillRect 方法时,它会渲染一个比方法 drawRect 小一个像素的矩形。

有没有人和我一样的问题? :( 或者是否存在解决此问题的方法?

下面是一个很小的示例代码:

public Frame(){
    super("Sample rectangle");
    setExtendedState(this.getExtendedState() | JFrame.MAXIMIZED_BOTH);
    setUndecorated(true);       
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setVisible(true);
}

public void paint(Graphics g){
    g.setColor(Color.BLACK);
    g.fillRect(0,0, getWidth()-1, getHeight()-1);

    g.setColor(Color.RED);
    //g.drawRect(0,0, getWidth()-1, getHeight()-1);
    //wrap.graphics(g);
}

【问题讨论】:

    标签: java graphics rendering


    【解决方案1】:

    此行为与相关Javadoc 中的描述完全相同:

    填充矩形 填充指定的矩形。矩形的左右边缘在 x 和 x + width - 1。顶部和底部边缘在 y 和 y + height - 1

    drawRect 绘制指定矩形的轮廓。矩形的左右边缘位于 x 和 x + 宽度处。顶部和底部边缘位于 y 和 y + 高度。

    【讨论】:

    • 哈哈,太糟糕了。为什么我想画一个宽度为-1,高度为-1的矩形。它甚至不适用于边框,因为对于边框,它应该是宽度 -2 和高度 -2,X +1 和 Y +1。
    • 有没有办法绘制正确的填充矩形的宽度和高度?我的意思是不要像 i*iot 那样写 +1
    • 在宽度和高度参数中添加一个。
    • 如果您的意思是:填充与绘制完全相同的区域,那么当然:只需在调用 fillRect 时将宽度和高度加 1!
    • 刚刚更新了我的评论。对不起:(
    【解决方案2】:

    根据Javadoc(强调我的):

    drawRect

    绘制指定矩形的轮廓。矩形的左右边缘位于 x 和 x + 宽度。顶部和底部边缘位于 y 和 y + 高度。矩形是使用图形上下文的当前颜色绘制的。

    fillRect

    填充指定的矩形。矩形的左右边缘在 x 和 x + width - 1 处。顶部和底部边缘位于 y 和 y + height - 1。生成的矩形覆盖区域宽度像素宽,高度像素高。使用图形上下文的当前颜色填充矩形。

    【讨论】:

    • 有没有办法绘制正确的填充矩形的宽度和高度?
    • 当前的绘制方式正确。它按规定工作。我相信它是这样设计的,以便您可以轻松绘制表格,其中两个相邻的单元格将具有单像素轮廓(重叠轮廓)。
    • 如果我想画一张桌子,我会画fillRect(x,y,width,height) 然后drawRect(x-1,y-1,width+2,height+2) :S。我想我会更好地转向 C 和 Allegro。 Java 刚开始有点让我生气 :(
    • 是的,你也可以这样做:)
    • 怎么样? drawRect 绘制它 x+widthfillRect x+width-1 只有一个像素差:(
    猜你喜欢
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2015-09-05
    • 2014-02-15
    相关资源
    最近更新 更多