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 に答える