Как сделать фрейм по центру java

Обновлено: 04.07.2024

Мне нужно создать фрейм, чтобы он при запуске размещался справа снизу дисплея но над ТРЕЕМ, проблем с горизонтальным размещением нет, но вот как заставить его понимать указанное выше условие к вертикальному положению? Спасибо если кто поможет.

определить разрешение эакрана, размер окна, исходя из этого определить координаты верхнего (если не путаю) левого угла окна, с учетом нужного расположения окна на экране и выставить их для фрейма frame.setLocation(new Point( x,y));

я не понял что значит определить размер окна; я мое окно еще не выводил как бы, я просто хочу узнать высоту окна без панели задач или .. там.. позиционирование может какое-то специальное есть

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

Как пример возьмем функцию sin(x). В приложение добавим возможность указывать цвет графика и название графика, чтобы было немного прикольно.

И так приступим.

Форма

Как создавать простые окна в Java можно прочитать вот здесь. Для создания окна используется класс JFrame, внутри которого будут распологаться все другие элементы.

Сначала создадим основной класс, в котором мы будем хранить все наши элементы формы и инициализировать их. Назовем его GraphicApp.

Как видно, в констркуторе класс вызывается метод createFrame(), в котором мы создаем фрейм с размером 600х300. А ссылка на фрейм(окно) у нас будет храниться как свойство класса.

Также добавлен метод show(), который делает фрейм видимым. Создаем еще один класс для запуска нашего кода.

если запустим этот класс, увидим нашу форму.

Теперь добавим элементы управления в форму. Снизу добавим панель состояния, слева будут два поля ввода названия и цвета графика и кнопка "Нарисовать". Справа будет панель, на которую мы будем рисовать график.

Создадим еще один метод, который будет называться createElements() который создаст все нужные элементы формы. Все элементы, к которым мы будем обращаться после создания формы, мы сохраним как свойства класса GraphicApp. А элементы которые будут созданы один раз и больше не будут меняться, мы оставим внутри функции.

Создание элементов занимает много много строк, поэтому получилось вот так.

Мы вывели statusLabel, colorTextField,nameTextField в свойства класс, потому что эти элементы мы будем в дальнейшем использовать в других местах. Если мы запустим класс Starter, то увидим примерно следующее.


Теперь нам нужно создать свою панель, в котором мы будем рисовать график. Для этого создадим класс GraphicPanel, который будет наследником класса JPanel. Поместим эту панель справа и зададим ему белый фон.

Пока класс пустой. Потом добавим его внутренности.

Теперь в класс GraphicApp добавим вначале еще одно поле, в котором будем хранить панель GraphicPanel:

И в конце метода createElements() добавим эту панель в основной контейнер фрейма:

Теперь у нас в приложение появится справа белая панель.

Рисование

Чтобы нарисовать на элементе, мы должны создать наследник какого-либо графического элемента и переопределить метод paint(). Рисовать можно во всех потомках класса JComponent. Метод paint() принимает один параметр типа Graphics, который представляет графический контекст элемента. Используя этот объект мы можем рисовать на элементе. Про то как рисовать можно почитать вот здесь.

Мы будем рисовать на нашей панели, который называется GraphicPanel. Переопределим метод paint(), и вызовем метод paint() у родителя, чтобы родитель тоже выполнил нужную отрисовку(например фона):

Метод paint() будет вызываться каждый раз, когда меняется размер окна или при вызове метода repaint() и будет перерисовывать все заново.

Теперь мы готовы рисовать. Так как мы унаследовали класс JPanel, мы можем получить ширину и высоту панели используя метода getWidth() и getHeight(). Они нам пригодятся, для определения центра и краев панели.

Сначала нарисуем сетку по всей панели серым цветом. Сетку будем рисовать циклом с растоянием 30 пикселей. Так как координата центра у нас будет width/2, мы будем рисовать сетку от центра в две стороны, чтобы центральные оси совпадали с сеткой. Потом нарисуем две оси OX и ОY черным цветом по центру:

Метод drawLine() принимает четыре параметры, первые две это координаты начальной точки, последние две это координаты конечной точки.

Сейчас у нас получится что-то такое:


Теперь пора рисовать сам график функции sin(x). Чтобы вычислять значение синуса мы будем использовать метод Math.sin(), который принимает угол в радианах и возвращает синус этого угла. Так как значение синуса может быть только в диапозоне от -1 до 1, мы будем умножать его на 90, чтобы растянуть график на 90 пикселей по высоте.

Добавляем свойство graphicColor, в котором будем хранить цвет графика, по умолчанию зеленый:

создаем еще один метод:

и вызываем этот метода после drawAxis():

Запустив, вы должны увидеть такое:


Теперь сделаем так чтобы при нажатии на кнопку менялся цвет графика на указанный и добавлялся текст. Для этого сначала добавим обработчик действия для кнопки с помощью метода addActionListener(). В этом обработчике вызовем метод changeGraphicColor() класса GraphicApp. Кнопка у нас находится в конце метода createLeftPanel класса GraphicApp. После создания кнопки добавляем это:

и еще внизу добавляем метод changeGraphicColor() в котором будем получать введенные название и цвет в полях ввода, и передавать их нашей панели graphicPanel:

Так, как у панели нет такого метода, мы создадим его. В класс GraphicPanel добавим в конце метод:

Этот метод принимает два параметра, но пока будет использовать только второй параметр. Чтобы перенести цвет из текста в объект класса Color, используем метод Color.decode(). Если пользователь введет текст цвета неправильно, то произойдет ошибка. Но мы поймаем ошибку, и присвоим красный цвет. После присвоения цвета вызываем метод repaint() чтобы перерисовать панель.

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

Менеджер размещения представляет собой один из классов FlowLayout, BorderLayout, GridLayout, CardLayout, BoxLayout, реализующих интерфейс LayoutManager, устанавливающий размещение.

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

public class FlowLayout extends Object

implements LayoutManager, Serializable

В следующем примере демонстрируются возможности поточной компоновки различных элементов управления.

package chapt13;

import java.awt.*;

import javax.swing.*;

public class FlowLayoutEx extends JApplet

private Component c[] = new Component[9];

public void init()

//установка менеджера размещений

setLayout(new FlowLayout());

setForeground(Color.getHSBColor(1f, 1f, 1f));

for (int i = 0; i of your page -->

Похожие посты:

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

В первой версии языка Java для работы с графикой было только библиотека AWT. Эта библиотека – простой набор классов, таких, как Button(кнопка),TextField (текстовое поле), Label (текстовая метка или иконка) и другие.
Вскоре была создана более совершенная библиотека, которую назвали Swing. Она так же включает в себя кнопки,текстовые поля и другие элементы управления графическими приложениями. Названия компонентов этой библиотеке начинается с буквы J. Например JButton, JTextField и т.д.

Работать в Swing лучше, быстрей и удобней.

Вот некоторые основные объекты, из которых состоят Swing приложения:

Панель (panel) или, как ещё её называют, pane(оконное стекло) содержит все кнопки, текстовые поля, метки и другие компоненты.

Оконные элементы управления, такие как кнопки JButton,текстовые поля JTextfield,списки JList, и так далее.

Менеджер размещения (layout managers) компонент, которые помогают организовать все эти кнопки и поля на панели.

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

JFrame является главным окном для размещения компонентов и представляет их пользователю.

get/setLocation(int width,int height): Получить/установить месторасположение в окне, где фрейм должен появиться.

AWTUtilities.setWindowOpacity(JFrame frame, 0.5f); - Если добавить эту строку окно будет на половину прозрачным

Панель

Панель JPanel — это элемент управления, представляющий собой прямоугольное пространство, на котором можно размещать другие элементы. Элементы добавляются и удаляются методами, унаследованными от класса Container.

У каждой панели есть менеджер размещения, который определяет стратегию взаимного расположения элементов, добавляемых на панель. Его можно изменить методом setLayout(LayoutManager manager).

Оконные элементы управления

Класс JComponent

Все визуальные компоненты библиотеки Swing унаследованы от класса JComponent. Сам этот класс является абстрактными и непосредственно не используется, но все визуальные компоненты наследуют его методы.

Метка JLabel

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

JLabel(String text, Icon image, int align) — создает метку с надписью text и значком image. Третий параметр задает выравнивание текста вместе со значком. В качестве него может быть использована одна из констант, описанных в интерфейсе SwingConstants: LEFT, RIGHT, CENTER.

get/setIconTextGap(int gap) — позволяет получить или задать расстояние между текстом и значком метки в пикселах.

get/setVerticalAlignment(int align), get/setHorizontalAlignment(int align) — эти четыре метода позволяют получить текущее или установить новое выравнивание (по горизонтали и вертикали) метки относительно ее границ. Возможные положения описаны в интерфейсе SwingConstants.

get/setVerticalTextPosition(int align), get/setHorizontalTextPosition(int align) — эти четыре метода позволяют получить текущее или установить новое выравнивание текста относительно значка. Возможные положения описаны в интерфейсе SwingConstants.

Кнопка JButton

get/setRolloverIcon(Icon icon) - позволяет задать значок, который будет появляться при наведении на кнопку мыши.

get/setMargin(Insets margin) - позволяет задать величину отступов от текста надписи на кнопке до ее полей.

setFocusPainted(boolean focusPainted) - Включить/Выключить прорисовку фокуса (кнопка, на которой находится фокус, выделяется пунктирным прямоугольником).

Компоненты JToggleButton, JCheckBox, JRadioButton

Компонент JToggleButton представляет собой кнопку, которая может находиться в двух состояниях: нажатом и отпущенном.
Когда пользователь щелкает мышкой по такой кнопке, она изменяет свое состояние. Именно таким образом ведут себя кнопки форматирования на инструментальной панели текстового редактора. Кнопка [I] не только устанавливает или убирает курсивное начертание в выделенном тексте, но и сигнализирует о его наличии или отсутствии.

JToggleButton(String text, Icon icon, boolean selected) - Основной конструктор создает кнопку с заданными надписью, значком и текущим состоянием.

isSelected() возвращает true, если кнопка выбрана (т.е. находится в нажатом состоянии) и false в противном случает.

От класса JToggleButton унаследован класс JCheckBox — флажок.
Этот класс имеет точно такой же набор конструкторов и методов, т.е. не расширяет функциональность предка. Единственное различие между ними — во внешнем виде: JCheckBox выглядит не как кнопка, а как небольшой квадратик, в котором можно поставить или убрать галочку.

Аналогичным образом ведет себя класс JRadioButton — переключатель или радиокнопка, внешне выглядящая как пустой кружок, когда она не выделена и кружок с точкой в выделенном состоянии.

Для того, чтобы элементы объединить в группу, используется специальный контейнер ButtonGroup Если добавить в один такой контейнер несколько элементов JRadioButton, то выбранным всегда будет только один из них.

getElements() - возвращает все ее элементы в виде коллекции Enumeration. По коллекции можно пройтись итератором и найти выделенный элемент.

Текстовое поле JTextField

Для создания текстового поля чаще всего используются конструкторы:

JTextField(int columns) — создает пустое текстовое поле, ширина которого достаточна для размещения columns символов. При этом пользователь может вводить в текстовое поле строку какой угодно длины: она просто будет прокручиваться.

get/setCaretPosition() - Возвращает позицию курсора (каретки) в текстовом поле и позволяет задать ее программно.

setHorizontalAlignment(int align) -Выравнивание текстового поля в качестве параметра передается одна из констант выравнивания, определенных в этом же классе JTextField: LEFT, CENTER, RIGHT.

Поле для ввода пароля JPasswordField

JPasswordField является прямым потомком JTextField, поэтому для него справедливо все сказанное выше. JPasswordField является прямым потомком JTextField, поэтому для него справедливо все сказанное выше.

Область для ввода текста JTextArea

JTextArea также является потомком JTextField и наследует все его методы.

Панель прокрутки JScrollPane

setHorizontalScrollBarPolicy(int policy) — позволяет задать стратегию работы с горизонтальной полосой прокрутки. Возможные значения представлены константами HORIZONTAL_SCROLLBAR_ALWAYS (отображать всегда), HORIZONTAL_SCROLLBAR_AS_NEEDED (отображать при необходимости) и HORIZONTAL_SCROLLBAR_NEVER (не отображать никогда). Данные константы определены в интерфейсе ScrollPaneConstants.

setVerticalScrollBarPolicy(int policy) позволяет задать стратегию работы с вертикальной полосой прокрутки посредством констант VERTICAL_SCROLLBAR_ALWAYS, VERTICAL_SCROLLBAR_AS_NEEDED и VERTICAL_SCROLLBAR_NEVER

Инструментальная панель JToolBar

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

JToolBar(String title, int orientation) Для создания вертикальной панели где параметр orientation задается константой VERTICAL из интерфейса SwingConstants.

is/setFloatable(boolean floatable) — разрешает либо запрещает (по умолчанию разрешает) пользователю откреплять панель от места ее начального расположения.

Выпадающий список JComboBox

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

insertItemAt(Object item, int index) - Позволяющим уточнить позицию, в которую требуется вставить элемент.

setEditable(boolean editable) Чтобы пользователь мог ввести свой вариант, который не присутствует в списке, должен быть вызван метод с параметром true.

Ползунок JSlider

Ползунок позволяет пользователю выбрать некоторое число из диапазона доступных значений, наглядно представив этот диапазон.

JSlider(int orientation, int min, int max, int value) Конструктор первый параметр ориентация ползунка (HORIZONTAL или VERTICAL).

setMajorTickSpacing(int spacing) - Позволяет задать расстояние, через которое будут выводиться большие деления.

Панель со вкладками JTabbedPane

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

Список JList

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

Создать список можно с помощью конструктора, работающего на основе массива Object[] или вектора Vector (аналогично JComboBox).

setSelectionMode(int mode) указывает на ListSelectionModel:SINGLE_SELECTION — может быть выделен только один элемент, SINGLE_INTERVAL_SELECTION — может быть выделено несколько элементов, но составляющих непрерывный интервал,MULTIPLE_INTERVAL_SELECTION — может быть выделено произвольное количество смежных и несмежных элементов.

set/getSelectedIndex() и set/getSelectedIndices() - возвращают они не сами выделенные элементы, а их индексы.

JTable Таблицы

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

JFileChooser для выбора файла


При работе с файлами из приложения возникает необходимость рано или поздно использовать диалог для выбора файлов.

JProgressBar полоса загрузки

JMenuBar


Стандартные диалоговые окна

Менеджер размещения

В некоторых старомодных языках программирования необходимо было указывать координаты и размеры каждого компонента окна. Это работало хорошо, если было известно разрешающая способность экрана каждого пользователя. В Java есть схемы размещения (Layout Managers) , которые позволяют разместить компоненты на экране, не зная точных позиций компонентов. Схемы гарантируют, что та часть интерфейса, за которую они отвечают, будет выглядеть правильно в не зависимости от размеров окна и разрешения экрана.

Менеджер последовательного размещения FlowLayout

Менеджер граничного размещения BorderLayout

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

Менеджер табличного размещения GridLayout

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

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

Менеджер блочного размещения BoxLayout и класс Box

Менеджер BoxLayout размещает элементы на панели в строку или в столбец. Обычно для работы с этим менеджером используют вспомогательный класс Box, представляющий собой панель, для которой уже настроено блочное размещение. Создается такая панель не конструктором, а одним из двух статических методов, определенных в классе Box: createHorizontalBox() и createVerticalBox().

Горизонтальная распорка создается статическим методом createHorizontalStrut(int width), а вертикальная — методом createVerticalStrut(int height). Оба метода определены в классе Box, а целочисленный параметр в каждом из них определяет размер распорки.

Ручное размещение элементов

Если в качестве менеджера размещения панели установить null, элементы не будут расставляться автоматически. Координаты каждого элемента необходимо в этом случае указать явно, при этом они никак не зависят от размеров панели и от координат других элементов. По умолчанию координаты равны нулю (т.е. элемент расположен в левом верхнем углу панели). Размер элемента также необходимо задавать явно (в противном случае его ширина и высота будут равны нулю и элемент отображаться не будет). Координаты элемента можно задать одним из следующих методов:

Инструменты страницы

За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: GNU Free Documentation License 1.3

Читайте также: