Я использую GridBagLayout Manager, чтобы четко определить, где (на данный момент) метки thow и JScrollPane.Есть ли способ игнорировать компоненты PreferredSize?
Я использую gridbagconstraint, чтобы сообщить первой JLabel с названием «label1» (с текстом), он должен быть 3 единицы ширины * 1 единица роста. Я говорю еще один JLabel с именем «blank» (пустой), он должен быть 9 единиц в ширину * 1 единица роста.
Тогда я объявляю JScrollPane, и сказать ему, что должно быть на у = 1, высота = 11, х = 0 ширина = 12.
Я установил заливку contraint GridBag в к ОБА, потому что хочет каждый компонент заполните прямоугольник, который я описываю.
label1 должен быть четверть всей ширины, но поскольку label1 имеет некоторый текст, label1 занимает 2/3 пробела.
Есть ли способ просто игнорировать предпочтительные размеры компонентов, как это делает GridLayout (вид)?
Я прочитал документацию об этом, но я не нашел подсказки.
Некоторые исходный код:
public class JPanelMain {
//gridconstraints
private GridBagConstraints gbc;
private static final int min = 1;
private static final int maxSize= 12;
private static final int forth =maxSize/4;
private static final int third =maxSize/3;
public JPanelMain(JFrame frame) {
JPanel pane = new JPanel();
pane.setLayout(new GridBagLayout());
gbc = new GridBagConstraints(
0,//gridx
0,//gridy
0,//gridwidth
0,//gridheight
1,//weightx
1,//weighty
GridBagConstraints.CENTER,//anchor
GridBagConstraints.BOTH,//fill
new Insets(0,0,0,0),//insets
0,//padx
0//pady
);
JLabel label1 = new JLabel();
label1.setBorder(BorderFactory.createTitledBorder("Label1"));
JLabel blank = new JLabel();
blank.setBorder(BorderFactory.createTitledBorder("blank"));
label1.setOpaque(true);
gbc.gridwidth =(third);
gbc.gridheight = (min);
pane.add(label1,gbc);
label1.setText("Label1");
blank.setOpaque(true);
gbc.gridx = third;
gbc.gridwidth = maxSize -third;
pane.add(blank,gbc);
gbc.gridy = min;
gbc.gridheight = maxSize - min;
gbc.gridx= 0;
gbc.gridwidth=maxSize;
DefaultListModel<String> patients = new DefaultListModel<>();
fill(patients);
JList<String> list = new JList<>(patients);
pane.add(new JScrollPane(list),gbc);
frame.add(pane);
}
private void fill (DefaultListModel<String> model) {
/**/
}
}
результат, как описано (и это же по высоте):
Я прочитал (а я считаю, в основном понял) example.
, когда я говорю «2 единицы по ширине», это просто означает, что я устанавливаю ограничение на gridwidth = 2, как описано в коде. Я предположил, что это будет понятно. Могу я сказать «не управляйте лишними пробелами?» к моей решетке? –
Снова вы не можете этого сделать. Как я уже сказал, вам нужно работать с «ячейками». «Ширина сетки» относится только к максимальному числу компонентов, найденных в любой строке. В вашем примере у вас есть 3 компонента, 2 на одну строку и 1 на секунду. Таким образом, только вторая строка может использовать ограничение «gridwidth», и оно может быть не более 2, а не 9. См. Обновление для RelativeLayout. – camickr
кажется, что эта относительная компоновка действительно _exactly_, что мне нужно, большое спасибо. Но я совершенно разочарован. Я не получаю эту вещь gridbaglayout ... –