2009-08-27 7 views
0

Я использую объект JWindow в своем приложении Java для имитации выпадающего меню мыши. Когда пользователь перебирает JLabel, окно появляется и остается до тех пор, пока мышь не выйдет ни на ярлык, ни на вновь видимое окно. Моя проблема в том, что каждый раз, когда пользователь выполняет это действие, появляется новая запись в панели задач в нижней части экрана без названия или значка и исчезает, как только в окне вызывается setVisible (false).Solaris 5.10: Как скрыть кнопку JWindow на панели задач?

Я попытался переключиться на неразделенный JDialog, и это исправило проблему с моей задачей, но представило новую. Когда setVisible (true) вызывается в JDialog, фокус убирается из моего кадра. Цвет строки заголовка изменится, чтобы указать на это, что выглядит непрофессионально.

Использование непараметризованный JFrame, оба вышеуказанных проблем произошли

Я не хочу использовать JInternalFrame, как это потребовало бы полный редизайн моего интерфейса (переключение на структуру JDesktopPane), и я не требую любая другая функциональность JInternalFrame.

Любые идеи?

ответ

0

Для этого можно использовать JPopupMenu.

popupMenu = new JPopupMenu(); 

Action showPopupAction = new AbstractAction("Show Popup") { 
    public void actionPerformed(ActionEvent e) { 
    AbstractButton btn = (AbstractButton)e.getSource(); 
    Point buttonXY = btn.getLocationOnScreen(); 
    popupMenu.setLocation((int) buttonXY.getX(), ((int) buttonXY.getY()) + btn.getHeight() + 2); 
    popupMenu.setVisible(true); 
    } 
}; 

JButton btn = new JButton(showPopupAction); 

EDIT: альтернатива использованию полного JPopupMenu является создание Popup, который ссылается на ваш Component, что потребует меньше рефакторинга; например

Component myMnu = ... 
Popup popup = new Popup(null, myMnu, 100, 100); 
popup.show(); 

Кроме того, я не думаю, что есть «быстрое решение» вашей проблемы: Пер с Javadocs, JWindow является первым классом гражданина на рабочем столе, который я представляю почему Solaris добавляет соответствующий значок на панели задач.

+0

Спасибо, похоже, стоит посмотреть. Тем не менее, я уже выполнил всю работу по всплывающему поведению и просто хочу решить небольшую проблему в исходном вопросе (если это возможно). Мне нужно получить выпуск для этого приложения на следующий день или два, и сейчас нужно отложить рефакторинг. – 2009-08-27 13:22:41

+0

@Dan: Посмотрите мои последние изменения. Использование Popup напрямую позволит вам сэкономить некоторое рефакторинг, поскольку вы можете просто «ввести» ваш JWindow в Popup. Вам все равно нужно указывать, когда/где будет всплывать всплывающее окно, но это довольно просто (согласно моему первоначальному примеру). – Adamski

Смежные вопросы