Saya memiliki JFrame
kelas Java ini , di mana saya ingin menggunakan boxlayout, tetapi saya mendapatkan pesan kesalahan java.awt.AWTError: BoxLayout can't be shared
. Saya telah melihat orang lain dengan masalah ini, tetapi mereka menyelesaikannya dengan membuat tata letak kotak di panel konten, tetapi itulah yang saya lakukan di sini. Ini kode saya:
class EditDialog extends JFrame {
JTextField title = new JTextField();
public editDialog() {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setTitle("New entity");
getContentPane().setLayout(
new BoxLayout(this, BoxLayout.PAGE_AXIS));
add(title);
pack();
setVisible(true);
}
}
Saya juga menemukan kesalahan ini saat membuat ini:
JPanel belum diinisialisasi saat meneruskannya ke BoxLayout. Jadi pisahkan baris ini seperti ini:
Ini akan berhasil.
sumber
Saya pikir satu hal penting untuk disorot dari jawaban sebelumnya adalah bahwa target BoxLayout (parameter pertama) harus merupakan Container yang sama dengan metode setLayout yang dipanggil seperti pada contoh berikut:
sumber
Jika Anda menggunakan tata letak
JFrame
seperti:Kontrol sebenarnya ditambahkan ke
ContentPane
sehingga akan terlihat seperti 'dibagi' antaraJFrame
danContentPane
Lakukan ini sebagai gantinya:
sumber
JFrame
biasanya tidak memerlukannya (tidak seperti AWTFrame
). DariJFrame
dokumentasi:As a convenience, the add, remove, and setLayout methods of this class are overridden, so that they delegate calls to the corresponding methods of the ContentPane. For example, you can add a child component to a frame as follows: frame.add(child); And the child will be added to the contentPane. The content pane will always be non-null.
Denganframe
mereka mengacu pada sebuahJFrame
contoh.