В этой статье я постараюсь максимально просто и понятно изложить основы
программирования на языке Delphi
Java для чайников. Урок 37.
JFrame.
На прошлом уроке
мы познакомились с JFrame. Сегодня изучим его более
подробно. Итак, берем пример прошлого урока и находим там строку
frame.setPreferredSize(new
Dimension(200,
100)); |
Заменим ее на строку
frame.setPreferredSize(new
Dimension(500,
500)); |
Теперь размер окна будет больше:
Также туда можно добавлять не только текстовые метки, но и
сякие кнопки и прочее, а также кое-что поинтереснее, например, графические
фигуры. Сейчас мы эти займемся. Но только сначала немного теории. Дело в том,
что мы не просто будем добавлять фигуры в окно, но и разместим их по разным
слоям. Для использования слоев нам понадобятся специальные панели, например
JRootPane или JLayeredPane. Мы вспольуземся JLayeredPane, она предлагает
следующие слои:
-
Default. Этот слой используется для
размещения всех обычных компонентов, которые добавляются в контейнер. В этом
слое располагаются внутренние окна многодокументных приложений.
-
Palette. Предназначен для размещения окон с набором
инструментов, которые обычно перекрывают остальные элементы интерфейса.
Создавать такие окна позволяет панель JDesktopPane, которая размещает их в этом
слое.
-
Modal. Планировался для размещения легковесных
модальных диалоговых окон. Однако такие диалоговые окна пока не реализованы, так
что этот слой в Swing в настоящее время не используется.
-
Popup. Наиболее часто используемый слой, служащий для
размещения всплывающих меню и подсказок.
-
Drag. Самый верхний слой. Предназначен для операций
перетаскивания (drag and drop), которые должны быть хорошо видны в интерфейсе
программы.
Ну, а теперь пример:
import
javax.swing.*;
import
java.awt.*;
// класс рисования двух типов фигур с текстом
class
Figure
extends
JComponent
{
private
static
final
long
serialVersionUID
=
1L;
private
Color color;
private
int
type;
private
String text;
//
параметры:
цвет и тип фигуры
Figure(Color
color,
int
type,
String text)
{
this.color
=
color;
this.type
=
type;
this.text
=
text;
setOpaque(false);
}
public
void
paintComponent(Graphics
g)
{
// прорисовка фигуры
g.setColor(color);
switch
(type)
{
case
0:
g.fillOval(0,
0,
90,
90);
break;
case
1:
g.fillRect(0,
0,
130,
80);
break;
}
g.setColor(Color.yellow);
g.drawString(text,
10,
35);
}
}
public
class
LayeredPane
extends
JFrame
{
private
static
final
long
serialVersionUID
=
1L;
public
LayeredPane()
{
// создание окна
super("Пример
окна со слоями");
//
выход при закрытии окна
setDefaultCloseOperation(EXIT_ON_CLOSE);
//
определение многослойной панели
JLayeredPane lp
=
getLayeredPane();
//
создание трех фигур
Figure figure1
=
new
Figure(Color.red
,
0,
"Фигура
popup");
Figure figure2
=
new
Figure(Color.blue,
0,
"Фигура
1");
Figure figure3
=
new
Figure(Color.cyan,
1,
"Фигура
2");
// определение местоположения фигур в окне
figure1.setBounds(10,
40,
120,
120);
figure2.setBounds(60,
120,
160,
180);
figure3.setBounds(90,
55,
250,
180);
//
добавление фигур в различные слои
lp.add(figure1,
JLayeredPane.POPUP_LAYER
);
lp.add(figure2,
JLayeredPane.PALETTE_LAYER);
lp.add(figure3,
JLayeredPane.PALETTE_LAYER);
// смена позиции одной из фигур
lp.setPosition(figure3,
0);
// определение размера и открытие окна
setSize(280,
250);
setVisible(true);
}
public
static
void
main(String[]
args)
{
JFrame.setDefaultLookAndFeelDecorated(true);
new
LayeredPane();
}
} |
Запустив программу, мы увидим вот такое окно:
Теперь разберемся, как работает программа. Для отображения
фигуры мы объявляем отдельный класс Figure, который
является потомком класса JComponent:
// класс рисования двух типов фигур с текстом
class
Figure
extends
JComponent
{
private
static
final
long
serialVersionUID
=
1L;
private
Color color;
private
int
type;
private
String text;
//
параметры:
цвет и тип фигуры
Figure(Color
color,
int
type,
String text)
{
this.color
=
color;
this.type
=
type;
this.text
=
text;
setOpaque(false);
}
public
void
paintComponent(Graphics
g)
{
// прорисовка фигуры
g.setColor(color);
switch
(type)
{
case
0:
g.fillOval(0,
0,
90,
90);
break;
case
1:
g.fillRect(0,
0,
130,
80);
break;
}
g.setColor(Color.yellow);
g.drawString(text,
10,
35);
}
}
|
Главный класс окна, для удобства, мы создаем из
JFrame, разместив в конструкторе те объекты (Figure),
которые мы будем выводить на экран. Мы их сначала создаем:
//
создание трех фигур
Figure figure1
=
new
Figure(Color.red
,
0,
"Фигура
popup");
Figure figure2
=
new
Figure(Color.blue,
0,
"Фигура
1");
Figure figure3
=
new
Figure(Color.cyan,
1,
"Фигура
2");
// определение местоположения фигур в окне
figure1.setBounds(10,
40,
120,
120);
figure2.setBounds(60,
120,
160,
180);
figure3.setBounds(90,
55,
250,
180);
|
а потом добавляем в контейнер JLayeredPane:
//
добавление фигур в различные слои
lp.add(figure1,
JLayeredPane.POPUP_LAYER
);
lp.add(figure2,
JLayeredPane.PALETTE_LAYER);
lp.add(figure3,
JLayeredPane.PALETTE_LAYER);
|
который создали ранее:
//
определение многослойной панели
JLayeredPane lp
=
getLayeredPane();
|
Обратите внимание вот на эту строку кода:
// смена позиции одной из фигур
lp.setPosition(figure3,
0);
|
Мы можем внести в нее изменения, сделав первым круг, а не прямоугольник:
// смена позиции одной из фигур
lp.setPosition(figure2,
0);
|
Тогда работа программы будет выглядеть вот так:
(С)
Шуравин Александр
|