Cara Memaparkan Imej Tanpa Membekukan Borang
Dalam kod anda, apabila anda mengklik butang, proses pemuatan imej menyekat acara menghantar benang, menyebabkan borang menjadi beku buat sementara waktu. Untuk mengelakkan perkara ini, anda boleh menggunakan benang berasingan untuk melaksanakan pemuatan imej di latar belakang.
Penyelesaian menggunakan javax.swing.SwingWorker
The javax.swing.SwingWorker kelas membolehkan anda menjalankan tugasan dalam urutan berasingan sambil masih mengemas kini antara muka pengguna (UI) daripada tugasan. Begini cara anda boleh menggunakannya untuk menyelesaikan isu anda:
Dalam kelas "client_Trackbus" anda:
SwingWorker<Image, Void> imageLoader = new SwingWorker<Image, Void>() { @Override protected Image doInBackground() throws Exception { // Load the image from URL in a separate thread URL imageURL = new URL("http://www.huddletogether.com/projects/lightbox2/images/image-2.jpg"); Image image = Toolkit.getDefaultToolkit().createImage(imageURL); return image; } @Override protected void done() { try { // Display the loaded image on the panel ImageIcon icon = new ImageIcon(get()); label.setIcon(icon); jPanel1.add(label); // Resize the panel to fit the image jPanel1.setSize(label.getPreferredSize()); // Update the form getContentPane().add(jPanel1); revalidate(); repaint(); } catch (Exception ex) { // Handle any exceptions here } } }; // Start the image loading task in the background imageLoader.execute();
Kod ini mencipta SwingWorker yang berjalan dalam urutan berasingan . Kaedah doInBackground() memuatkan imej daripada URL tanpa menyekat urutan penghantaran acara. Apabila imej dimuatkan, kaedah done() dipanggil pada utas penghantaran acara, tempat imej dipaparkan dan borang dikemas kini. Pendekatan ini membolehkan borang kekal responsif semasa imej sedang dimuatkan.
Atas ialah kandungan terperinci Bagaimana untuk Memuatkan Imej Tanpa Membekukan Borang Java Swing Anda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!