3

在按钮Graphics2D对象上执行一些自定义绘画时,我得到以下结果:

在此处输入图像描述

最左边的按钮未切换,另一个按钮已切换。如您所见,切换按钮有这些白色的“妊娠纹”。为什么这些在那里,我如何删除它们?

这是我用来绘制边框的代码:

// Draw border of button
if(!getModel().isSelected())
{
    g2.fillRoundRect(2, 2, getWidth() - 5, getHeight() - 5, ARC_WIDTH, ARC_HEIGHT);
    g2.setColor(Color.BLACK);
    g2.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, ARC_WIDTH, ARC_HEIGHT);
    g2.setColor(Color.WHITE);
    g2.drawRoundRect(1, 1, getWidth() - 3, getHeight() - 3, ARC_WIDTH, ARC_HEIGHT);
    g2.setColor(Color.WHITE);
    g2.drawRoundRect(2, 2, getWidth() - 5, getHeight() - 5, ARC_WIDTH, ARC_HEIGHT);
    g2.setColor(Color.BLACK);
    g2.drawRoundRect(3, 3, getWidth() - 7, getHeight() - 7, ARC_WIDTH, ARC_HEIGHT);
}
else
{
    g2.fillRoundRect(2, 2, getWidth() - 5, getHeight() - 5, ARC_WIDTH, ARC_HEIGHT);
    g2.setColor(Color.BLACK);
    g2.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, ARC_WIDTH, ARC_HEIGHT);
    g2.setColor(Color.BLACK);
    g2.drawRoundRect(1, 1, getWidth() - 3, getHeight() - 3, ARC_WIDTH, ARC_HEIGHT);
    g2.setColor(Color.BLACK);
    g2.drawRoundRect(2, 2, getWidth() - 5, getHeight() - 5, ARC_WIDTH, ARC_HEIGHT);
    g2.setColor(Color.BLACK);
    g2.drawRoundRect(3, 3, getWidth() - 7, getHeight() - 7, ARC_WIDTH, ARC_HEIGHT);
}
4

2 回答 2

3

你为什么在按钮周围画这么多圆角矩形?据我所知,正确的方法是setStroke()在绘制您喜欢的边框时使用 API。

于 2012-02-21T17:51:08.350 回答
2

这是因为如果通过绘制几个 1px 厚的边框来绘制,它会错过弧中的一些像素(用不同的颜色再次绘制它并放大图像以查看它)

使用填充设置边框的颜色,然后绘制对比边框

Color fillcolor = Color.WHITE;
Color bordercolor = Color.BLACK;

if(getModel().isSelected())
{
    fillcolor = Color.BLACK;
}
//fill the full rectangle
g2.setColor(fillcolor);
g2.fillRoundRect(0, 0, getWidth() - 1, getHeight() - 1, ARC_WIDTH, ARC_HEIGHT);

//draw contrasted borders
g2.setColor(bordercolor);
g2.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, ARC_WIDTH, ARC_HEIGHT);
g2.setColor(bordercolor);
g2.drawRoundRect(3, 3, getWidth() - 7, getHeight() - 7, ARC_WIDTH, ARC_HEIGHT);
于 2012-02-21T18:00:51.200 回答