Yang ingin saya lakukan adalah di dalam sisa kode saya, tunggu dan kenali acara klik mouse dan kemudian dapat menggunakan koordinat klik itu di sisa kode, tidak hanya mencetaknya ke layar saat klik sebagai hampir setiap contoh lain yang saya temukan tidak.
Saya baru mengenal Java dan ini adalah pertama kalinya saya membuat antarmuka, jadi saya mohon maaf atas kesalahan apa pun dan saya akan memperbaikinya sesegera mungkin.
Sayangnya, karena saya tidak memiliki petunjuk bagaimana melakukan apa yang saya minta, saya hanya dapat mewakilinya dalam semacam kodesemu yang disilangkan dengan bit kode atau saya tidak akan bertanya di sini sejak awal.
sunting: Komentar di bawah mengatakan jangan lakukan ini, yang saya mengerti tetapi saya benar-benar harus bisa mendapatkan koordinat itu agar dapat digunakan di area kode itu (yang jauh lebih lama daripada yang ditunjukkan di bawah) jadi jika ada yang punya cara alternatif di mana saya dapat mencapainya, silakan bagikan.
Ini adalah dua klik di dua lokasi yang berbeda untuk mendapatkan dua koordinat yang berbeda untuk kemudian memanipulasi yang benar-benar melemparkan saya.
.....
untuk(int i = 0; i < 15; i++) {
tunggu klik mouse;
int x = x koordinat klik mouse;
int y = y koordinat klik mouse;
tunggu klik mouse;
int x2 = x koordinat klik mouse kedua;
int y2 = y koordinat klik mouse kedua;
if (Vertex terdekat(x,y) !=Vertex terdekat(x2,y2) && ! graph.isline(x,y,x2,y2)) {
graph.insertLine(x,y,x2,y2);
}
}
.... dll...
Sejauh ini solusi yang saya lihat melibatkan melihat di mana pointer berada pada saat tertentu tetapi itu bukan lokasi hanya pada saat diklik. Jenis solusi ini diilustrasikan di bawah ini:
int x = MouseInfo.getPointerInfo().getLocation.x;
int y = MouseInfo.getPointerInfo().getLocation.y;
Dan juga yang umum lainnya yang muncul adalah mengubah MouseListener seperti di bawah ini:
Mengesampingkan
public void mouseClicked(MouseEvent e) {
int x=e.getX();
int y=e.getY();
System.out.println(x+","+y);
}
Tetapi untuk opsi ini, ya, Anda dapat mencetak koordinatnya, tetapi saya tidak melihat cara agar saya dapat menggunakan detail koordinat di luar fungsi mouseClicked seperti yang saya inginkan.
Dalam hal membuatnya menunggu tindakan terjadi dan tidak hanya terus melalui loop, saya punya beberapa ide. Saya berpikir untuk menambahkan loop sementara di dalam dan menggunakan wait() dan Thread.sleep(100) tetapi masalahnya adalah saya tidak tahu bagaimana mengatakan pada dasarnya:
while(peristiwa belum terjadi) {
tunggu()
}
int x = x koordinat klik mouse;
int y = y koordinat klik mouse;
...dll
Jika Anda memiliki ide baru yang dapat saya coba, saya akan sangat menghargainya karena saya bahkan tidak tahu berapa banyak tautan di google yang mencari cara untuk membuat ini berhasil.
Anda perlu mengubah aliran kontrol program Anda sehingga kode Anda merespons peristiwa UI, bukan mencoba menjalankan UI itu sendiri. Cobalah sesuatu seperti ini:
kelas MyStateMachine {
int saya = 0; // ini adalah indeks lingkaran Anda
boolean waitingForSecondClick = false; // apakah klik berikutnya adalah yang pertama atau kedua?
int pertamaX; // koordinat klik pertama
int pertamaY;
void menerimaKoordinat(int x, int y) {
if (menungguSecondClick) {
if (ujung terdekat(....)) {
// lakukan tugasmu
}
++ aku;
waitingForSecondClick = salah;
} lain {
pertamaX = x;
pertamaY = y;
waitingForSecondClick = benar;
}
}
Jadi pendengar mouse Anda menjadi:
Mengesampingkan
public void mouseClicked(MouseEvent e) {
stateMachine.receiveCoordinates(e.getX(), e.getY())
}
Pertama kali objek Anda menerima klik mouse, objek tersebut hanya menyimpan koordinat dalam variabel instannya dan mengingat bahwa klik berikutnya adalah 'klik kedua'. Klik berikutnya menggunakan kedua klik untuk melakukan tugas Anda, menambah i dan mulai mencari 'klik pertama' lainnya.
