这个问题是我前段时间问的一个问题的后续问题: 在 Java 中绘制带有尖角的边界路径
经过实验,我发现了一些可能是有意或可能是错误的行为,但我不希望任何一种方式。SSCCE:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.GeneralPath;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class CornerTest {
private JFrame frame;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CornerTest window = new CornerTest();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public CornerTest() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel() {
protected void paintComponent(Graphics g) {
GeneralPath path;
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setStroke(new BasicStroke(15.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
g2d.setColor(Color.BLACK);
path = new GeneralPath();
path.moveTo(100, 100);
path.lineTo(200, 100);
path.lineTo(100, 50);
g2d.draw(path);
}
};
frame.setBackground(Color.CYAN);
frame.add(panel);
}
}
通过取线path.lineTo(100, 50);
并使用第二个参数,我们可以改变绘制路径的角度。有关各种示例,请参见下图。
基本上,我GeneralPath
在每个图像中绘制角度略微减小的 a。最终(在底部图像中)角度达到零。在这种情况下,圆形的“连接”不再被绘制。这种说法是有道理的,但又不是。我不确定这是否是有意的。有趣的是,如果将角度更改为略大于0(即通过将上面引用的线更改为path.lineTo(100, 99.999);
圆角,则会再次绘制。
在我的应用程序中,路径可能会在自身上加倍(即创建零度角),在这种情况下,在这种情况下绘制连接圆在美学上更具吸引力。有什么办法可以破解 Java 源代码来完成这项工作吗?