Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Пример 2.26.

Читайте также:
  1. V. Примерный образец теста, применяемого для промежуточной аттестации
  2. Web-контейнер, Servlet, JSP. Структура, назначение и пример сервлета или JSP.
  3. А вот чрезмерное употребление алкоголя действительно вызывает гинекомастию. Примерно четверо из 10 хронических алкоголиков имеют это заболевание в той или иной стадии развития.
  4. А. Здравомыслов.Примерно два года тому назад.
  5. Ая основа – Хаджури не видит разницы между нововведенцем, призывающим к своему нововведению, и не призывающим, и пример в этом он взял с Махмуда Хаддада.
  6. Будьте хорошим примером для своих детей
  7. Быть примером
  8. В наших примерах мы ни разу не рассматривали конструкторы классов, поэтому при создании экземпляров наших классов вызывался конструктор класса object.
  9. В приведенном примере нарушение синтезов пространственного гнозиса и обусловливает ряд следствий, что можно представить схематично.
  10. В только что приведенном вами примере с под­брасыванием монеты компьютерное моделирование

 

package AppletMenuBar.java;import java.awt.*;import java.awt.event.*;import java.util.Vector; public class AppletMenuBar extends Panel { // Содержимое полосы меню Vector labels = new Vector(); Vector menus = new Vector(); // Properties Insets margins = new Insets(3, 10, 3, 10); // top, left, bottom, right int spacing = 10; // Промежуток между метками меню Color highlightColor; // Цвет метки при помещении на нее мыши // содержимое boolean remeasure = true; // подсчет длины надписей int[] widths; // ширина надписи int[] startPositions; // начало надписи int ascent, descent; // размер шрифтов Dimension prefsize = new Dimension(); // желательные размеры int highlightedItem = -1; // на каком элементе находится указатель /** * Создаем компонент, симулирующий полосу меню за счет отображения * заданных меток. При щелчке на метке, открывается * PopupMenu, заданное массивом. * Элементами массива могут быть статические объекты PopupMenu или * динамические объекты PopupMenuFactory. */ public AppletMenuBar() { // События мыши enableEvents(AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK); } /** Добавляем раскрывающееся меню */ public void addMenu(String label, PopupMenu menu) { insertMenu(label, menu, -1); } /** Размещаем в полосу раскрывающееся меню */ public void insertMenu(String label, PopupMenu menu, int index) { if (index < 0) index += labels.size()+1; // Место вставки this.add(menu); // меню labels.insertElementAt(label, index); // запомнить метку menus.insertElementAt(menu, index); // запомнить меню remeasure = true; // уточнение размеров invalidate(); // перекомпоновка контейнера } /** методы доступа к свойству margins */ public Insets getMargins() { return (Insets) margins.clone(); } public void setMargins(Insets margins) { this.margins = margins; remeasure = true; invalidate(); } /** методы доступа к свойству spacing */ public int getSpacing() { return spacing; } public void setSpacing(int spacing) { if (this.spacing!= spacing) { this.spacing = spacing; remeasure = true; invalidate(); } } /** методы доступа к свойству highlightColor */ public Color getHighlightColor() { if (highlightColor == null) return getForeground(); else return highlightColor; } public void setHighlightColor(Color c) { if (highlightColor!= c) { highlightColor = c; repaint(); } } /** замещаем метод setFont() для пересчета размеров шрифта */ public void setFont(Font f) { super.setFont(f); remeasure = true; invalidate(); } /** замещаем метод установки цвета с одновременной прорисовкой */ public void setForeground(Color c) { super.setForeground(c); repaint(); } public void setBackground(Color c) { super.setBackground(c); repaint(); } /** * Метод перерисовки компонента. * При реализации компонента Swing было бы необходимо * замещать метод paintComponent() **/ public void paint(Graphics g) { if (remeasure) measure(); // пересчет размеров // Определение координаты Y рисунка Dimension size = getSize(); int baseline = size.height - margins.bottom - descent; // Установка шрифта g.setFont(getFont()); // цикл по меткам int nummenus = labels.size(); for(int i = 0; i < nummenus; i++) { // Установка цвета рисования. Выделение текущего элемента if ((i == highlightedItem) && (highlightColor!= null)) g.setColor(getHighlightColor()); else g.setColor(getForeground()); // Рисуем метку меню в определенном методом measure() месте g.drawString((String)labels.elementAt(i), startPositions[i], baseline); } // подчеркиваем меню линией. Color bg = getBackground(); g.setColor(bg.darker()); g.drawLine(0, size.height-2, size.width, size.height-2); g.setColor(bg.brighter()); g.drawLine(0, size.height-1, size.width, size.height-1); } /** Вызывается при генерации события мыши */ protected void processMouseEvent(MouseEvent e) { int type = e.getID(); // тип события int item = findItemAt(e.getX()); // в каком месте метки if (type == MouseEvent.MOUSE_PRESSED) { // при нажатии кнопки раскрывается меню if (item == -1) return; Dimension size = getSize(); PopupMenu pm = (PopupMenu) menus.elementAt(item); if (pm!= null) pm.show(this, startPositions[item]-3, size.height); } else if (type == MouseEvent.MOUSE_EXITED) { // при уходе указателя снимается выделение цветом if (highlightedItem!= -1) { highlightedItem = -1; if (highlightColor!= null) repaint(); } } else if ((type == MouseEvent.MOUSE_MOVED) || (type == MouseEvent.MOUSE_ENTERED)) { // При передвижении мыши меняем выделенную метку if (item!= highlightedItem) { highlightedItem = item; if (highlightColor!= null) repaint(); } } } /** метод вызывается при перемещении мыши */ protected void processMouseMotionEvent(MouseEvent e) { processMouseEvent(e); } /** метод, преобразующий координату X в индекс метки меню */ protected int findItemAt(int x) { // поиск... int nummenus = labels.size(); int halfspace = spacing/2-1; int i; for(i = nummenus-1; i >= 0; i--) { if ((x >= startPositions[i]-halfspace) && (x <= startPositions[i]+widths[i]+halfspace)) break; } return i; } /** * метод вычисления положений меток для прорисовки меню **/ protected void measure() { // информация о шрифте FontMetrics fm = this.getFontMetrics(getFont()); // запомнить размер шрифта ascent = fm.getAscent(); descent = fm.getDescent(); // создание массивов для хранения размеров и положений int nummenus = labels.size(); widths = new int[nummenus]; startPositions = new int[nummenus]; // измерение строк меток // вычисление положения каждой из них int pos = margins.left; for(int i = 0; i < nummenus; i++) { startPositions[i] = pos; String label = (String)labels.elementAt(i); widths[i] = fm.stringWidth(label); pos += widths[i] + spacing; } // предпочтительный размер prefsize.width = pos - spacing + margins.right; prefsize.height = ascent + descent + margins.top + margins.bottom; // конец расчетов remeasure = false; } /** * методы, сообщающие контейнеру размеры полосы меню * **/ public Dimension getMinimumSize() { return getPreferredSize(); } public Dimension getPreferredSize() { if (remeasure) measure(); return prefsize; } /** @deprecated для совместимости с Java 1.0 */ public Dimension minimumSize() { return getPreferredSize(); } /** @deprecated для совместимости с Java 1.0 */ public Dimension preferredSize() { return getPreferredSize(); } /** * Метод для создания основного компонента AWT. **/ public void addNotify() { super.addNotify(); measure(); } /** метод запрета фокуса ввода */ public boolean isFocusTraversable() { return false; }}

 




Дата добавления: 2015-09-11; просмотров: 24 | Поможем написать вашу работу | Нарушение авторских прав

Пример 2.1. | Пример 2.2. | Глава 2.2. Графические интерфейсы пользователя в Java | Компоненты. | Пример 2.8. | Пример 2.15. | Пример 2.16. | Пример 2.18. | Пример 2.19. | Пример 2.20. |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав