Masalah Tata Letak Ayunan Java

Saya sedang merancang aplikasi dengan Java dan perpustakaan Swing (saya juga dapat menggunakan fragmen AWT) dan saya memerlukan bantuan dengan tata letak "kustom".

Saya memiliki JScrollPanel yang besar, tempat saya akan memasukkan JPanel dengan ketinggian variabel secara dinamis ke dalamnya. Berikut adalah hasil imbang yang kurang lebih realistis :

|-------------------------------- JScrollPane ------------------------------|
| |------------------------------- JPanel --------------------------------| |
| |                                                                       | |
| |-----------------------------------------------------------------------| |
|                                                                           |
| |------------------------------- JPanel --------------------------------| |
| |                                                                       | |
| |                                                                       | |
| |-----------------------------------------------------------------------| |
|                                                                           |
|---------------------------------------------------------------------------|

Lalu saya tidak tahu Layout mana yang digunakan.... Saya ingin mainLayout tidak mengubah ukuran tinggi JPanel internal saya tetapi mengubah ukuran lebarnya. Jadi ketika saya memperluas jendela misalnya, saya ingin Tata Letak internal saya tetap dekat dengan batas kiri dan kanan tetapi tidak meluas secara vertikal.

Ada saran?

Saya harap bahasa Inggris dan penjelasan saya tidak terlalu buruk. Terima kasih sudah membaca!


person Jerome    schedule 07.11.2013    source sumber
comment
Sepertinya Anda memerlukan kotak vertikal Box.createVerticalBox()   -  person michael nesterenko    schedule 08.11.2013


Jawaban (1)


Tata letak yang mungkin saya gunakan dalam kasus ini adalah GridBagLayout atau VerticalLayout (dari SwingLabs, perpustakaan SwingX) (tetapi jika yang Anda miliki hanyalah palu, semuanya tampak seperti paku;)).

Untuk menggunakan GridBagLayout, Anda perlu memberikan batasan yang sesuai yang akan menginstruksikan manajer tata letak untuk mengisi panel secara horizontal, namun tetap memperhatikan tingginya.

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;

Satu-satunya masalah dengan ini, adalah GridBagLayout suka memusatkan komponennya di sekitar posisi tengah wadah induk. Anda mungkin perlu menambahkan komponen "pengisi" ke posisi terakhir yang mengambil sisa ruang vertikal

gbc.weighty = 1;

Seharusnya cukup

Lihat Cara menggunakan GridBagLayout untuk detail lebih lanjut

Perbarui dengan contoh yang sangat mendasar...

// Basic constraints...
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;

// Add your components...
add(panel, gbc);
//...

// Then add a fill component to push the layout to the top...
gbc.weighty = 1;
add(new JPanel(), gbc);
// You can use a constant value if you want, as it will be easier to remove
// so you can add new components to the end and re-add it when you're done
person MadProgrammer    schedule 07.11.2013
comment
Terima kasih atas jawaban cepatnya. Implementasi ini cukup berhasil tetapi saya masih menempatkan JPanel saya di tengah-tengah JScrollPane utama saya secara vertikal. Saya mencoba menggunakan gbc.weithy = 1; tapi sepertinya tidak ada yang istimewa :( - person Jerome; 08.11.2013
comment
Sempurna! Terima kasih atas contoh yang dikomentari! - person Jerome; 08.11.2013