Spec-Zone .ru
спецификации, руководства, описания, API
|
Каждый JComponent
может иметь одну или более границ. Границы являются невероятно полезными объектами, которые, в то время как не непосредственно компоненты, знают, как потянуть края компонентов Swing. Границы полезны не только для проведения линий и необычных краев, но также и для обеспечения заголовков и пустого места вокруг компонентов.
Наша группа в качестве примера граничит JPanel
s, JLabel
s, и пользовательские подклассы 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
это выводит на экран границы, которые обеспечивает Swing. Мы показываем код для того, чтобы создать эти границы немного позже в Использовании Границ, Обеспеченных Swing.
Нажмите кнопку Launch, чтобы работать, пример BorderDemo, используя
Следующее изображение показывает некоторые матовые границы. Создавая матовую границу, Вы определяете, сколько пикселей она занимает наверху, оставленный, нижняя часть, и право на компонент. Вы тогда определяете или цвет или значок для матовой границы, чтобы потянуть. Вы должны быть осторожными, выбирая значок и определяя размер Вашего компонента; иначе, значок мог бы быть обрублен или иметь несоответствие в углах компонента.
Следующие шоу изображения названные границы. Используя названную границу, можно преобразовать любую границу в тот, который выводит на экран текстовое описание. Если Вы не определяете границу, стиль, определенная граница используется. Например, значение по умолчанию, названная граница в стили Java использует серую строку, и значение по умолчанию названная граница в стили Windows, использует вытравленную границу. По умолчанию title колеблется между верхней левой из границы, как показано наверху следующего числа.
Следующее изображение показывает составные границы. С составными границами можно объединить любые две границы, которые могут самостоятельно быть составными границами.
Код, который следует за шоу, как создать и установить границы, которые Вы видели в предыдущих числах. Можно найти код программы в 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
Border
ввести.
Если BorderFactory
не предлагает Вам достаточное управление формой границы, тогда Вы, возможно, должны были бы непосредственно использовать API в пакете границы — или даже определить Вашу собственную границу. В дополнение к содержанию Border
интерфейс, пакет границы содержит классы, которые реализуют границы, которые Вы уже видели: LineBorder
EtchedBorder
BevelBorder
EmptyBorder
MatteBorder
TitledBorder
CompoundBorder
SoftBevelBorder
BevelBorder
, но с более мягкими краями.
Если ни одна из границ Swing не является подходящей, можно реализовать свою собственную границу. Обычно, Вы делаете это, создавая подкласс AbstractBorder
paintBorder
, который содержит код для прорисовки это a JComponent
выполняется, чтобы потянуть границу.getBorderInsets
, который определяет количество пространства, граница должна потянуть себя.Если у пользовательской границы есть вставки (и у них обычно есть вставки), Вы должны переопределить обоих AbstractBorder.getBorderInsets(Component c)
AbstractBorder.getBorderInsets(Component c, Insets insets)
Для примеров реализации границ см. исходный код для классов в javax.swing.border
пакет.
Следующие таблицы приводят обычно используемые методы границы. API для того, чтобы использовать границы попадает в две категории:
Метод | Цель |
---|---|
|
Создайте границу строки. Первым параметром является a java.awt.Color объект, который определяет цвет строки. Дополнительный второй параметр определяет width в пикселях строки. |
|
Создайте вытравленную границу. Дополнительное Color параметры определяют выделение и теневые цвета, которые будут использоваться. В выпуске 1.3, методах с int параметры были добавлены, которые позволяют методам границы быть определенными как также EtchedBorder.RAISED или EtchedBorder.LOWERED . Методы без int параметры создают пониженную вытравленную границу. |
|
Создайте границу, которая дает иллюзию компонента, являющегося ниже чем окружающее пространство. |
|
Создайте границу, которая дает иллюзию компонента, являющегося выше чем окружающее пространство. |
|
Создайте повышенную или пониженную скошенную границу, определяя цвета, чтобы использовать. Целочисленный параметр может быть также BevelBorder.RAISED или BevelBorder.LOWERED . С конструктором с тремя параметрами Вы определяете выделение и теневые цвета. С конструктором с пятью параметрами Вы определяете внешнее выделение, внутреннее выделение, внешнюю тень, и внутренние теневые цвета, в том порядке. |
|
Создайте невидимую границу. Если Вы не определяете параметров, то граница не занимает места, которое полезно, создавая названную границу без видимой границы. Дополнительные параметры определяют число пикселей, которые граница занимает наверху, оставленный, нижняя часть, и право (в том порядке) любого компонента использует это. Этот метод полезен для помещения пустого места вокруг Ваших компонентов. |
|
Создайте матовую границу. Целочисленные параметры определяют число пикселей, которые граница занимает наверху, оставленный, нижняя часть, и право (в том порядке) любого компонента использует это. Цветной параметр определяет цвет, который с границей должен заполнить ее область. Параметр значка определяет значок, который с границей должен разместить ее область рядом. |
|
Создайте названную границу. Строковый параметр определяет title, который будет выведен на экран. Дополнительный шрифт и цветные параметры определяют шрифт и цвет, который будет использоваться для текста title. Параметр границы определяет границу, которая должна быть выведена на экран наряду с title. Если никакая граница не определяется, то стиль определенная граница значения по умолчанию используется. По умолчанию title колеблется между вершиной своей сопутствующей границы и лево-выравнивается по ширине. Дополнительные целочисленные параметры определяют позицию title и выравнивание в том порядке. |
|
Объедините две границы в одного. Первый параметр определяет внешнюю границу; второе, внутренняя бровка. |
Метод | Цель |
---|---|
|
Набор или получает границу получения JComponent . |
(в AbstractButton , JMenuBar , JPopupMenu , JProgressBar , и JToolBar ) |
Набор или добирается, должна ли граница компонента быть выведена на экран. |
Много примеров в этом уроке используют границы. Следующая таблица приводит несколько интересных случаев.
Пример | Где Описано | Примечания |
---|---|---|
BorderDemo |
Этот раздел | Показывает пример каждого типа границы это BorderFactory может создать. Также использует пустую границу, чтобы добавить передышку между каждой областью и ее содержанием. |
BoxAlignmentDemo |
Как Использовать BoxLayout | Использование названные границы. |
BoxLayoutDemo |
Как Использовать BoxLayout | Использует красную строку, чтобы показать, где край контейнера, так, чтобы можно было видеть, как дополнительное пространство в расположении поля распределяется. |
ComboBoxDemo2 |
Как Использовать Поля комбинированного списка | Использует составную границу, чтобы объединить границу строки с пустой границей. Пустая граница обеспечивает пространство между строкой и внутренностями компонента. |