gpt4 book ai didi

java - BasicStroke 导致偏离中心

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:55 24 4
gpt4 key购买 nike

将 Graphics2D 对象的 BasicStroke 更改为 1 以外的任何值会导致它在启动时无法在 JPanel 的中心绘制某些内容。

这是一个位于 JFrame 上的 JPanel。这是我的项目的基本思想,但它不是全部。

public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
if(this.centered){
this.myShape.setCenterX(this.getWidth()/2);
this.myShape.setCenterY(this.getHeight()/2);
}
g2.setStroke(new BasicStroke(3)); //new BasicStroke(1) works fine
g2.draw(this.myShape);
}

当您单击并拖动 myShape 时,myShape 将立即跳转到中心。但是当我最初编译并运行它时,如果笔划不是 1,paintComponent() 会将其绘制在屏幕中心上方约一厘米处。

我的居中方式有问题吗?我定义了 MyShape 类,因此那里可能会出现错误。也许中心和绘图点之间的距离是 JPanel 和 JFrame 顶部之间的空间?我该如何修复它?

编辑:添加图片

http://s21.postimage.org/dfpmz73et/Untitled_1.png第一个形状就在我想要的地方。另外两个在我想要的上面。但无论笔划大小如何,距中心的位移似乎都是相同的。

最佳答案

是的,我相信这是形状的正常行为。它假定轮廓为 1 像素。因此,当您知道要更改基本笔画大小时,需要更改中心计算。像这样的东西:

public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
BasicStroke stroke = new BasicStroke(3);
int adjustment = stroke.getLineWidth() - 1;

if(this.centered){
this.myShape.setCenterX(this.getWidth() + adjustment / 2);
this.myShape.setCenterY(this.getHeight() + adjustment / 2);
}
g2.setStroke(stroke);
g2.draw(this.myShape);
}

关于java - BasicStroke 导致偏离中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15465085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com