這個問題是一個後續到一個我問前段時間: Drawing a bordered path with sharp corners in Java的Java Swing的BasicStroke「帽」並不適用於零度角
實驗之後,我發現了一些行爲,可以預期,或可能是一個錯誤,但任何方式都不是我想要的。 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
與角度每個圖像中略有下降。最終(在底部圖像中)角度達到零。在這種情況下,圓形的「連接」不再被繪製。這種說法很有道理,但有點不對。我不確定它是否有意。有趣的是,如果你改變了角度稍微大於0(通過改變以上path.lineTo(100, 99.999);
引用的行圓角被再次吸入即
在我的應用程序是可能的路徑原路折回對自己(即創建零度角度),在這種情況下,在這種情況下,在審美上吸引更多的參與者。是否有任何方法可以破解Java源代碼以使其發揮作用?
感謝您的闡述。我的路徑經常變化,只是不斷用'paint'方法計算它是最簡單的。無論如何,事實證明,這並不像我想要運行這些計算那樣痛苦。雖然你的斜率比較比我所做的畢達哥拉斯計算更容易計算。 – The111 2013-03-23 05:21:45