如何让Java Point的getX()方法起作用?

时间:2016-01-07 00:10:38

标签: java arrays graphics coordinates point

我正在尝试用Java编写一群鸟类用于学校的项目。由于我只是在2d中这样做,我认为最好使用Points数组,因为它会为我提供x和y坐标。 但是,尝试在getX()上使用getY()Point方法时,我会收到“无法解决方法”错误。

这是我将x和y位置分配给我的“鸟类”Point数组的方法:

    public Point[] pointArray() {             

    points[0] = new Point(100, 100);                            
    Random randGen = new Random();

    for (int i = 1; i < points.length; i++){
        randX = (randGen.nextInt(5)-2);                         
        randY = (randGen.nextInt(5)-2);
        points[i] = new Point(100+randX, 100+randY);
    }
    return points;
}

在这种方法中我绘制了我的“鸟”:

    public void paintComponent(Graphics g) {

    super.paintComponent(g);
    Point[] coordinates = pointArray();
    g.setColor(Color.BLACK);
    g.fillRect(0, 0, this.getWidth(), this.getHeight());
    g.setColor(Color.WHITE);

    for(int i = 0; i<coordinates.length; i++ ) {
        int x = coordinates[i].getX();
        int y = coordinates[i].getY();
        g.fillOval(x, y, 5, 5);
    }
    }

就像我说的那样,我在getX()getY()方法上遇到了“无法解决方法”错误,我看不出原因。我还尝试先提取一个Point数组,然后使用它上面的方法,但我得到了同样的错误。我能找到的只有this question,我就像他们一样调用了这个方法。

我对Java和编程很新,所以任何帮助都非常感谢。 这是我在这里发表的第一篇文章,我很高兴能成为社区的一员,你们已经不止一次帮助过我了。)

1 个答案:

答案 0 :(得分:0)

java.awt.Point#getX/Y返回double,但您要将值分配给int

假设您导入了正确的类,例如

int x = coordinates[i].x;
int y = coordinates[i].y;

应该可以正常工作

更新...

似乎对我来说工作得很好......

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Point;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Pointy {

    public static void main(String[] args) {
        new Pointy();
    }

    public Pointy() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private Point[] points = new Point[10];

        public TestPane() {
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Point[] coordinates = pointArray();
            g.setColor(Color.BLACK);
            g.fillRect(0, 0, this.getWidth(), this.getHeight());
            g.setColor(Color.WHITE);

            for (int i = 0; i < coordinates.length; i++) {
                int x = coordinates[i].x;
                int y = coordinates[i].y;
                g.fillOval(x, y, 5, 5);
            }
        }

        public Point[] pointArray() {

            points[0] = new Point(100, 100);
            Random randGen = new Random();

            for (int i = 1; i < points.length; i++) {
                int randX = (randGen.nextInt(5) - 2);
                int randY = (randGen.nextInt(5) - 2);
                points[i] = new Point(100 + randX, 100 + randY);
            }
            return points;
        }

    }

}

没有你自己定义的Point类在哪里?