0
Весомая не работает в GridBagLayout
Над то, что я хочу добиться:
- на востоке
JFrame
фиксированный 400 ширинаJPanel
. - панель использует
GridBagLayout
. - компонента в этой панели все тянется горизонтально
- последнего компонент заполняет Лишние Y пространства
- последнего компонентом является
JscrollPane
обертываниемJTable
.
У меня было много испытаний, все потерпели неудачу:
- Я попытался setPreferredSize панели, то внутренние компоненты не будут растягиваться по горизонтали. (Я знаю, как использовать GridBagConstraints, или я думаю, что знаю)
- Я попытался установить размер панели, а размер фактически определяется JscrollPane.
- Я попытался деформировать JscrollPane в другой JPanel (потому что я не очень доверяю JScrollPane), бесполезно.
- GridBagContraints.weighty никогда не функционирует в этом проекте, однако функционирует хорошо в другом месте.
Поэтому я думаю, что проблема связана с JTable, она всегда делает прокси. 300 * 300, как показано на красной линии.
Сегодня еще один плохой день с множеством поворотаPreferredSize и setSize и все эти проблемы с размером. Надеюсь, кто-нибудь может помочь, спасибо!
private JPanel buildInfoPanel() {
JPanel panel = new JPanel();
panel.setVisible(false);
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.gridx = 0;
panel.setLayout(gbl);
label_player = new JLabel("label_player");
label_player.setBackground(Color.RED);
constraints.gridy = 0;
constraints.anchor = GridBagConstraints.NORTH;
gbl.setConstraints(label_player, constraints);
panel.add(label_player);
label_deck = new JLabel("label_deck");
label_deck.setBackground(Color.BLUE);
constraints.gridy++;
gbl.setConstraints(label_deck, constraints);
panel.add(label_deck);
JTable table = new JTable(new ShipTableModel());
table.setAutoCreateRowSorter(true);
table.setFillsViewportHeight(true);
table.getRowSorter().toggleSortOrder(2);
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setBorder(new LineBorder(Color.red));
constraints.gridy++;
constraints.weighty = 1;
gbl.setConstraints(scrollPane, constraints);
panel.add(scrollPane);
return panel;
}
class ShipTableModel extends AbstractTableModel {
private Ship[] ships = new Ship[0];
private String[] columnNames = {"id", "name", "lv", "hp", "舰队", "舰种", "mId"};
@Override
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public int getRowCount() {
return ships.length;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
}
Не могли бы вы высказать свой текущий код? Лучшая попытка, которую вы достигли. – StanislavL
На самом деле все, что вам нужно, это вызвать setPreferredSize для прокрутки, содержащей JTable, и установить весовое значение и установить fill = BOTH. – StanislavL