Прямоугольник границы Java - PullRequest
1 голос
/ 19 октября 2011

У меня есть несколько фигур, созданных классом Rectangle, и я хочу окружить их толстой рамкой.Однако методы drawRect и drawOval form Graphics класс создают тонкую линию в качестве границы фигуры.Как я могу настроить их так, чтобы я мог манипулировать толщиной границы?Если это невозможно или неэффективно, как еще можно назначить настраиваемую границу для фигур?Можно мне Rectangle2D или Graphics2D?

После этого, вы знаете, как я могу «закруглить» углы границы квадрата, чтобы не быть резкими?

Ответы [ 3 ]

3 голосов
/ 19 октября 2011

Просмотр штрихов Graphics2D:

Если круговое соединение в вашем ударе недостаточно мягкое, посмотрите на RoundRectangle2D.

3 голосов
/ 19 октября 2011

Чтобы сделать границу более толстой, используйте Graphics2D.setStroke(...). И чтобы нарисовать «закругленные» прямоугольники, используйте Graphics.drawRoundRect(...).

0 голосов
/ 03 января 2019

Я реализовал округлую форму для иконок.

1) Толстый бордюр можно покрасить:

BasicStroke dashed =new BasicStroke(3.0f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER,10.0f);

2) Округлую форму можно нарисовать:

Ellipse2D.Double circle = new Ellipse2D.Double(x+1, y+1, 14, 14);
Ellipse2D.Double circleBorder = new Ellipse2D.Double(x, y, 15, 15);

Весь код здесь:

public class ColorIcon implements Icon {

private Color color = Color.WHITE;

/**
 * Constructor for implement custom colored icon 
 * @param color - custom parameter for creating colored icon.
 */
public ColorIcon(@Nonnull Color color) {
    this.color = color;
}

/**
 * Default constructor for implement default icon. 
 */
public ColorIcon() {
}

@Override
public void paintIcon(@Nonnull Component c, @Nonnull Graphics g, int x, int y) {
    Graphics2D g2 = (Graphics2D) g;
    RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    BasicStroke dashed =new BasicStroke(3.0f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER,10.0f);
    Ellipse2D.Double circle = new Ellipse2D.Double(x+1, y+1, 14, 14);
    Ellipse2D.Double circleBorder = new Ellipse2D.Double(x, y, 15, 15);
    g2.setColor(getColor());
    g2.setRenderingHints(hints);
    g2.fill(circle);
    Composite oldComposite=g2.getComposite();
    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0));        
    g2.setColor(new Color(1,1,1,1));
    g2.setStroke(dashed);
    g2.draw(circleBorder);
    g2.setComposite(oldComposite);
}

@Override
public int getIconWidth() {
    return 15;
}

@Override
public int getIconHeight() {
    return 15;
}

public Color getColor() {
    return color;
}

public void setColor(@Nonnull Color color) {
    this.color = color;
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...