私は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;
}
「うまくいきません」というのは問題の説明ではありません。 [mcve]を読んで質問を深めてください。次に、リスナーでこれほど多くのことをしないでください。ヘルパークラス/メソッドを作成する方がよいでしょう。 – GhostCat
この問題を再現するための簡単な例を作成してみてください。問題を再現するための最小限の例を作成することで、他の人が問題のデバッグを手助けするのがはるかに簡単になりますが、自分のデバッグにも役立ちます。より簡単な例があるときは、 。 – nbrooks