Я пытаюсь потянуть полигон со штрихом 1 пикселя. Поскольку весь полигон масштабируется 100, я установил ширину строки на 0,01. По некоторым причинам, хотя, полигон оттянут с экранной шириной строки того, что надеется быть 100 пикселей вместо 1.
Я использую GeneralPath
как форма полигона. Тонкие строки действительно становятся оттянутыми, если я использую тот же подход для рисования Line2D
формы.
g2d.scale(100, 100);
g2d.setStroke(new BasicStroke(0.01f));
g2d.draw(theShape);
Новая информация: Если я удаляю setStroke строку, я правильно получаю строку на 2 пикселя, так как BasicStroke 0.02f был установлен на объекте Graphics2D ранее.
Это - реальная setStroke строка
g.setStroke(new BasicStroke((float) (1f / getRoot().scaleX)));
Следующий код производит вывод, показанный ниже. У вас должна быть ошибка в другом месте вашего кода. Возможно, еще один вызов шкалы
, который вы пропустили в своем вопросе:
import java.awt.*;
public class FrameTest {
public static void main(String[] args) throws InterruptedException {
JFrame f = new JFrame("Demo");
f.getContentPane().setLayout(new BorderLayout());
f.add(new JComponent() {
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
GeneralPath theShape = new GeneralPath();
theShape.moveTo(0, 0);
theShape.lineTo(2, 1);
theShape.lineTo(1, 0);
theShape.closePath();
g2d.scale(100, 100);
g2d.setStroke(new BasicStroke(0.01f));
g2d.draw(theShape);
}
});
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300, 300);
f.setVisible(true);
}
}