Проблема с размерами JFrame и JPanel - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь закодировать JFrame, содержащий JPanel.Внутри JPanel находится массив JTextField.Итак, мой графический интерфейс выглядит следующим образом: -

enter image description here

Я не использую менеджер компоновки и установил для NFrame и JPanel значение null.Я определяю размеры этих компонентов вручную.

Вы можете видеть, что правая часть JPanel отрублена, хотя я использовал тот же размер, что и содержащий JFrame.

Кодвыглядит следующим образом: -

enter image description here

Я рассчитал требуемую ширину JPanel, умножив количество столбцов в массиве JTextField на ширинуJTextField.Помимо этого необходимо будет добавить ширину каждого промежутка между JTextFields (их будет (columnNumber - 1)), а также два пропуска границы.

Я сделал это, но покаКак видно из диаграммы, разрыв правой границы границы обрезан.

Если я добавлю некоторую случайную величину в panelWidth, то вы увидите там правый разрыв, но мой вопрос в том, что яздесь не хватает?Это должно сработать наверняка, если сторона JFrame и размер JPanel идентичны, что они и есть, поскольку я также распечатал их оба, а распечатки дают одинаковое число.

Джереми

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Я хочу, чтобы для любой комбинации значений строк / столбцов было разрешено постоянное вертикальное и горизонтальное расстояние между каждым JTextField, а также для каждого из этих текстовых полей поддерживал размер по умолчанию.

GridLayout позволяет вам указать горизонтальный / вертикальный разрыв между каждым компонентом и позволяет контролировать размер сетки.

Затем вы можете обернуть панель с помощью GridLayout в панели, которая учитывает размер сетки.

Например, вы можете сделать:

JPanel grid = new JPanel( new GridLayout(...) );

JPanel wrapper = new JPanel( new GridBagLayout() );
wrapper.add(grid, new GridBagConstraints());

frame.add(wrapper, BorderLayout.CENTER);

Если вы упакуете фрейм, панель сетки будет отображаться с предпочтительным размером.

Если вы измените размер фрейма,сетка панели останется по центру на панели оболочки.

0 голосов
/ 07 октября 2018

Верхняя часть этого графического интерфейса хорошо подходит для разметки сетки, нижняя часть с кнопками «Перейти / Отмена» - разметка потока.Поместите макет сетки в CENTER макета границы, макет потока в PAGE_END, упакуйте контейнер верхнего уровня (для не обрезанного, «правильного размера») и работа будет выполнена.

Это может выглядеть примерно так:

enter image description here

...