Главная » Java » GridBag Layout – более гибкое табличное расположение

0

А сейчас я покажу ещё один способ создания окна калькулятора. Здесь будет    использоваться    java.awt.GridBagLayout    вместо комбинации  схем и панелей. В нашем калькуляторе есть строки и столбцы, но в GridLayout ониобязаны  иметь  одинаковые  размеры.  Это  не  подходит,  так  как  у  нас есть  поле  для  ввода,  ширина  которого  равна  ширине  трёх  кнопок  с числами.GridBagLayout   -­?  более  продвинутая  схема  размещения. Она позволяет   задавать   размер   ячейки,   равным   нескольким   клеткам таблицы.  GridBagLayout  имеет  вспомогательный  класс,  который называется GridBagConstraints (ограничения на клетки таблицы). Эти  ограничения  не  что  иное,   как атрибуты ячеек,   которые необходимо задавать  для  каждой  ячейки  таблицы  отдельно.  Все ограничения  должны  быть заданы  до того, как  в ячейку помещаются компоненты.  Например,  один  из  атрибутов  GridBagConstraints называется  gridWidth. Он позволяет задать ширину какой-­?то  одной ячейки,  равной ширине  нескольких других.Во время работы  с GridBagLayout необходимо сначала создать экземпляр  класса GridBagConstraints, и затем задать значения для его  свойств.  После  того  как  это  сделано,  можно  добавлять  объект  в ячейку контейнера.

Следующий  пример  кода,  усыпан  комментариями,  которые  помогут понять,  как использовать GridBagLayout.// Задаём GridBagLayout для панели окна GridBagLayout gb = new GridBagLayout(); this.setLayout(gb);

// Создаём экземпляр класса GridBagConstraints

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

// которая добавляется в ячейку

GridBagConstraints constr = new GridBagConstraints();

//задаём ограничения для строки ввода калькулятора

// координата x в таблице

constr.x=0;

// координата y в таблице

constr.y=0;

// эта ячейка имеет такую же высоту, как стандартные ячейки

constr.gridheight =1;

// эта ячейка имеет ширину равную ширине 6 стандартных ячеек

constr.gridwidth= 6;

// заполняем всё пространство ячейки

constr.fill= constr.BOTH;

// пропорция по горизонтали, которую будет заниматькомпонент

constr.weightx = 1.0;

// пропорция по вертикали, которую будет занимать компонент

constr.weighty = 1.0;

// позиция компонента внутри ячейки

constr.anchor=constr.CENTER;

displayField = new JTextField();

// устанавливаем ограничения для поля ввода

gb.setConstraints(displayField,constr);

// добавляем поле ввода в окно

windowContent.add(displayField);

CardLayout – колода карт

Представьте колоду карт, в которой карты  лежат рубашкой вниз  так, что вы   можете   видеть   только   верхнюю   карту.   Схема java.awt.CardLayout  может быть использованa, если необходимо создать компонент, который выглядит, как папка с вкладками.

При нажатии на вкладку содержимое экрана меняется.  На  самом  деле, все  панели,  необходимые  для  этого  окна,  уже  предварительно загружены и  лежат  друг  на  друге.  Когда  пользователь  щелкает  по вкладке,  программа  просто  "переносит  эту  вкладку"  наверх  и  делает содержимое остальных вкладок невидимыми.Скорее  всего,  вы  не  будете  использовать  эту  схему, потому что библиотека  Swing включает готовый компонент для окон с вкладками. Он называется JTabbedPane.

Можно  ли создавать окна, не используя схемы?

Конечно, можно! Ничто не мешает явно задавать координаты  каждого компонентa  при добавлении на окно. Для этого класс должен чётко указать,   что он не использует схемы  размещения. В   Java есть специальное  слово null, которое означает “значение не задано”.   Мы будем использовать это ключевое слово довольно часто в будущем, и в следующем примере оно означает, что никакая схема не используется:

windowContent.setLayout(null);

Но,  если  отказаться  от схем,  то  необходимо  назначить  координаты левого  верхнего угла, ширину и высоту каждого оконного компонента.  В следующем примере показано, как можно установить ширину кнопки в  40 пикселей, высоту в 20, и разместить её на 100 пикселей вправо и 200  пикселей вниз от верхнего левого угла окна:

JButton myButton = new Button("New Game");

myButton.setBounds(100,200,40,20);

Источник: Java  Programming for Kids, Parents and Grandparents by Yakov Fain

По теме:

  • Комментарии