如何在java中的某些坐标上查找对象

时间:2017-08-19 06:01:42

标签: java swing object find coordinates

对于Java而言,我是初学者,我正试图找到一种方法来查看对象是否位于某些坐标上。我试图寻找类似的问题,但我还是没有找到答案。

我正在处理的程序是地图(图像文件),用户应该能够创建地点并将它们放置在地图上(将在地图上显示为三角形)。还有这个功能,用户应该能够输入坐标以查看这些坐标上是否有位置。

对象是“Place”类的对象,包含名称,x坐标和y坐标。

这是我的代码:

class CoordinatesListener implements ActionListener {

    public void actionPerformed(ActionEvent ave) {

        try {
            CoordinatesForm c = new CoordinatesForm();
            int answer = c.getAnswer();

            if (answer != JOptionPane.OK_OPTION) {
                return;
            }
            if (c.getPosition() == null) {
                JOptionPane.showMessageDialog(null, "Invalid Input kkk", "Invalid Input", JOptionPane.ERROR_MESSAGE);
            } else {
                Position p = c.getPosition();
                boolean flag = false;
                for (Position key : positionList.keySet()) {
                    if (key.getXCoordinate() == p.getXCoordinate() && key.getYCoordinate() == p.getYCoordinate()) {
                        flag = true;
                        this.setAllMarkedPlacesUnMarked();
                        Place place = positionList.get(key);
                        if (place != null) {
                            System.out.println("the place " + place + "against position " + key);
                            place.setMarked(true);
                            if (!place.isVisible()) {
                                place.setVisible(true);
                            }
                            markedPlacesHashMap.put(place.getName(), place);
                            if (markedPlacesHashMap.containsKey(place.getName())) {
                                markedPlacesHashMap.get(place.getName()).add(place);
                            } else {
                                //   ArrayList<Place> newMarkedPlaces = new ArrayList<>();
                                // newMarkedPlaces.add(place);
                                markedPlacesHashMap.put(place.getName(), place);
                            }
                        }
                    }
                }

此外,创建场所时,用户不能在同一坐标上放置其他位置。应该有一条错误消息,指出这些坐标上已存在某个位置。

以下是创建地点的代码:

private void createNamedPlace(int x, int y, String answer) {
    Position pos = new Position(x, y);
    display.add(n = new NamedPlace(selectedCategory, pos, answer));
    p = n;
    places = new ArrayList<>();
    placeByCategory = new ArrayList<>();

positionList.put(pos, n);

    if (categoryMap.containsKey(selectedCategory)) {
        categoryMap.get(selectedCategory).add(n);
        if (nameList.containsKey(answer)) {
            nameList.get(answer).add(n);
        } else {
            places.add(n);
            nameList.put(answer, places);
        }
    } else {
        placeByCategory.add(n);
        categoryMap.put(selectedCategory, placeByCategory);
        if (nameList.containsKey(answer)) {
            nameList.get(answer).add(n);
            System.out.println("The new Place have been added in the Name 
            List, the place name is :" + answer);
            this.displayMap(nameList, " PlACES LIST BY NAME");
        } else {
            places.add(n);
            nameList.put(answer, places);
this.displayMap(nameList, "PLACES LIST BY NAME");
        }
        this.displayMap(categoryMap, " PlACES LIST BY CATEGORY");
    }
    n.addMouseListener(new TriangleListener());
    display.validate();
    display.repaint();
    display.removeMouseListener(mouseListener);
    display.setCursor(Cursor.getDefaultCursor());
    newButton.setEnabled(true);
    categoryList.clearSelection();
    isSaved = false;
}

1 个答案:

答案 0 :(得分:0)

所有Swing组件最终都来自Component类,它有一个方法getBounds(),返回一个矩形。所以你可以简单地写一些像

这样的东西
if (myComponent.getBounds().contains(x,y)) {
    // do something

其中xy是您尝试检查的点的坐标。