Spec-Zone .ru
спецификации, руководства, описания, API
След: Создание GUI С JFC/Swing
Урок: Используя Компоненты Swing
Как Использовать Границы
Домашняя страница > Создание GUI С JFC/Swing > Используя Компоненты Swing

Как Использовать Границы

Каждый JComponent может иметь одну или более границ. Границы являются невероятно полезными объектами, которые, в то время как не непосредственно компоненты, знают, как потянуть края компонентов Swing. Границы полезны не только для проведения линий и необычных краев, но также и для обеспечения заголовков и пустого места вокруг компонентов.


Отметьте: 

Наша группа в качестве примера граничит JPanels, JLabels, и пользовательские подклассы JComponent. Хотя технически можно установить границу на любом объекте, который наследовался от JComponent, реализация стили многих стандартных компонентов Swing не работает хорошо с установленными пользователем границами. Вообще, когда Вы хотите установить границу на стандартном компоненте Swing кроме JPanel или JLabel, мы рекомендуем, чтобы Вы поместили компонент в a JPanel и набор граница на JPanel.


Помещать границу вокруг a JComponent, Вы используете setBorder метод. Можно использовать BorderFactory class, чтобы создать большинство границ, которые обеспечивает Swing. Если Вы нуждаетесь в ссылке на границу — говорят, потому что Вы хотите использовать это в многократных компонентах — можно сохранить это в переменной типа Border. Вот пример кода, который создает ограниченный контейнер:

JPanel pane = new JPanel();
pane.setBorder(BorderFactory.createLineBorder(Color.black));

Вот изображение контейнера, который содержит компонент метки. Черное пятно, оттянутое символами границы край контейнера.

Граница строки

Остальная часть этой страницы обсуждает следующие темы:

Пример BorderDemo

Следующие изображения показывают вызванное приложение BorderDemo это выводит на экран границы, которые обеспечивает Swing. Мы показываем код для того, чтобы создать эти границы немного позже в Использовании Границ, Обеспеченных Swing.

Нажмите кнопку Launch, чтобы работать, пример BorderDemo, используя Сеть Java™ Запускаются (загрузите JDK 6 или позже). Альтернативно, чтобы скомпилировать и выполнить пример самостоятельно, консультируйтесь, пример индексируют.

Запускает пример BorderDemo
BorderDemo: Простые Границы

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

BorderDemo: Матовые Границы

Следующие шоу изображения названные границы. Используя названную границу, можно преобразовать любую границу в тот, который выводит на экран текстовое описание. Если Вы не определяете границу, стиль, определенная граница используется. Например, значение по умолчанию, названная граница в стили Java использует серую строку, и значение по умолчанию названная граница в стили Windows, использует вытравленную границу. По умолчанию title колеблется между верхней левой из границы, как показано наверху следующего числа.

BorderDemo: Названные Границы

Следующее изображение показывает составные границы. С составными границами можно объединить любые две границы, которые могут самостоятельно быть составными границами.

BorderDemo: Составные Границы

Используя Границы, Обеспеченные Swing

Код, который следует за шоу, как создать и установить границы, которые Вы видели в предыдущих числах. Можно найти код программы в BorderDemo.java.

//Keep references to the next few borders,
//for use in titles and compound borders.
Border blackline, raisedetched, loweredetched,
       raisedbevel, loweredbevel, empty;

blackline = BorderFactory.createLineBorder(Color.black);
raisedetched = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
raisedbevel = BorderFactory.createRaisedBevelBorder();
loweredbevel = BorderFactory.createLoweredBevelBorder();
empty = BorderFactory.createEmptyBorder();

//Simple borders
jComp1.setBorder(blackline);
jComp2.setBorder(raisedbevel);
jComp3.setBorder(loweredbevel);
jComp4.setBorder(empty);

//Matte borders
ImageIcon icon = createImageIcon("images/wavy.gif",
                                 "wavy-line border icon"); //20x22

jComp5.setBorder(BorderFactory.createMatteBorder(
                                   -1, -1, -1, -1, icon));
jComp6.setBorder(BorderFactory.createMatteBorder(
                                    1, 5, 1, 1, Color.red));
jComp7.setBorder(BorderFactory.createMatteBorder(
                                    0, 20, 0, 0, icon));

//Titled borders
TitledBorder title;
title = BorderFactory.createTitledBorder("title");
jComp8.setBorder(title);

title = BorderFactory.createTitledBorder(
                       blackline, "title");
title.setTitleJustification(TitledBorder.CENTER);
jComp9.setBorder(title);

title = BorderFactory.createTitledBorder(
                       loweredetched, "title");
title.setTitleJustification(TitledBorder.RIGHT);
jComp10.setBorder(title);

title = BorderFactory.createTitledBorder(
                       loweredbevel, "title");
title.setTitlePosition(TitledBorder.ABOVE_TOP);
jComp11.setBorder(title);

title = BorderFactory.createTitledBorder(
                       empty, "title");
title.setTitlePosition(TitledBorder.BOTTOM);
jComp12.setBorder(title);

//Compound borders
Border compound;
Border redline = BorderFactory.createLineBorder(Color.red);

//This creates a nice frame.
compound = BorderFactory.createCompoundBorder(
                          raisedbevel, loweredbevel);
jComp13.setBorder(compound);

//Add a red outline to the frame.
compound = BorderFactory.createCompoundBorder(
                          redline, compound);
jComp14.setBorder(compound);

//Add a title to the red-outlined frame.
compound = BorderFactory.createTitledBorder(
                          compound, "title",
                          TitledBorder.CENTER,
                          TitledBorder.BELOW_BOTTOM);
jComp15.setBorder(compound);

Как Вы, вероятно, заметили, код использует BorderFactory class, чтобы создать каждую границу. BorderFactory class, который находится в javax.swing пакет, возвраты возражают что реализация Border интерфейс.

Border интерфейс, так же как его обеспеченные Swing реализации, находится в javax.swing.border пакет. Вы часто ничего не должны непосредственно использовать в пакете границы, кроме тех случаев, когда определение констант, которые являются определенными для определенной границы class или обращаясь к Border ввести.

Создание Пользовательских Границ

Если BorderFactory не предлагает Вам достаточное управление формой границы, тогда Вы, возможно, должны были бы непосредственно использовать API в пакете границы — или даже определить Вашу собственную границу. В дополнение к содержанию Border интерфейс, пакет границы содержит классы, которые реализуют границы, которые Вы уже видели: LineBorder, EtchedBorder, BevelBorder, EmptyBorder, MatteBorder, TitledBorder, и CompoundBorder. Пакет границы также содержит названный class SoftBevelBorder, который приводит к результату, подобному BevelBorder, но с более мягкими краями.

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

Если у пользовательской границы есть вставки (и у них обычно есть вставки), Вы должны переопределить обоих AbstractBorder.getBorderInsets(Component c) и AbstractBorder.getBorderInsets(Component c, Insets insets) обеспечить корректные вставки.

Для примеров реализации границ см. исходный код для классов в javax.swing.border пакет.

API Границы

Следующие таблицы приводят обычно используемые методы границы. API для того, чтобы использовать границы попадает в две категории:

Создание Границы с BorderFactory
Метод Цель
Ограничьте createLineBorder (Цвет)
Ограничьте createLineBorder (Цвет, интервал)
Создайте границу строки. Первым параметром является a java.awt.Color объект, который определяет цвет строки. Дополнительный второй параметр определяет width в пикселях строки.
Ограничьте createEtchedBorder ()
Ограничьте createEtchedBorder (Цвет, Цвет)
Ограничьте createEtchedBorder (интервал)
Ограничьте createEtchedBorder (интервал, Цвет, Цвет)
Создайте вытравленную границу. Дополнительное Color параметры определяют выделение и теневые цвета, которые будут использоваться. В выпуске 1.3, методах с int параметры были добавлены, которые позволяют методам границы быть определенными как также EtchedBorder.RAISED или EtchedBorder.LOWERED. Методы без int параметры создают пониженную вытравленную границу.
Ограничьте createLoweredBevelBorder () Создайте границу, которая дает иллюзию компонента, являющегося ниже чем окружающее пространство.
Ограничьте createRaisedBevelBorder () Создайте границу, которая дает иллюзию компонента, являющегося выше чем окружающее пространство.

Ограничьте createBevelBorder (интервал, Цвет, Цвет)
Ограничьте createBevelBorder (интервал, Цвет, Цвет, Цвет, Цвет)
Создайте повышенную или пониженную скошенную границу, определяя цвета, чтобы использовать. Целочисленный параметр может быть также BevelBorder.RAISED или BevelBorder.LOWERED. С конструктором с тремя параметрами Вы определяете выделение и теневые цвета. С конструктором с пятью параметрами Вы определяете внешнее выделение, внутреннее выделение, внешнюю тень, и внутренние теневые цвета, в том порядке.
Ограничьте createEmptyBorder ()
Ограничьте createEmptyBorder (интервал, интервал, интервал, интервал)
Создайте невидимую границу. Если Вы не определяете параметров, то граница не занимает места, которое полезно, создавая названную границу без видимой границы. Дополнительные параметры определяют число пикселей, которые граница занимает наверху, оставленный, нижняя часть, и право (в том порядке) любого компонента использует это. Этот метод полезен для помещения пустого места вокруг Ваших компонентов.
MatteBorder createMatteBorder (интервал, интервал, интервал, интервал, Цвет)
MatteBorder createMatteBorder (интервал, интервал, интервал, интервал, Значок)
Создайте матовую границу. Целочисленные параметры определяют число пикселей, которые граница занимает наверху, оставленный, нижняя часть, и право (в том порядке) любого компонента использует это. Цветной параметр определяет цвет, который с границей должен заполнить ее область. Параметр значка определяет значок, который с границей должен разместить ее область рядом.
TitledBorder createTitledBorder (Строка)
TitledBorder createTitledBorder (Граница)
TitledBorder createTitledBorder (Граница, Строка)
TitledBorder createTitledBorder (Граница, Строка, интервал, интервал)
TitledBorder createTitledBorder (Граница, Строка, интервал, интервал, Шрифт)
TitledBorder createTitledBorder (Граница, Строка, интервал, интервал, Шрифт, Цвет)
Создайте названную границу. Строковый параметр определяет title, который будет выведен на экран. Дополнительный шрифт и цветные параметры определяют шрифт и цвет, который будет использоваться для текста title. Параметр границы определяет границу, которая должна быть выведена на экран наряду с title. Если никакая граница не определяется, то стиль определенная граница значения по умолчанию используется.

По умолчанию title колеблется между вершиной своей сопутствующей границы и лево-выравнивается по ширине. Дополнительные целочисленные параметры определяют позицию title и выравнивание в том порядке. TitledBorder определяет эти возможные позиции: ABOVE_TOP, TOP (значение по умолчанию), BELOW_TOP, ABOVE_BOTTOM, BOTTOM, и BELOW_BOTTOM. Можно определить выравнивание как LEADING (значение по умолчанию), CENTER, или TRAILING. В локалях с Западными алфавитами LEADING эквивалентно LEFT и TRAILING эквивалентно RIGHT.


CompoundBorder createCompoundBorder (Граница, Граница)
Объедините две границы в одного. Первый параметр определяет внешнюю границу; второе, внутренняя бровка.
Установка или Получение Границы Компонента
Метод Цель
освободите setBorder (Граница)
Ограничьте getBorder ()
Набор или получает границу получения JComponent.
освободите (булев) setBorderPainted
булев isBorderPainted ()
AbstractButton, JMenuBar, JPopupMenu, JProgressBar, и JToolBar)
Набор или добирается, должна ли граница компонента быть выведена на экран.

Примеры то Использование Границы

Много примеров в этом уроке используют границы. Следующая таблица приводит несколько интересных случаев.

Пример Где Описано Примечания
BorderDemo Этот раздел Показывает пример каждого типа границы это BorderFactory может создать. Также использует пустую границу, чтобы добавить передышку между каждой областью и ее содержанием.
BoxAlignmentDemo Как Использовать BoxLayout Использование названные границы.
BoxLayoutDemo Как Использовать BoxLayout Использует красную строку, чтобы показать, где край контейнера, так, чтобы можно было видеть, как дополнительное пространство в расположении поля распределяется.
ComboBoxDemo2 Как Использовать Поля комбинированного списка Использует составную границу, чтобы объединить границу строки с пустой границей. Пустая граница обеспечивает пространство между строкой и внутренностями компонента.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Как Использовать Значки
Следующая страница: Решение Общих Компонентных проблем