Java / Scala Swing: заставить компонент заполнить все доступное пространство подряд

1

Я пытаюсь создать макет с Swing с помощью GridBagLayout.

Я хочу добавить ComboBox, помимо кнопки, где Button имеет постоянный размер, а ComboBox заполняет все доступное пространство в строке:

Изображение 174551

Однако, если я увеличиваю окно, появляется пустое пространство между ComboBox и Button:

Изображение 174551

Как я могу разместить эту форму, чтобы ComboBox заполнял все пространство даже при изменении размера окна?

Формат макета для компонентов в Scala:

layout(button) = new Constraints() {
    gridx = 1
    gridy = 0
    anchor = GridBagPanel.Anchor.LineEnd
}

layout(comboBox) = new Constraints() {
    gridx = 0
    gridy = 0
    fill = GridBagPanel.Fill.Horizontal
}

layout(centerPanel) = new Constraints() {
    gridx = 0
    gridy = 1
    weighty = 1
    weightx = 1
    gridwidth = 2
    fill = GridBagPanel.Fill.Both
}
  • 3
    Используйте BorderLayout для этого раздела графического интерфейса. Положите комбо. в CENTER и кнопки в LINE_END .
  • 1
    Также рассмотрите использование кодовой точки 8594 (стрелка вправо) для текста в комбо.
Показать ещё 3 комментария
Теги:
swing
layout-manager
gridbaglayout

1 ответ

3
Лучший ответ

Используйте BorderLayout для этого раздела графического интерфейса. Поместите комбо. в CENTER и кнопке LINE_END.

Как это:

Изображение 174551

import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.border.*;

public class StretchComboLayout {

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                JPanel ui = new JPanel(new BorderLayout(2, 2));
                ui.setBorder(new EmptyBorder(4, 4, 4, 4));

                JPanel controls = new JPanel(new BorderLayout(2, 2));
                ui.add(controls, BorderLayout.PAGE_START);
                String s = new String(Character.toChars(8594));
                String[] items = {"Choice: right " + s + " arrow"};
                JComboBox cb = new JComboBox(items);
                controls.add(cb, BorderLayout.CENTER);
                controls.add(new JButton("Button"), BorderLayout.LINE_END);

                JSplitPane sp = new JSplitPane(
                        JSplitPane.VERTICAL_SPLIT, 
                        new JTextArea(4,40), 
                        new JTextArea(4,40));

                ui.add(sp, BorderLayout.CENTER);

                JFrame f = new JFrame("Stretch Combo Layout");
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setContentPane(ui);
                f.pack();
                f.setLocationByPlatform(true);
                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
  • 1
    Смотрите также правку кода, где я показываю, что я имею в виду, используя кодовую точку для стрелки вправо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню