Московский государственный университет имени М.В.Ломоносова
Опубликован: 01.11.2004 | Доступ: свободный | Студентов: 11276 / 456 | Оценка: 4.12 / 4.01 | Длительность: 19:20:00
ISBN: 978-5-9556-0077-9
Специальности: Программист
Лекция 27:

Библиотека классов JDK. Основы построения интерфейса пользователя на языке Java. Компоновки и элементы управления

Компоненты графического интерфейса пользователя

Панели

Java-приложение создается как иерархия вложенных компонентов. Наверху этой иерархии могут находится компоненты классов Frame, JFrame, Applet или JApplet.

Классы панелей используются как контейнеры для размещения других компонентов, в числе которых могут быть и сами панели. Пакет оконного интерфейса java.awt содержит один класс панели - Panel. Для добавления компонентов на панель класса Panel следует выполнить метод add, квалифицировав его именем панели.

Пакет облегченных swing-компонентов предоставляет несколько классов панелей, включая следующие классы:

  • JRootPane
  • JPanel
  • JTabbedPane
  • JScrollPane
  • JSplitPane
  • JOptionPane
  • JToolbar.

При использовании менеджеров компоновки с панелями из пакета java.swing для получения ссылки на панель следует использовать метод getLayout.

Например:

((CardLayout)jPanel1.getLayout()).next(jPanel1);

Пакет javax.swing содержит интерфейс RootPaneContainer, реализуемый классами JApplet, JFrame, JInternalFrame, JWindow и JDialog.

При добавлении компонентов в контейнер, использующий интерфейс RootPaneContainer , метод add надо квалифицировать следующим образом:

frame.getContentPane().add(child).

Класс JRootPane используется всеми панелями пакета javax.swing. Он позволяет размещать содержимое панели на нескольких уровнях. JRootPane представляет четыре уровня:

  • ContentPane - используется для отображения компонентов.
  • MenuBar - необязательный уровень, на котором можно размещать компоненты меню.
  • LayeredPane - используется для управления contentPane и menuBar.
  • GlassPane - самый ближайший к пользователю уровень. По умолчанию он невидим. glassPane, как правило, используется для отображения графики или каких-либо всплывающих компонентов. Компоненты этого уровня перекрывают компоненты, расположенные на более "низких" уровнях.

Уровень contentPane должен быть родительским для размещения любого компонента. Для доступа к данному уровню используется метод getContentPane().

Уровень glassPane является самым верхним. Для доступа к данному уровню применяется метод getGlassPane(). Чтобы в приложении можно было использовать уровень glassPane, для него следует вызвать метод setGlassPane().

Например:

panel1.getContentPane().add(button1);

Компонент JTabbedPane реализует набор страниц, переключаемых по щелчку пользователя на вкладках. Вкладки добавляются методами addTab и insertTab. Вкладки нумеруются, начиная с 0.

Если количество вкладок равно нулю, то индекс текущей вкладки равен -1.

На рис. 27.5 показан внешний вид окна, содержащего панель вкладок класса JTabbedPane.

Окно с компонентом JTabbedPane

Рис. 27.5. Окно с компонентом JTabbedPane

Класс javax.swing.JScrollPane реализует компонент "прокручиваемая область".

Панель JScrollPane состоит из:

  • области просмотра ( viewport ) типа JViewport. Для добавления рамки вокруг области просмотра следует использовать метод setViewportBorder, а для добавления рамки вокруг всей прокручиваемой области - метод setBorder.;
  • вертикальной и горизонтальной области прокрутки типа JScrollBar (необязательная область);
  • области заголовков строк и области заголовков столбцов (необязательная область). Эти области реализуются как объекты типа JViewport, для которых вызваны методы setRowHeaderView и setColumnHeaderView ;
  • четырех угловых областей. По умолчанию угловые области не содерджaт компонентов. Для того чтобы разместить в угловой области компонент, следует использовать метод setCorner.

Чтобы изменить свойство области просмотра, ее следует получить, вызвав метод getViewport. Например, для задания цвета фона нужно записать:

scrollPane.getViewport().setBackground(Color.red).

На рис. 27.6 показано расположение основных частей прокручиваемой области JScrollPane.

Окно с компонентом JTabbedPane

Рис. 27.6. Окно с компонентом JTabbedPane

Контейнером для разделяемых панелей служит компонент JSplitPane. Разделяемые плавающие панели имеют одну общую сторону - по вертикали или по горизонтали.

Следующий пример иллюстрирует создание окна, в котором применяются разделяемые панели:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Frame1 extends JPanel {
  JSplitPane jSplitPane1 = new JSplitPane(); // Класс
                       // разделяемых панелей
  JScrollPane jScrollPane1 = new JScrollPane();
  JScrollPane jScrollPane2 = new JScrollPane();
  JTextPane jTextPane1 = new JTextPane();
  JTextPane jTextPane2 = new JTextPane();
public Frame1() { try {      jbInit();    } 
                  catch(Exception e) {    } }
public static void main(String s[]) {
   JFrame frame = new JFrame("Панели");
  frame.addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent e) { 
                          System.exit(0); } });
  frame.setContentPane(new Frame1());
  frame.pack();
  frame.setVisible(true);
}
private void jbInit() throws Exception {
// Определение ориентации разделяемых панелей
jSplitPane1.setOrientation(JSplitPane.VERTICAL_SPLIT);
// Размещение левого и правого компонента 
// на разделяемой панели
    jSplitPane1.setLeftComponent(jScrollPane1);
    jSplitPane1.setRightComponent(jScrollPane2);
// Отображение кнопок сворачивания и разворачивания
// сторон разделяемой панели
    jSplitPane1.setOneTouchExpandable(true);
// Задание размера панелей
jScrollPane1.setPreferredSize(new Dimension(300, 60));
jScrollPane2.setPreferredSize(new Dimension(300, 60));
// Добавление разделяемой панели к окну формы
    this.add(jSplitPane1, null);
// Добавление компонентов в контейнеры 
// типа JScrollPane 
    jScrollPane1.getViewport().add(jTextPane1, null);
    jScrollPane2.getViewport().add(jTextPane2, null);
  }
}
Листинг 27.1.
Александр Демьяненко
Александр Демьяненко

Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?

Максим Стогний
Максим Стогний

Добрый день!

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

тип_метода (имя_класса::*имя_метода_указателя)
    (список параметров);
тип_функции (*имя_ функции_указателя)
    (список параметров);

при этом можно было  тип_функции во втором описании заменить на тип_метода? Т.е.:

тип_метода (*имя_ метода_указателя)
    (список параметров);