Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

Help tips в Swing

Перевод на русский © Сергей Миссан, 2000
Оригинал статьи опубликован на сайте Javable.com

Java Q&A

Возможно ли сделать поддержку help tips для меню в Swing?

В компьютерном мире достаточно распространены приложения, показывающие краткую справку (help tip) в строке статуса, когда пользователь выбирает один из элементов меню. Я был удивлен тем, что набор компонентов меню в Swing не поддерживает такую возможность. Есть ли способ создать такую функциональность, не создавая подкласс одного из огромных классов Swing? Мне удалось заставить работать таким образом неизмененный класс JMenuItems:

myMenu.add(new JMenuItem("Save As..."));

создавая подкласс JMenuItems и перекрывая метод menuSelectionChanged(). К сожалению, так нельзя поступить ни с элементами меню, созданными с помощью action (которая возвращает чистый JMenuItem), ни с JCheckBoxMenuItems или JRadioButtonMenuItems.

Я использую JDK 1.2.2 FCS.

Эксперты Java Q&A рекомендуют использовать делегирование к базовому adapter class вместо наследования, для того, чтобы получить требуемую функциональность.

Adapter class возьмет JMenuItem, строку (String) со справочной информацией и JLabel, как строку статуса для отбражения сообщения. В момент выбора элемента меню adapter class отобразит соответствующий текст в строке статуса.

Сложная часть этой задачи: как обнаружить, какое событие мы должны отслеживать? Оказывается, ChangeEvent создается, когда активируется или деактивируется элемент меню. В Java для этого используется термин arming элемента меню. Таким образом, мы можем написать следующий adapter class:

class MenuHelpTextAdapter
        implements ChangeListener
{
 private JMenuItem menuItem;
 private String helpText;
 private JLabel statusBar;

public MenuHelpTextAdapter(
         JMenuItem menuItem,
         String helpText,
         JLabel statusBar)
{
 this.menuItem = menuItem;
 this.helpText = helpText;
 this.statusBar = statusBar;
 menuItem.addChangeListener(this);
}

public void stateChanged(ChangeEvent evt)
{
 if (menuItem.isArmed())
  statusBar.setText(helpText);
 else
  statusBar.setText(" ");
 }
}

Код, который создает adapterы для элементов меню достаточно прост:

new MenuHelpTextAdapter(
     item1, "
     Help text for item 1",
     statusBar);

new MenuHelpTextAdapter(
     item2,
     "Item 2 info",
     statusBar);

Используя этот adapter, как внутренний класс в данном случае, мы можем создать полную программу:

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;

public class StatusBarTest
{
JLabel statusBar;
JMenuItem item1;
JMenuItem item2;

private void init()
{
 JFrame frame =
    new JFrame("Status Bar Test");

 JMenuBar menuBar = new JMenuBar();
 frame.setJMenuBar(menuBar);
 JMenu fileMenu = new JMenu("File");
  menuBar.add(fileMenu);

 item1 = new JMenuItem("Item 1");
 item2 = new JMenuItem("Item 2");

 fileMenu.add(item1);
 fileMenu.add(item2);

  Container contentPane =
   frame.getContentPane();
  contentPane.setLayout(new BorderLayout());
  contentPane.add(
   "Center", new JButton(
     "Main application area"));

  statusBar = new JLabel(" ");

  contentPane.add("South", statusBar);

new MenuHelpTextAdapter(
   item1, "Help text for item 1", statusBar);
new MenuHelpTextAdapter(
   item2, "Item 2 info", statusBar);

frame.setSize(400,400);
frame.setVisible(true);
}

public static void main(String[] args)
{
StatusBarTest t = new StatusBarTest();
t.init();
}

class MenuHelpTextAdapter
  implements ChangeListener
{
private JMenuItem menuItem;
private String helpText;
private JLabel statusBar;

public MenuHelpTextAdapter(
        JMenuItem menuItem,
        String helpText,
        JLabel statusBar)
{
 this.menuItem = menuItem;
 this.helpText = helpText;
 this.statusBar = statusBar;
 menuItem.addChangeListener(this);
}

public void stateChanged
            (ChangeEvent evt)
{
 if (menuItem.isArmed())
  statusBar.setText(helpText);
 else
  statusBar.setText(" ");
 }
}
}

Об авторе

Random Walk Computing это наибольшая консалтинговая фирма в Нью Йорке, специализирующаяся на Java/CORBA решениях для предприятий. Известные своим выдающимся знанием Java, консультанты Random Walk публикуются и выступают на самых престижных форумах мира. Для связи с Random Walk используйте javaqa@javaworld.com.

Reprinted with permission from the March 2000 edition of JavaWorld magazine.
Copyright © ITworld.com, Inc., an IDG Communications company.
View the original article at: http://www.javaworld.com/javaworld/javatips/jw-javatip88_p.html

Назад | Содержание | Вперед

 

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...