在按钮的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);
}
答案 0 :(得分:3)
为什么要在按钮周围画出这么多圆角矩形?
据我所知,正确的方法是在绘制你喜欢的边框时使用setStroke()
API。
答案 1 :(得分: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);