Elettracompany.com

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Setbounds в java

Блог только про Java

Учимся программировать на Java с нуля

Главное меню

Позиционирование фрейма в Java

В классе JFrame есть лишь несколько методов, позволяющих изменить внешний вид фрейма. Разумеется, благодаря наследованию можно использовать методы супер классов класса JFrame, задающие размер и местоположение. К наиболее важным из них следует отнести следующие:

  • Методы setLocation() и setBounds() устанавливают положение фрейма.
  • Метод dispose() закрывает окно и освобождает все системные ресурсы, использованные при его создании.
  • Метод setIconImage() сообщает оконной системе о том, какая пиктограмма должна отображаться в строке заголовка, окне переключателя задач и т.п.
  • Метод setTitle() позволяет изменить текст в строке заголовка.
  • Метод setResizable() получает в качестве параметра логическое значение и определят, имеет ли пользователь право изменять размеры фрейма.

Как указанно в документации на API, методы для изменения размеров и формы фреймов следует искать в класс Component(который является предком всех объектов графического пользовательского интерфейса) и в классе Window(суперклассе класса Frame). Например, метод show(), который используется для отображения фрейма на экране, находится в классе Window, а в классе Component есть метод setLocation(), позволяющий изменить местоположение компонента. В приведенном ниже методе левый верхний угол фоейма размещается в точке, находящейся на расстоянии x-пикселей вправо и на расстоянии y-пикселей вниз от точки (0,0) — левого верхнего угла экрана.

Аналогично, метод setBounds() класса Component позволяет одновременно изменить и размер, и местоположение компонента(в частности, объекта класса JFrame) с помощью следующего вызова:

Если у вас проблемы с матрицей то желательно оставить программирование после ремонта так как код может работать с помехами. Замена матрицы осуществляется за 30-40 минут, подробнее на http://printerok.net/services/zamena-matritsy.

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

В качестве альтернативы вы можете предоставить оконной системе контроль за размещением окон. Если вызывать перед отображением окна:

то оконная система сама укажет местоположение(но не размер), обычно с небольшим смещением от предыдущего окна.

Координаты фрейма, задаваемые методами setLocation() и setBounds(), вычисляются относительно экрана. Координаты других компонентов внутри контейнера определяются относительно самого контейнера.

Менеджеры расположения Layout

Менеджер расположения (layout manager) определяет, каким образом на форме будут располагаться компоненты. Независимо от платформы, виртуальной машины, разрешения и размеров экрана менеджер расположения гарантирует, что компоненты будут иметь предпочтительный или близкий к нему размер и располагаться в том порядке, который был указан программистом при создании программы.

На странице представлено описание следующих менеджеров расположения и примеров :

  • Полярное расположение BorderLayout
  • Последовательное расположение FlowLayout
  • Табличное расположение GridLayout
  • Менеджер расположения GridBagLayout
  • Менеджер расположения CardLayout
  • Менеджер расположения BoxLayout
  • Менеджер расположения GroupLayout
  • Менеджер расположения SpringLayout
  • Пример диалогового окна авторизации
  • Пример собственного менеджера расположения

Исходные коды примеров различных менеджеров расположения, рассмотренных на странице можно скачать здесь (13.4 Кб).

В Swing менеджер расположения играет еще большую роль, чем обычно. Он позволяет не только сгладить различия между операционными системами, но к тому же дает возможность с легкостью менять внешний вид приложения, не заботясь о том, как при этом изменяются размеры и расположение компонентов.

Поддержка менеджеров расположения встроена в базовый класс контейнеров java.awt.Container. Все компоненты библиотеки Swing унаследованы от базового класса JComponent, который, в свою очередь, унаследован от класса Container. Таким образом, для любого компонента Swing можно установить менеджер расположения или узнать, какой менеджер им используется в данный момент. Для этого предназначены методы setLayout() и getLayout().

Конечно, изменять расположение желательно только в контейнерах, которые предназначены для размещения в них компонентов пользовательского интерфейса, то есть в панелях (JPanel) и окнах (унаследованных от класса Window). Не стоит менять расположение в кнопках или флажках, хотя такая возможность имеется. В стандартной библиотеке Java существует несколько готовых менеджеров расположения, и с их помощью можно реализовать абсолютно любое расположение.

Вызов менджера расположения, revalidate

Контейнер окна вызывает методы менеджера расположения каждый раз при изменении своих размеров или при первом появлении на экране. Кроме этого, можно программно запросить менеджер расположения заново расположить компоненты в контейнере: для этого служит так называемая проверка корректности (валидация) контейнера и содержащихся в нем компонентов. Проверка корректности очень полезна, если интерфейс приложения меняется динамически. Например, если динамически меняются размеры компонентов (во время выполнения программы изменяется текст надписи или количество столбцов таблицы — все это приведет к изменению размеров компонентов). После изменений компонентам может не хватать прежних размеров или наоборот, прежний размер будет для них слишком велик. Для этого и предназначена проверка корректности. Выполнить проверку корректности для любого компонента Swing, будь это контейнер или отдельный компонент, позволяет метод revalidate(), определенный в базовом классе библиотеки JComponent.

Менеджер расположения размещает добавляемые в контейнер компоненты в некотором порядке согласно реализованного в нем алгоритма, и определяет их некоторый размер. При этом он обычно учитывает определенные свойства компонентов :

  • Предпочтительный размер. Размер, который идеально подходит компоненту. По умолчанию все размеры компонентов устанавливаются текущим менеджером внешнего вида и поведения (look and feel manager), но можно их изменить. Предпочтительный размер можно изменить с помощью метода setPrefferedSize().
  • Минимальный размер. Параметр определения минимального размера компонента. После достижения минимального размера всех компонентов контейнер больше не сможет уменьшить свой размер. Минимальный размер также можно изменить, для этого предназначен метод setMinimumSize().
  • Максимальный размер. Параметр определения максимального размера компонента при увеличении размеров контейнера. Например, максимальный размер текстового поля JTextField не ограничен. Чаще всего оно должно сохранять свой предпочтительный размер. Это можно исправить с помощью метода setMaximumSize(), устанавливающего максимальный размер. Большая часть менеджеров расположения игнорирует максимальный размер, работая в основном с предпочтительным и минимальным размерами.
  • Выравнивание по осям X и Y. Данные параметры нужны только менеджеру BoxLayout, причем для него они играют важнейшую роль.
  • Границы контейнера. Эти параметры контейнера определяют размеры отступов от границ контейнера. Значения границ контейнера позволяет получить метод getInsets(). Иногда менеджеру расположения приходится их учитывать.

Описание бизнес-логики работы менеджера расположения

Логика работы менеджера расположения происходит следующим образом : он ждет прихода сигнала от контейнера окна, требующего расположить в нем компоненты. Этому соответствует вызов метода layoutContainer() интерфейса LayoutManager. В методе layoutContainer() и происходит основная работа по расположению компонентов в контейнере.

Менеджер расположения учитывает различные размеры и свойства компонентов и контейнера, и должен расположить компоненты на определенных позициях в контейнере, вызывая для каждого из них метод setBounds(), позволяющий указать в пикселах в системе координат контейнера прямоугольник, который будет занимать компонент. Для сложных менеджеров расположения с гибким поведением это означает массу работы и сложные вычисления, однако простые алгоритмы расположения компонентов реализовать совсем несложно.

Ниже представлен пример разработки менеджера вертикального расположения компонентов VerticalLayout. Он располагает компоненты вертикально с расстоянием между ними в 5 пикселов и использует для всех компонентов предпочтительный размер.

Менеджер расположения VerticalLayout реализует интерфейс LayoutManager. Самым важным методом является layoutContainer(), который определяет расположения всех компонентов, содержащиеся в контейнере. Алгоритм функционирования менеджера расположения не сложный : размещение компонентов по вертикали, отделяя их друг от друга расстоянием в 5 пикселов; все компоненты имеют предпочтительный размер. Чтобы реализовать алгоритм выполняются следующие шаги :

  1. Получение массива компонентов — метод контейнера getComponents().
  2. Организация цикла перебора компонентов.
  3. Определение предпочтительного размера для каждого из компонентов — метод getPreferredSize().
  4. Определение позиции компонента на экране методом setBounds().
  5. Смещение текущей вертикальной координаты Y, увеличением ее значения на высоту очередного компонента с учетом «декоративного» расстояния в 5 пикселов.

Таким образом, менеджер VerticalLayout разместит все компоненты контейнера друг над другом на расстоянии в 5 пикселов. Следует обратить внимание, что компоненты отделены и от левой границы контейнера.

Читать еще:  Java для web

Метод addLayoutComponent() предназначен для добавления компонентов в список менеджера расположения, а метод removeLayoutComponent() для удаления компонентов из списка. addLayoutComponent() позволяет ассоциировать с компонентом строку, которая может быть использована менеджером расположения как рекомендация относительно того, где именно необходимо разместить данный компонент. Наш пример менеджера расположения в отличие от BorderLayout не поддерживает подобных рекомендаций.

Две функции менеджера (предпочтительный preferredLayoutSize() и минимальный minimumLayoutSize()) сообщают размеры контейнера. Для нашего простого менеджера расположения минимальный и предпочтительный размеры контейнера совпадают, их вычисляет метод calculateBestSize(). Для вычисления оптимального размера контейнера в цикле выполняется поиск компонента с самой большой длиной. К найденной длине добавляется 5 пикселов в качестве отступа от левой границы контейнера и получаем оптимальную длину контейнера. Для высоты вычисления чуть сложнее : необходимо сложить высоты всех находящихся в контейнере компонентов, а также прибавлять к ним расстояние в 5 пикселов между всеми компонентами. Полученная сумма и является оптимальной высотой контейнера.

Для тестирования менеджера вертикального расположения в методе main() создаем небольшое окно с рамкой JFrame. Создаем панель с устанавленным менеджером расположения VerticalLayout. В панель добавляется пара кнопок и текстовое поле. Созданную панель размещаем в панели содержимого, после чего окно выводится на экран. На следующем скриншоте представлен интерфейс окна примера использования вертикального менеджера расположения компонентов.

Знание основных принципов работы менеджера расположения позволяет глубже понять технологию размещения компонентов в контейнере при использовании библиотеки Swing.

Полярное расположение BorderLayout

Менеджер BorderLayout специально предназначен для обычных и диалоговых окон. Он позволяет быстро и просто расположить наиболее часто используемые элементы любого окна: панель инструментов, строку состояния и основное содержимое. Для этого BorderLayout разбивает окно на четыре области, а все оставшееся место заполняется компонентом, выполняющим основную функцию приложения — в редакторе это будет текстовое поле, в многооконном приложении — рабочий стол.

Менеджер расположения BorderLayout иммет отличия от остальных. Чтобы добавить с его помощью компонент в методе add() необходимо использовать дополнительный параметр, который определяет область контейнера для размещения компонента. В таблице перечислены допустимые значения этого параметра.

What is setBounds and how do I use it?

I cannot find anything on setBounds, what it is for, or what its function actually is. Could someone clear me up on this? Thanks so much!

Создан 16 окт. 13 2013-10-16 22:36:53 JeremyF

7 ответов

You can use setBounds(x, y, width, height) to specify the position and size of a GUI component if you set the layout to null . Then (x, y) is the coordinate of the upper-left corner of that component.

Создан 16 окт. 13 2013-10-16 22:38:47 tianz

So why would I do this when I can just use setLocation and setPreferredSize? – JeremyF 16 окт. 13 2013-10-16 22:43:32

@JeremyFrancis ‘setBounds’ is short cut for ‘setLocation’ and ‘setSize’. ‘setPreferredSize’ provides hints about what the size the component would «like to be» to the layout manager API – MadProgrammer 16 окт. 13 2013-10-16 22:47:18

@MadProgrammer what do you mean hints? Why does setSize sometimes work and setPreferredSize(new Dimension()) sometimes work? Does this have to do with layout managers? – JeremyF 17 окт. 13 2013-10-17 00:17:34

@madProgrammer also, is setBounds() only a short way for setting the size and for setting the location? Or does it have any other functions or uses? – JeremyF 17 окт. 13 2013-10-17 00:18:51

@JeremyFrancis Yes. Calling ‘setSize’ while a component is under the control of a layout manager will only have temparay effects. Once the container is invalidated, the component will be returned to the size that the layout manager decides it should be. ‘preferredSize’ is only a suggestion to the layout manager about how the component might like to be laid out. The layout manager is well within it’s rights to ignore it, ‘BorderLayout’ is good example of this – MadProgrammer 17 окт. 13 2013-10-17 00:20:13

@JeremyFrancis ‘setBounds’ is called by both ‘setLocation’ and ‘setSize’ (filling in the required parameters by on their current values) – MadProgrammer 17 окт. 13 2013-10-17 00:21:58

Dont forget to cast width and height input to ints – Ungeheuer 08 июн. 15 2015-06-08 16:40:46

This is a method of the java.awt.Component class. It is used to set the position and size of a component:

setBounds

the new size is specified by width and height. Parameters:

  • x — the new x-coordinate of this component
  • y — the new y-coordinate of this component
  • width — the new width of this component
  • height — the new height of this component

x and y as above correspond to the upper left corner in most (all?) cases.

It is a shortcut for setLocation and setSize .

This generally only works if the layout/layout manager are non-existent, i.e. null.

x and y corresponds to upper left cornet, you have written it to right corner ?? – Prafulla Kumar Sahu 23 мар. 16 2016-03-23 05:38:51

setBounds is used to define the bounding rectangle of a component. This includes it’s position and size.

The is used in a number of places within the framework.

  • It is used by the layout manager’s to define the position and size of a component within it’s parent container.
  • It is used by the paint sub system to define clipping bounds when painting the component.

For the most part, you should never call it. Instead, you should use appropriate layout managers and let them determine the best way to provide information to this method.

So basically I should only call it when using null layout? – JeremyF 16 окт. 13 2013-10-16 22:44:54

@JeremyFrancis I would argue that you should never use a ‘null’ layout when dealing with a component based UI 😉 – MadProgrammer 16 окт. 13 2013-10-16 22:46:24

But aren’t there many cases in which using a null layout would be essential? (For example, moving a component around for an animation look or something) – JeremyF 16 окт. 13 2013-10-16 22:48:33

@JeremyFrancis Not really, I’ve created a wrapper layout before that animates existing layouts, for [example](http://stackoverflow.com/questions/14540080/animations-when-using-gridbag-layout/14541651#14541651). Layouts solve one of the most annoying issues of modern UI development, differences in how fonts are rendered. They allow you to define relationships between components the deals with differences in font metrics, DPI, screen resolution etc, between different systems and OS’s – MadProgrammer 17 окт. 13 2013-10-17 00:24:33

Actually, a Swing component does have multiple dimensions, as:

  • current size — setSize() and setBounds() sets this
  • minimum size — setMinimumSize() sets this
  • preferred size — setPerferredSize() sets this
  • maximum size — setMaximumSize() sets this.

SetBounds is a shortcut for setting current size plus location of the widget if you don’t use any layout manager.

If you use a layout manager, it is the responsibility of the layout manager to lay out your components, taking into account the preferred size you set, and ensuring that the comonent never gets smaller than its minimumSize or bigger than its maximumSize.

In this case, the layoutManager will call setSize (or setBounds), and you can not really control the position or dimension of the component.

The whole point of using a layout manager is to have a platform and window-size independent way of laying out your components automatically, therefore you don’t expect to call setSize from your code.

(Personal comment: There are buggy layout managers, I personally hate all of them and rolled my own, which offers the flexibility of MigLayout without the learning curve.)

Создан 16 фев. 16 2016-02-16 19:01:36 Gee Bee

Читать еще:  Умножение матриц java

There is an answer by @hexafraction , He had specified the x and y to be top right corner which is wrong, those are top left corner .

I have also provided the source please check it.

Moves and resizes this component. The new location of the top-left corner is specified by x and y, and the new size is specified by width and height. This method changes layout-related information, and therefore, invalidates the component hierarchy.

Parameters:

x — the new x-coordinate of this component

y — the new y-coordinate of this component

width — the new width of this component

height — the new height of this component

The way that Java Swing UIs work is that for each JPanel there is always a LayoutManager that decides on where to exactly place your components. Each layout managers works differently, so if you use for example a BorderLayout, setBounds() is not used by the LayoutManager, instead component placement is decided by East,West,South,North,Center.

For the NullLayoutManager (in case you used new JPanel(null) ) however, each component has to have an x and y coordinate. Stupid Sidenote: if your UI would be three-dimensional there would also be a z coordinate.

So with public void Component.setBounds(int x, int y, int width, int height) you specify where your component is placed and how many pixel it is wide and high.

Here’s an example:

Создан 07 июн. 17 2017-06-07 09:44:12 Axel Podehl

here’s a short paragraph from this article How to Make Frames (Main Windows) — The Java Tutorials — Oracle that explains what setBounds method does in addition to some other similar methods:

The pack method sizes the frame so that all its contents are at or above their preferred sizes. An alternative to pack is to establish a frame size explicitly by calling setSize or setBounds (which also sets the frame location). In general, using pack is preferable to calling setSize, since pack leaves the frame layout manager in charge of the frame size, and layout managers are good at adjusting to platform dependencies and other factors that affect component size.

the parameters of setBounds are (int x, int y, int width, int height) x and y are define the position/location and width and height define the size/dimension of the frame.

Java. Swing. Основы

В станадарт Java входит два пакета для создания оконного пользовательского интерфейса: awt и его надстройка swing. Компоненты swing имеют расширинные возможности по сравнению с аналогичными awt компонентами, поэтому упор будет сделан на них. Во-вторых, в отличие от awt компоненты swing не содержат платформо-зависимого кода. Так сказать являются облегченными (lightweight) компонентами.

контейнеры верхнего уровня

  • JApplet — главное окно апплета;
  • JFrame — окно приложения;
  • JDialog — диалог приложения.
  • JColorChooser — диалог выбора цвета;
  • JFileChooser — диалог выбора файлов и директорий;
  • FileDialog — диалог выбора файлов и директорий (awt компонент).

простые контейнеры

  • JPanel — простая панель для группировки элементов, включая вложенные панели;
  • JToolBar — панель инструментов (обычно это кнопки);
  • JScroolPane — панель прокрутки, позволяющая прокручивать содержимое дочернего элемента;
  • JDesktopPane — контейнер для создания виртуального рабочего стола или приложений на основе MDI (multiple-document interface);
  • JEditorPane, JTextPane — контейнеры для отображения сложного документа как HTML или RTF;
  • JTabbedPane — контейнер для управления закладками;
  • JSplitPane — контейнер, разделяющий два элемента и позволяющий пользователю изменять их размер.

элементы интерфейса

Следующие элементы управления могут использоваться и как контейнеры, так как наследуются от класса java.awt.Container.

  • JButton — кнопка;
  • JCheckBox — кнопка-флажок;
  • JComboBox — выпадающий список;
  • JLabel — метка, надпись;
  • JList — список;
  • JPasswordField — текстовое поле для скрытого ввода;
  • JProgressBar — компонент для отображения числа в некотором диапазоне;
  • JRadioButton — преключатели, радио-кнопки, обычно используется с
    компонентом ButtonGroup;
  • JSlider — компонент позволяющий выбрать значение из заданного диапазона;
  • JSpinner — компонент позволяющий выбрать значение из указанной последовательности;
  • JTable — таблица;
  • JTextField — однострочное текстовое поле;
  • JTextArea — многострочное текстовое поле;
  • JTree — дерево.

управление позиционированием и размерами

Для автоматического позиционирования и задания размеров дочерних элементов контейнерыиспользуют специальные объекты — компоновщики. Для ручного позиционирования надо установить пустой объект вызовом метода setLayout(null).

Ниже приведен список стандартных компоновщиков:

  • BorderLayout — размещает элементы в один из пяти регионов, как было указано при добавлении элемента в контейнер:
    наверх, вниз, влево, вправо, в центр;
  • FlowLayout — размещает элементы по порядку в том же направлении, что и ориентация контейнера (слева на право по умолчанию)
    применяя один из пяти видов выравнивания, указанного при создании менеджера.
    Данный менеджер используется по умолчанию в большинстве контейнерах;
  • GridLayout — размещает элементы таблично. Колличество столбцов и строк указывается
    при создании менеджера. По умолчанию одна строка, а число столбцов равно числу элементов;
  • BoxLayout — размещает элементы по вертикали или по горизонтали. Обычно он используется не
    напрямую а через контейнерный класс Box, который имеет дополнительные возможности;
  • SpringLayout — это менеджер низкого уровня и был разработан для программ
    построителей форм;
  • GroupLayout — данный менеджер также был разработан для построителей форм.

события

Элементы интерфейса и контейнеры генерируют ряд событий, например:

  • ActionEvent — событие, определяемое компонентом, например нажатие кнопки;
  • ComponentEvent — генерируется, когда позиция, размер или видимость компонента изменяются;
  • ContainerEvent — генерируется при добавлении или удалении элемента из контейнера;
  • FocusEvent — генерируется при получении или потери фокуса ввода компонентом;
  • ItemEvent — событие выбора или отменены выбора элемента.
    Например, изменение состояния кнопки-флажка, выбор элемента меню или списка;
  • KeyEvent — событие ввода с клавиатуры;
  • MouseEvent — события мыши;
  • WindowEvent — события окна, как активация и свертывание.

Для обработки событий элемента в нем необходимо зарегистрировать объект обработчик
в числе слушателей. Делается это методами типа addxxxListener, например addMouseListener(). В качестве объектов обработчиков обычно выбирают контейнер, в котором содержится элемент.Обработка события осуществляется через соответствующий интерфейс, например:

  • ActionListener — интерфейс обработки события ActionEvent;
  • ItemListener — интерфейс обработки события ItemEvent;
  • KeyListener — интерфейс обработки события KeyEvent;
  • MouseListener — интерфейс обработки события MouseEvent, для нажатия/отжатия кнопок и входа/ухода курсора мыши с
    области компонента;
  • MouseMotionListener — интерфейс обработки события MouseEvent, для движение курсора мыши или перетаскивании мышью;
  • MouseWheelListener — интерфейс обработки события MouseEvent, для прокрутки
    колеса мыши.

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

Первое оконное приложение с использованием Java Swing

Обычно оконное приложение состоит из одного и более окон и диалогов.
В отличие от простых контейнеров контейнеры верхнего уровня имеют более сложную внутреннюю структуру. Для них автоматически создается корневой контейнер — объект класса JRootPane, который можно получить методом getRootPane(). Внутри корневого создаются еще дваобъекта: слойный контейнер и объект представляющий окно как компонент.

В большинстве случаев в слойном контейнере используются первых два контейнера слоя. Первый для хранения большинства элементов управления окна, так сказать клиентская область окна. Для доступа к нему прямо из окна используется метод getContentPane, также его можно заменить любым другим контейнером методом setContentPane(). Второй контейнер слой используется для хранения меню, панелей инструментов и т.п. Например, панель меню, добавляемая к окну, методом setJMenuBar() сохраняется именно там.

Методом getGlassPane можно получить объект представляющий окно как компонент для обработки событий или рисования поверх всех других компонент.

Ниже приведен минимальный шаблон оконного приложения.
Классы MyPanel и MyComponent — пользовательские классы, которые будут реализованы в некоторыхследующих примерах для демонстрации возможностей swing. Вам остается просто скопировать со страницы код MyPanel/MyComponent в проект со шаблоном, подправить шаблон и запустить его.

Читать еще:  Игры на javascript

Ниже приведен более сложный пример с несколькими дочерними элементами и обработкой
событий.

Компоновщики

Менеджеры компоновки используются для автоматического позиционирования и задания размеров дочерних элементов в контейнере. Компоновщиком является любой объект реализующий интерфейс LayoutManager или LayoutManager2 (поддерживает выравнивание и ограничения).

стандартные компоновщики

  • BorderLayout — размещает элементы в один из пяти регионов, как было указано при добавлении элемента в контейнер: наверх, вниз, влево, вправо, в центр. По умолчанию элемент добавляется в центр. Если в указанном регионе уже есть элемент, то он замещается новым. Поэтому, когда надо разместить несколько элементов в одном регионе, то их объединяют в один контейнер (обычно JPanel);
  • FlowLayout — размещает элементы по порядку в том же направлении, что
    и ориентация контейнера (слева на право по умолчанию)
    применяя один из пяти видов выравнивания, указанного при создании менеджера.
    Данный менеджер используется по умолчанию;
  • GridLayout — размещает элементы таблично. Колличество столбцов и строк указывается при создании менеджера. По умолчанию одна строка, а число столбцов равно числу элементов. Вся область контейнера разбивается на ячейки и размер каждого элемента устанавливается в размерячейки. Это больше подходит для выравнивания панелей и других контейнеров, а не элементов управления (нам ведь не нужны гигантские кнопки);
  • BoxLayout — размещает элементы по вертикали или по горизонтали.
    Обычно он используется не напрямую, а через контейнерный класс Box (ящик).

точное позиционирование и задание размеров

Если в контейнере отсутствует компоновщик (был вызван метод контейнера setLayout(null)), то позицию и размеры элементов необходимо задать явно методами элемента

  • setLocation(Point p) — переместить компонент в указанную точку;
  • setLocation(int x, int y) — переместить компонент в указанную точку;
  • setSize(Dimension d) — установить размеры компонента;
  • setSize(int width, int height) — установить размеры компонента;
  • setBounds(Rectangle r) — переместить и установить размеры компонента
    (вписать в четырехугольник);
  • setBounds(int x,int y, int width, int height) — переместить и установить
    размеры компонента.

предпочтительные размеры

Компоненты обладают минимальными, максимальными и предпочтительными размерами.
Некоторые компоновщики используют эти параметры, а значит можно повлиять на их работу, изменяя их. Эти размеры также могут пригодится при разработке собственного компоновщика. Если все размеры компонента равны, то говорят, что у компонента фиксированный размер. Получить и установить эти значения можно методами:

  • getMaximumSize() — получение максимального размера;
  • setMaximumSize(Dimension d) — установка максимального размера;
  • getMinimumSize() — получение минимального размера;
  • setMinimumSize(Dimension d) — установка минимального размера;
  • getPreferredSize() — получение желательного размера;
  • setPreferredSize(Dimension d) — установка желательного размера.

компоновщики низкого уровня

Существует также два компоновщика низкого уровня, разработанных для программ построителей форм SpringLayout и GroupLayout. В
документации
для SpringLayout можно скачать файлик SpringUtilities.java, где реализованы два полезных способа компоновки на его основе (как там сказано просто вызываем методы из этого файла, не вникая в детали:).

класс Box

Класс Box реализует контейнер с компоновщиком BoxLayout. Если элементы размещаются по горизонтали, то высота всех элементов равна высоте самого высокого элемента.А ширина элементов такова, чтобы заполнить весь контейнер по ширине.
При изменении ширины контейнера элементы растягиваются пропорционально. Если у всех элементов достигнут предел растяжения (значение getMaximumSize()), то первый элемент растягивается насильно. Если остается хотя бы один элемент доступный для растяжения, то растягивается только он.

Подобным образом происходит и вертикальное размещение. Ширина всех элементов равна ширине самого широкого элемента, а высота элеметов такова, чтобы заполнить весь контейнер по высоте. При этом может понадобится явное задание выравнивания элементов методом setAlignmentX. Иначе даже при одинаковой ширине, элементы не будут выстроены в красивый столбик.

Класс Box имеет статические методы для создания невидимых элементов для различных целей:

  • createHorizontalStrut(int width) — создает компонент с фиксированной шириной. При горизонтальной укладке элемент используется чтобы освободить пространство между соседними элементами, иначе элементы будут впритык. При вертикальной укладке элемент используется для задания минимальной ширины остальных элементов;
  • createVerticalStrut(int height) — создает компонент с фиксированной высотой. При вертикальной укладке элемент используется чтобы освободить пространство между соседними элементами, иначе элементы будут впритык. При горизонтальной укладке элемент используется для задания минимальной высоты остальных элементов;
  • createRigidArea(Dimension d) — создает невидимый элемент фиксированного размера;
  • createGlue() — создает невидимый растягиваемый компонент. Используется, чтобы предотвратить насильное растяжение элементов. Например, пусть в контейнере видимые элементы фиксированного размера. Тогда положив данный компонент в начало и в конец контейнера, мы получим центрирование видимых элементов. А если расположить его после каждого видимого, то при увеличении размера контейнера, видимые элементы «разойдутся» друг от друга.

пример использования компоновщиков

Ниже приведен пример использования некоторых компоновщиков. Цветные бордюры служат для разграничения текстовых полей друг от друга, если вызовы метода createVerticalStrut буду закомментированы.

использование setbounds un java

У меня есть это упражнение в моем учебнике:

В этом упражнении вы познакомитесь с простым способом визуализации объекта прямоугольника. То Метод setBounds класса JFrame перемещает окно фрейма в заданный прямоугольник. Выполните следующую программу, чтобы визуально показать метод перевода Прямоугольник класс:

Я пробовал это, но это не работает:

Не могли бы вы мне помочь ?

1 Ответ

Начнем с того, что вы создали два экземпляра JFrame .

Первое-это то, что видно на экране, а второе-нет.

Может быть, что-то вроде.

будет работать лучше.

Любые изменения, внесенные в box , не изменят кадр, так как JFrame использует свойства Rectangle для установки его свойств и не поддерживает ссылку на исходный Rectangle , вместо этого вам нужно будет снова вызвать setBounds для обновления кадра

Однако, как правило, вы не должны устанавливать размер самого фрейма, а вместо этого полагаться на pack , но поскольку это упражнение, я могу его пропустить 😉

Похожие вопросы:

Я хотел бы иметь цвет JLabel changint на случайный, при переходе в случайную позицию и при изменении его текста. но setText и setBounds, кажется, сталкиваются, и я не знаю, почему. если вы.

Привет, я использую метод setBounds, чтобы открыть окно с определенным размером. Но размер, который я передаю в аргументе, — это размер окна, включая решетку рамы. Как я могу задать размеры только.

Я пытаюсь преобразовать приложение Objective-C в Swift, но я застрял с setBounds . Исходный код выглядит следующим образом: — (void)setBounds:(CGRect)bounds < [super setBounds:bounds]; // code >Что.

Вызывается ли метод setBounds() Component , как JPanel , в потоке отправки событий? Я задаю этот вопрос, потому что пишу программу, которая рисует платформы и использует Swing Timer для их.

Как я могу достичь автоматического значения с помощью примера setBounds: myJPanel.setBounds(0, 0, [auto], 300); Я использую макет коробки и хочу, чтобы ширина автоматически вычислялась, как это было.

Я читал, что плохо использовать команду setBounds() для создания GUIs. Я знаю, как использовать менеджеры по верстке, и я должен сказать, что у них также есть свои недостатки. В данный момент я.

Возможно ли, что при использовании метода Java setBounds(x,y,width,height) компонент может меняться с места на место, если мы меняем машину(монитор разных размеров или любое устройство отображения.

Я буду держать это кратко, потому что все, что я просто прошу, это строка кода. Вот моя проблема, поэтому для того, чтобы мой Jlabel появился, я использую .setBounds Моя проблема заключается в том.

Я хочу знать, есть ли какой-либо недостаток в использовании метода setBounds() в Java Swing? Я жестко закодировал значения координат xy для размещения моего 17-дюймового экрана. Предположим, что мое.

StackOverFlow вопрос Здравствуйте во второй раз за сегодняшний день выделенные пользователи переполнения стека! XD Поэтому я пытаюсь установить расположение этих 9 кнопок в формате сетки с помощью.

Ссылка на основную публикацию
Adblock
detector