gpt4 book ai didi

java - g.fillPolygon 未更新位置(整数数组未更新...?)

转载 作者:行者123 更新时间:2023-12-01 18:40:12 25 4
gpt4 key购买 nike

我在尝试使用鼠标在 JPanel 周围移动自定义多边形时遇到了问题;多边形的位置永远不会更新,即使在重新绘制时也是如此:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.util.ArrayList;
import java.util.List;

public class Figure extends JPanel{
/**
*
*/
private static final long serialVersionUID = 1L;
public int nPoints = 17, x = 120, y = -60;
int MouseX, MouseY;
final static int SIZE = 400;
public int[] xPoints = {x + 100, x + 85, x + 70, x + 55, x + 40, x + 55, x + 55, x + 40, x + 25, x + 55, x + 55, x + 85, x + 85, x + 115, x + 100, x + 85, x + 85};
public int[] yPoints = {y + 375, y + 385, y + 340, y + 385, y + 375, y + 335, y + 200, y+ 240, y + 225, y + 185, y + 175, y + 175, y + 185, y + 220, y + 240, y + 200, y + 335, y + 375};
List<Integer> xList = new ArrayList<Integer>();
List<Integer> yList = new ArrayList<Integer>();
static final Figure m = new Figure();

public static void main(String[] args){
final JFrame frame = new JFrame();
frame.setTitle("Figure");
frame.getContentPane().add(m);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(SIZE, SIZE);
frame.setResizable(true);
frame.setVisible(true);
m.setBackground(Color.darkGray);
}

public void mouseMovement(){
addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
if(((e.getX() >= xPoints[8] && e.getX() <= xPoints[13]) && (e.getY() >= yPoints[10] && e.getY() <= yPoints[1])) || ((e.getX() >= (x + 45) && e.getX() <= (x + 45 + SIZE / 8)) && (e.getY() >= (y + 102) && e.getY() <= (y + 102 + SIZE / (57 / 10))))){
x = e.getX() - 75;
y = e.getY() - 150;
repaint();
}else{
repaint();
}
}
});
}

public Figure(){
mouseMovement();
}

@Override
public void paint(Graphics g){
super.paint(g);
g.setColor(Color.black);
g.fillPolygon(xPoints, yPoints, nPoints);
g.fillPolygon(xPoints, yPoints, nPoints);
g.setColor(Color.white);
g.fillOval(x + 45, y + 102, SIZE / 8, SIZE / (57 / 10));
}

}

我对此的想法是,整数数组没有使用我的预定义变量正确更新,但后来我遇到了不知道如何正确更新它的问题。考虑到我用来表示图形“头部”的椭圆形的位置,似乎应该如此,但显然我错了,所以我想知道为什么只在 fillPolygon< 中使用数组 不起作用以及我如何获取更新的位置。非常感谢。

最佳答案

使用Polygon类通过点数组创建多边形。

然后在绘画方法中,您可以将 Graphics 对象转换为 Graphics2D 对象,并使用 Graphics2D.fill(Shape) 方法来绘制多边形。

当您需要移动 Polygon 时,可以使用 Polygon 类的 translate(...) 方法。

此外,您不应该重写 Paint() 方法。自定义绘制是通过重写 paintComponent() 方法来完成的。

关于java - g.fillPolygon 未更新位置(整数数组未更新...?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20258328/

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