Я не могу найти способ изменить размеры некоторых компонентов в графическом интерфейсе Swing.Некоторые пользовательские метки добавляются в FlowLayout, который не ведет себя так, как должен при изменении размера диалога.Панель строится с использованием фреймворка форм jgoodies.
При использовании этого, когда FlowLayout добавляется к xy (3, y)
FormLayout layout = new FormLayout("r:d, 5px, f:d:g", // columns
"p, p, 5px, p, 5px, p") // rows
FlowLayout расширяется и полоса прокруткиотображается
При использовании
FormLayout layout = new FormLayout("r:d, 5px, f:10:g", // columns
"p, p, 5px, p, 5px, p") // rows
FlowLayout использует доступное пространство и элементы во второй строке исчезают
Я бы хотел увеличить высоту каждой строки, содержащей FlowLayout, до текущей высоты компонента.К сожалению, предпочтительный размер всегда соответствует высоте для одного ряда.
Был бы более подходящим другой макет?Жирный текст слева должен быть выровнен вправо, за которым следует FlowLayout.
Источники
[править] После попытки выяснитькак сделать это в течение нескольких недель, фактический вопрос может быть возобновлен к этому:
Набор меток добавляется в JPanel.Эта JPanel должна использовать все доступное пространство по горизонтали (размер диалога минус ширина метки имени тега) и расширяться по мере необходимости по вертикали.Если высота JPanel становится больше, чем в диалоговом окне, должна появиться вертикальная полоса прокрутки (горизонтальная полоса прокрутки никогда не видна).Диалог может отображать несколько JPanels, которые будут отображаться один за другим (по вертикали).
Вот попытка с использованием GridBagLayout и WrapLayout :
public class GridBagLayoutTagPanel extends JPanel {
private static final long serialVersionUID = -441746014057882848L;
private final int NB_TAGS = 5;
public GridBagLayoutTagPanel() {
setLayout(new GridLayout());
JPanel pTags = new JPanel(new GridBagLayout());
pTags.setBackground(Color.ORANGE);
GridBagConstraints c = new GridBagConstraints();
c.ipadx = 5;
c.ipady = 5;
int rowIndex = 0;
for (int i = 0; i < NB_TAGS; i++) {
//add tag name
JLabel lTagName = new JLabel(String.format("Tag %s:", i));
lTagName.setFont(lTagName.getFont().deriveFont(Font.BOLD));
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
c.gridy = rowIndex++;
pTags.add(lTagName, c);
//add tag values
JPanel pTag = new JPanel(new BorderLayout());
pTag.add(new JLabel("+"), BorderLayout.LINE_START); //label used to add new tags
pTag.add(getWrapPanel(), BorderLayout.CENTER); //the list of tag values
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
pTags.add(pTag, c);
}
//JScrollPane sp = new JScrollPane(pTags);
//sp.setBorder(BorderFactory.createEmptyBorder());
add(pTags);
}
private static JPanel getWrapPanel() {
JPanel p = new JPanel(new WrapLayout(FlowLayout.LEFT, 5, 0));
for (int i = 0; i < 50; i++) {
p.add(new JLabel("t" + i));
}
return p;
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.getContentPane().add(new GridBagLayoutTagPanel());
f.setSize(new Dimension(500, 300));
f.setVisible(true);
}
}