Komponen GUI Dikaburkan dalam JFrame
Seperti yang diperhatikan oleh seorang pengguna, isu dalam kod GUI menghalang semua komponen daripada dipaparkan dengan betul. Khususnya, panel atas mengaburkan panel lain.
Punca:
Masalah ini timbul disebabkan oleh reka letak BorderLayout yang digunakan dalam JFrame. Secara lalai, komponen yang ditambahkan tanpa kekangan khusus diletakkan secara automatik pada kedudukan CENTER, yang membenarkan hanya satu komponen kelihatan.
Penyelesaian:
Untuk menyelesaikan isu reka letak ini , tukar kod seperti berikut:
f.add(top, BorderLayout.PAGE_START); // Add top panel to PAGE_START position f.add(mid); // Add mid panel with default BorderLayout.CENTER constraint f.add(bot, BorderLayout.PAGE_END); // Add bot panel to PAGE_END position
Tambahan Pengoptimuman:
Kod Dioptimumkan Lengkap:
import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.*; public class EncDecExample implements ActionListener { final static JPanel top = new JPanel(); final static JPanel mid = new JPanel(); final static JPanel bot = new JPanel(); final static JTextField in = new JTextField(10); final static JTextField out = new JTextField(10); final static JButton enc = new JButton("Encrypt"); final static JButton dec = new JButton("Decrypt"); final static JFrame f = new JFrame("Encryption/decryption"); public static void main(String[] args) { f.setSize(500, 500); f.setResizable(false); out.setEditable(false); out.setText("Hello"); top.add(in); mid.add(enc); mid.add(dec); bot.add(out); f.add(top, BorderLayout.PAGE_START); f.add(mid); f.add(bot, BorderLayout.PAGE_END); f.pack(); f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); f.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == enc && !in.getText().equalsIgnoreCase("")) { out.setText(e(in.getText(), 5)); } else if (e.getSource() == dec && !in.getText().equalsIgnoreCase("")) { out.setText(d(in.getText())); } } }
Atas ialah kandungan terperinci Mengapa komponen GUI dikaburkan dalam JFrame menggunakan BorderLayout?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!