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

标签 java arrays swing jpanel paint

我在尝试使用鼠标在 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/

相关文章:

java - 如何使用 xpath 定位单个标签下存在的多个属性/标签

java - 在使用 Java 8 重新协商 TLS_1.2 期间,服务器证书更改受到限制

java - queryDSL 中的 Group concat 等价物

java - AntBuilder 找不到包 org.junit

ios - 为什么我们应该在 Swift 中使用 "NSMutableArray"或 "NSMutableDictionary"?

java - 如何防止 Java Swing BoxLayout 中的 JTextFields 扩展?

c - 不再有令人困惑的指针

c++ - 试图制作一个排序的动态列表(数据结构)

java - 图形用户界面 : action listener compiler-error

java - 实时更改 JLabel 的文本值