Главная страница
Навигация по странице:

  • Controller ●преобразует ввод запросов пользователя в события●преобразует события в запросы к модели●преобразует события в отображениеView

  • Программирование. Программирование на Java Конспект лекций (ИТМО 2010). Справочник по языку Java и может использоваться как конспект лекционного курса Системы программирования Интернетприложений


    Скачать 0.85 Mb.
    НазваниеСправочник по языку Java и может использоваться как конспект лекционного курса Системы программирования Интернетприложений
    АнкорПрограммирование
    Дата05.08.2022
    Размер0.85 Mb.
    Формат файлаpdf
    Имя файлаПрограммирование на Java Конспект лекций (ИТМО 2010).pdf
    ТипСправочник
    #641226
    страница7 из 9
    1   2   3   4   5   6   7   8   9
    94

    Класс AWTEventMulticaster
    AWTEventMulticaster — класс, реализующий эффективную и потоко- безопасную диспетчеризацию событий для событий AWT.
    Характерное использование класса:
    public NewAWTComponent extends Component {
    ActionListener al = null;
    public synchronized void addActionListener(ActionListener l) {
    al = AWTEventMulticaster.add(al, l);
    }
    public synchronized void removeActionListener(ActionListener l) {
    al = AWTEventMulticaster.remove(al, l);
    }
    public void processEvent(AWTEvent e) {
    ActionListener l = al;
    if (l != null) {
    l.actionPerformed(new ActionEvent(this, 0,
    "action"));
    }
    }
    }
    В Swing для подобного функционала используется
    EventListenerList
    Основные события AWT
    Ссобытие,
    Интерфейс слушателя
    Элемент
    Методы слушателя
    Значение
    ActionEvent,
    ActionListener
    Button actionPerformed нажатие кнопки
    List двойной щелчок
    MenuItem выбор пункта меню
    TextField конец редактирования текста элемента, ENTER
    AdjustmentEvent
    AdjustmentListe ner
    Scrollbar adjustmentValueCha nged реализация прокрутки
    ComponentEvent
    ComponentListen
    Component componentHidden componentMoved перемещение,
    изменение размеров, стал скрытым или
    95
    er componentResized componentShown видимым
    ContainerEvent
    ContainerListen er
    Container componentAdded componentRemoved добавление или удаление элемента в контейнер
    FocusEvent
    FocusListener
    Component focusGained focusLost получение или потеря фокуса
    ItemEvent
    ItemListener
    Checkbox itemStateChanged установка (сброс) флажка
    CheckboxM
    enuItem установка (сброс) флажка у пункта меню
    Choice выбор элемента списка
    List выбор элемента списка
    KeyEvent,
    KeyListener
    Component keyPressed keyReleased keyTyped нажатие или отпускание клавиши
    MouseEvent,
    MouseListener
    MouseMotionList ener
    Component mouseClocked mouseEntered mouseExited mousePressed mouseReleased mouseDragged mouseMoved нажатие или отпускание кнопки мыши, курсор мыши вошел или покинул область элемента, перемещение мыши, перемещение мыши при нажатой кнопки мыши.
    TextEvent,
    TextListener
    TextCompo nent textValueChahged изменения в тексте элемента
    WindowEvent,
    WindowListener
    Window windowActivated windowClosed windowClosing windowDeactivated windowDeiconified windowOpened открытие,
    закрытие, минимизация, восстановление, запрос на обновление окна
    96

    JFC - Java Foundation Classes
    JFC — набор базовых библиотек, предназначенный для построения эффективных графических приложений.
    Состоит из:

    AWT - Содержит компоненты AWT 1.1

    Java 2D - Обеспечивает расширенные возможности создания и обработки изображений.

    Accessibility - Реализует вспомогательные технологии, такие как экранное считывание, обработка речи, и т.д.

    Drag and Drop - Дает возможность взаимодействия приложений на языке
    Java с другими приложениями с использованием механизма Drag and
    Drop.

    Swing - расширяет набор компонентов AWT 1.1 путем добавления легковесных компонентов, реализующих архитектуру MVC, в отличие от компонентов, основанных на использовании экспертов операционной системы.
    Swing
    Набор компонентов Swing - это разработанный на Java платформо- независимый набор компонентов графического пользовательского интерфейса.
    Особенности Swing-компонентов:

    являются "легковесными", т.е. не используют средств операционной системы.

    реализуют архитектуру PL&F (Pluggable Look and Feel), позволяя легко изменять вид и поведение работающего приложения.

    реализуют компонентную технологию JavaBeans, и могут использоваться с любыми визуальными средствами разработки, поддерживающими работу с Beans-компонентами.
    Архитектура MVC и модель Swing
    MVC (Model-View-Controller) - технология создания элементов пользовательского интерфейса (рис. 20), основанная на взаимодействии 3 компонентов:
    97


    Model (модель) - логическое представление данных

    View (представление) - визуальное представление данных

    Controller (контроллер) - обрабатывает входные данные и передает их изменения в модель.
    Рисунок 20. Модель MVC
    В Swing контроллер и представление объединяются в общий компонент под названием делегат (delegate).
    ComponentUI
    ButtonUI
    BasicButtonUI
    java.awt.ItemSelectable
    ButtonModel
    DefaultButtonModel
    Делегат getUI()
    setUI()
    getUI()
    setUI()
    JButton
    JButton getModel()
    setModel()
    getModel()
    setModel()
    Модель
    Рисунок 21.
    Модели и делегаты.
    98
    Model

    определят данные

    оповещает об изменеиях данных
    Model

    определят данные

    оповещает об изменеиях данных
    Controller

    преобразует ввод запросов пользователя в события

    преобразует события в запросы к модели

    преобразует события в отображение
    Controller

    преобразует ввод запросов пользователя в события

    преобразует события в запросы к модели

    преобразует события в отображение
    View

    отображает данные

    обновляет данные

    выбирает данные из модели
    View

    отображает данные

    обновляет данные

    выбирает данные из модели изменение состояние выбор отображения запрос состояния
    Оповещение об изменении модели
    Delegate

    Компоненты Swing в любой момент времени связаны с определенной моделью и с определенным делегатом (рис. 21), специфическими для данного компонента. Модели и делегаты реализуют соответствующие интерфейсы.
    Внешний вид компонент (Look & Feel)
    Так как в архитектуре MVC используется модульный принцип построения компонентов, то легко изменить внешний вид всех компонентов одновременно.
    Существует несколько стандартных и множество сторонних реализаций внешнего вида компонентов.
    //Устанавливает L&F, зависящий от платформы,
    //на которой работает программа try {
    UIManager.setLookAndFeel
    (UIManager.getSystemLookAndFeelClassName());
    } catch (java.lang.ClassNotFoundException e) {}
    //Устанавливает Java L&F
    try {
    UIManager.setLookAndFeel
    (UIManager.getCrossPlatformLookAndFeelClassName());
    } catch (java.lang.ClassNotFoundException e) {}
    Для изменения вида уже созданных и отображенных компонентов используется метод updateUI()
    каждого компонента. Для облегчения этого процесса можно вызвать метод
    SwingUtilities.updateComponentTreeUI()
    Пакеты Swing javax.swing
    Содержит платформонезависимую реализацию компонентов, адаптеров, моделей компонент и интерфейсов для делегатов и моделей javax.swing.border
    Объявляет интерфейс Border и реализующие его классы, для отображения бордюров - визуального обрамления компонентов Swing javax.swing.colorchooser Реализует компонент JColorChooser javax.swing.event
    В дополнение к стандартным типам событий, компоненты Swing могут порождать собственные события, собранные в этом пакете javax.swing.filechooser
    Реализует компонента JFileChooser javax.swing.plaf
    Содержит интерфесы и множество абстрактных
    99
    классов для поддержки PLAF (Pluggable Look-and-
    Feel) компонентов Swing javax.swing.plaf.basic
    Содержит классы (делегаты) интерфейса пользователя, которые реализуют базовое (кодовое имя - baisc) отображение компонентов Swing javax.swing.plaf.metal
    Реализует принятое по умолчанию Java- отображение компонентов Swing (кодовое имя - metal)
    javax.swing.plaf.multi
    Позволяет использовать несколько отображений компонентов Swing в одном приложении.
    javax.swing.plaf.synth
    Содержит классы и интерфейсы для реализации собственного отображения компонент.
    javax.swing.table
    Содержит интерфейсы и классы для поддержки работы с таблицами javax.swing.text
    Содержит классы поддержки работы с текстовыми компонентами javax.swing.text.*
    Содержит классы обработки текста в формате
    HTML и RTF
    javax.swing.tree
    Включает компоненты для JTree javax.swing.undo
    Обеспечивает поддержку undo/redo.
    Составные части окна
    В модели Swing внутренняя часть окна представляет собой корневую панель
    JRootPane
    , которая в свою очередь состоит из прозрачной панели (glass pane) и слоистой панели (layered pane). Прозрачная панель невидима, и используется для отображения подсказок и выплывающих меню. Слоистая панель тоже состоит из двух компонентов - линейки меню и панели содержимого (content
    pane). Компоновка осуществляется на панели содержимого:
    aFrame.getContentPane().setLayout (new FlowLayout());
    aFrame.getContentPane().add(aComponent);
    При помещении компонента на слоистую панель можно указывать номер слоя, на который следует поместить компонент:
    layeredPane.add (component, new Integer(5));
    Класс JComponent
    Является базовым (рис. 22) классом почти для всех Swing-компонентов пользовательского интерфейса
    (J-классов).
    Swing-компоненты
    100
    пользовательского интерфейса наследуют от класса JComponent следующие свойства:

    реализация PL&F

    расширяемость

    обработка событий клавиатуры

    прорисовка границ

    масштабируемость

    отображение подсказок

    автопрокрутка

    возможность отладки графики

    поддержка вспомогательных технологий

    многоязыковая поддержка
    Класс JPanel
    Является легковесным объектом, представляющим панель со встроенной поддержкой двойной буферизации.
    Интерфейс Icon и класс ImageIcon
    Интерфейс
    Icon описывает изображения фиксированного размера. Класс
    ImageIcon реализует интерфейс
    Icon для объекта типа java.awt.Image.
    public interface Icon {
    void paintIcon(Component c, Graphics g, int x, int y);
    int getIconWidth();
    int getIconHeight();
    }
    Отличия
    ImageIcon от java.awt.Image
    :

    не требует монитора при загрузке

    является сериализуемым
    Если объект типа
    IconImage использует динамически меняющееся изображение, то для его отображения необходимо связать наблюдатель
    ImageObserver с изображением
    IconImage
    . Обычно наблюдателем является тот компонент, на котором изображается
    ImageIcon
    IconImage picture = new IconImage("pic.gif");
    Jbutton button = new Jbutton(picture);
    picture.setImageObserver(button);
    101
    Рисунок 22. JComponent
    java.lang.Object java.awt.Component java.awt.Container
    JComponent

    Класс JLabel
    Реализует однострочную текстовую метку с дополнительными возможностями по сравнению с java.awt.Label
    , такими как:

    Наличие изображения

    Возможность изменения взаимного расположения текста и изображения
    Пример использования:
    public class LabelPanel extends JPanel {
    public LabelPanel() {
    // Создать и добавить JLabel
    JLabel plainLabel = new JLabel("Plain Small Label");
    add(plainLabel);
    // Создать вторую JLabel
    JLabel fancyLabel = new JLabel("Fancy Big Label");
    // Реализовать объект Font для использования на метке
    Font fancyFont = new Font("Serif",
    Font.BOLD | Font.ITALIC, 32);
    // Связать шрифт и метку fancyLabel.setFont(fancyFont);
    // Создать изображение Icon
    Icon tigerIcon = new ImageIcon("SmallTiger.gif");
    // Поместить изображение на метку fancyLabel.setIcon(tigerIcon);
    // Поместить текст справа от изображения fancyLabel.setHorizontalAlignment(JLabel.RIGHT);
    // Поместить на панель add(fancyLabel);
    }
    }
    Класс JButton
    Является реализацией кнопки с возможностью включения изображения. Фон кнопки должен совпадать с фоном контейнера, в котором она находится.
    public class ButtonPanel extends JPanel {
    public ButtonPanel() {
    Icon tigerIcon = new ImageIcon("SmallTiger.gif");
    JButton myButton = new JButton("Tiger", tigerIcon);
    myButton.setBackground (SystemColor.control);
    add(myButton);
    }
    }
    102

    Класс JCheckBox
    Соответствует объекту CheckBox, не входящему в группу. Можно задавать собственные изображения для выбранного и невыбранного состояния.
    public class CheckboxPanel extends JPanel {
    Icon unchecked = new ToggleIcon (false);
    Icon checked = new ToggleIcon (true);
    public CheckboxPanel() {
    // Установить компоновку для JPanel setLayout(new GridLayout(2, 1));
    // Создать элемент выбора с состоянием true
    JCheckBox cb1 = new JCheckBox("Choose Me", true);
    cb1.setIcon(unchecked);
    cb1.setSelectedIcon(checked);
    // Создать элемент выбора с состоянием false
    JCheckBox cb2 = new JCheckBox("No Choose Me", false);
    cb2.setIcon(unchecked);
    cb2.setSelectedIcon(checked);
    add(cb1); add(cb2);
    }
    class ToggleIcon implements Icon {
    boolean state;
    public ToggleIcon (boolean s) {
    state = s;
    }
    public void paintIcon (Component c, Graphics g, int x, int y) {
    int width = getIconWidth();
    int height = getIconHeight();
    g.setColor (Color.black);
    if (state)
    g.fillOval (x, y, width, height);
    else g.drawOval (x, y, width, height);
    }
    public int getIconWidth() {
    return 10;
    }
    public int getIconHeight() { return 10;
    }
    }
    }
    103

    Класс JRadioButton
    Соответствует объекту
    CheckBox
    , входящему в группу, так, что в данный момент времени может быть выбран только один из них. Группа объектов задается с помощью
    ButtonGroup public class RadioButtonPanel extends JPanel {
    public RadioButtonPanel() {
    // Установить компоновку GridLayout setLayout(new GridLayout(4,1));
    // Объявление переключателя
    JRadioButton radioButton;
    // Реализация группы для переключателей
    ButtonGroup rbg = new ButtonGroup();
    // Создание метки для группы
    JLabel label = new JLabel("Annual Salary: ");
    label.setFont(new Font("SansSerif", Font.BOLD, 14));
    add(label);
    // Добавить новый переключатель radioButton = new JRadioButton("$45,000");
    add (radioButton);
    // установить "горячую" клавишу radioButton.setKeyAccelerator ('4');
    // Добавить переключатель в группу rbg.add (radioButton);
    // Установить данный переключатель по умолчанию radioButton.setSelected(true);
    // Установить еще 2 переключателя radioButton = new JRadioButton("$60,000");
    radioButton.setKeyAccelerator ('6');
    add (radioButton);
    rbg.add (radioButton);
    radioButton = new JRadioButton("$75,000");
    radioButton.setKeyAccelerator ('7');
    add (radioButton);
    rbg.add (radioButton);
    }
    }
    Класс JToggleButton
    Является суперклассом для
    JCheckBox и
    JRadioButton
    . Кнопка остается в нажатом состоянии, и возвращается в исходное состояние при повторном нажатии.
    public class ToggleButtonPanel extends JPanel {
    public ToggleButtonPanel() {
    // Установить компоновку GridLayout
    104
    setLayout(new GridLayout(4,1, 10, 10));
    add (new JToggleButton ("Fe"));
    add (new JToggleButton ("Fi"));
    add (new JToggleButton ("Fo"));
    add (new JToggleButton ("Fum"));
    }
    }
    Класс JTextComponent
    Класс обеспечивает основные функции простого текстового редактора.
    Основными подклассами
    JTextComponent являются
    JTextField,
    JTextArea, JTextPane
    JTextField tf = new JTextField();
    JTextArea ta = new JTextArea();
    tf.setText("TextField");
    ta.setText("JTextArea\n Allows Multiple Lines");
    add(tf);add(ta);
    JTextPane tp = new JTextPane();
    MutableAttributeSet attr = new SimpleAttributeSet();
    StyleConstants.setFontFamily(attr, "Serif");
    StyleConstants.setFontSize(attr, 18);
    StyleConstants.setBold(attr, true);
    tp.setCharacterAttributes(attr, false);
    add(tp);
    Класс JScrollBar
    Реализует полосу прокрутки public class ScrollbarPanel extends JPanel {
    public ScrollbarPanel() {
    setLayout(new BorderLayout());
    JScrollBar sb1 = new JScrollBar (JScrollBar.VERTICAL, 0, 5, 0, 100);
    add(sb1, BorderLayout.EAST);
    JScrollBar sb2 = new JScrollBar (JScrollBar.HORIZONTAL, 0, 5, 0, 100);
    add(sb2, BorderLayout.SOUTH);
    }
    }
    Класс JSlider
    Реализует полосу прокрутки с возможностью разметки.
    public class SliderPanel extends JPanel {
    105
    public SliderPanel() {
    setBackground (Color.lightGray);
    setLayout(new BorderLayout());
    setBackground (Color.lightGray);
    JSlider s1 = new JSlider (JSlider.VERTICAL, 0, 100, 50);
    s1.setPaintTicks(true);
    s1.setMajorTickSpacing(10);
    s1.setMinorTickSpacing(2);
    add(s1, BorderLayout.EAST);
    JSlider s2 = new JSlider (JSlider.VERTICAL, 0, 100, 50);
    s2.setPaintTicks(true);
    s2.setMinorTickSpacing(5);
    add(s2, BorderLayout.WEST);
    JSlider s3 = new JSlider (JSlider.HORIZONTAL, 0, 100,
    50);
    s3.setPaintTicks(true);
    s3.setMajorTickSpacing(10);
    add(s3, BorderLayout.SOUTH);
    JSlider s4 = new JSlider (JSlider.HORIZONTAL, 0, 100,
    50);
    s4.setBorder(LineBorder.createBlackLineBorder());
    add(s4, BorderLayout.NORTH);
    }
    }
    Класс JProgressBar
    Данный класс позволяет отображать линейку прогресса, показывая ход выполнения операции. Использование JProgressBar:
    /Инициализация компонента
    JProgressBar progressBar = new JProgressBar();
    progressBar.setMinimum(0);
    progressBar.setMaximum(numberSubOperations);
    //Выполнение операции progressBar.setValue(progressBar.getMinimum());
    for (int i = 0; i < numberSubOperations; i++) {
    // Установка значения progressBar.setValue(i);
    }
    Класс JComboBox
    Представляет собой выпадающий список с возможностью выбора и редактирования.
    public class ComboPanel extends JPanel {
    String choices[] = {"Mercury", "Venus", "Earth", "Mars",
    106

    "Saturn", "Jupiter", "Uranus","Neptune","Pluto"};
    public ComboPanel() {
    JComboBox combo1 = new JComboBox();
    JComboBox combo2 = new JComboBox();
    for (int i=0;i combo1.addItem (choices[i]);
    combo2.addItem (choices[i]);
    }
    combo2.setEditable(true);
    combo2.setSelectedItem("X");
    combo2.setMaximumRowCount(4);
    add(combo1);
    add(combo2);
    }
    }
    Класс JList
    Реализует список элементов.
    public class ListPanel extends JPanel {
    String label [] = {"Cranberry", "Orange", "Banana",
    "Kiwi", "Blueberry", "Pomegranate", "Apple", "Pear",
    "Watermelon", "Raspberry", "Snozberry"
    };
    public ListPanel() {
    setLayout (new BorderLayout());
    JList list = new JList(label);
    ScrollPane pane = new ScrollPane();
    pane.add (list);
    add(pane, BorderLayout.CENTER);
    }
    }
    Класс JScrollPane
    Реализует область прокрутки.
    public class ScrollPanel extends JPanel {
    public ScrollPanel() {
    setLayout(new BorderLayout());
    Icon bigTiger = new ImageIcon("BigTiger.gif");
    JLabel tigerLabel = new JLabel(bigTiger);
    JScrollPane scrollPane = new JScrollPane();
    scrollPane.getViewport().add(tigerLabel);
    add(scrollPane, BorderLayout.CENTER);
    1   2   3   4   5   6   7   8   9


    написать администратору сайта