2017-08-19 14 views
0

私はJavaについては初心者です。オブジェクトが特定の座標にあるかどうかを調べる方法を見つけようとしています。私は同様の質問を検索しようとしましたが、まだ回答が見つかりませんでした。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; 
} 
+0

「うまくいきません」というのは問題の説明ではありません。 [mcve]を読んで質問を深めてください。次に、リスナーでこれほど多くのことをしないでください。ヘルパークラス/メソッドを作成する方がよいでしょう。 – GhostCat

+0

この問題を再現するための簡単な例を作成してみてください。問題を再現するための最小限の例を作成することで、他の人が問題のデバッグを手助けするのがはるかに簡単になりますが、自分のデバッグにも役立ちます。より簡単な例があるときは、 。 – nbrooks

答えて

0

すべてのSwingコンポーネントは、最終的に矩形を返す、方法getBounds()を有するComponentクラスに由来します。だから、単に

xyはあなたがチェックしようとしているポイントの座標です
if (myComponent.getBounds().contains(x,y)) { 
    // do something 

ような何かを書くことができます。

関連する問題