Java2D:增加线宽

Boo*_*ean 75 java graphics swing java-2d

我想增加Line2D的宽度.我找不到任何方法来做到这一点.我是否需要为此目的制作一个小矩形?

aio*_*obe 156

您应该使用setStroke设置Graphics2D对象的笔触.

http://www.java2s.com上的示例为您提供了一些代码示例.

以下代码生成以下图像:

import java.awt.*;
import java.awt.geom.Line2D;
import javax.swing.*;

public class FrameTest {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Demo");
        Container cp = jf.getContentPane();
        cp.add(new JComponent() {
            public void paintComponent(Graphics g) {
                Graphics2D g2 = (Graphics2D) g;
                g2.setStroke(new BasicStroke(10));
                g2.draw(new Line2D.Float(30, 20, 80, 90));
            }
        });
        jf.setSize(300, 200);
        jf.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

(请注意,该setStroke方法在Graphics对象中不可用.您必须将其强制转换为Graphics2D对象.)


该帖子已被改写为一篇文章在这里.

  • +1为插图!另外,考虑`g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON)` (27认同)

Zha*_*ang 5

什么是Stroke:

BasicStroke 类为图形基元的轮廓定义一组基本的渲染属性,这些属性由 Graphics2D 对象渲染,该对象的 Stroke 属性设置为此 BasicStroke。

https://docs.oracle.com/javase/7/docs/api/java/awt/BasicStroke.html

请注意设置Stroke:

Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(10));
Run Code Online (Sandbox Code Playgroud)

正在设置线宽,因为BasicStroke(float width):

构造一个具有指定线宽以及端点和连接样式默认值的实心 BasicStroke。

并且,它还会影响其他方法,例如Graphics2D.drawLine(int x1, int y1, int x2, int y2)和Graphics2D.drawRect(int x, int y, int width, int height):

使用由 Stroke 对象返回的轮廓 Shape 的 Graphics2D 接口的方法包括绘制以及根据该方法实现的任何其他方法,例如drawLine、drawRect、drawRoundRect、drawOval、drawArc、drawPolyline和drawPolygon。