この質問は、私が以前に尋ねた質問のフォローアップです 。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);
を引き、2番目の引数で遊ぶことにより、描画されるパスの角度を変更できます。さまざまな例については、以下の画像を参照してください。
基本的にはGeneralPath
、各画像で角度を少し小さくして描いています。最終的に(下の画像で)角度はゼロに達します。この場合、丸みを帯びた「結合」はペイントされなくなります。この種の意味はありますが、そうではありません。それが意図されているかどうかはわかりません。興味深いことに、角度を0より少し大きく変更すると(つまり、上記の線をpath.lineTo(100, 99.999);
丸みを帯びた角に変更すると、再び描画されます。
私のアプリケーションでは、パスが二重に戻る(つまり、0度の角度を作成する)ことが可能です。この場合、このような場合に結合ラウンドを描画する方が、美的にはるかに魅力的です。これを機能させるためにJavaソースをハックする方法はありますか?