0

我在我的 Java 应用程序中使用 JWindow 对象来模拟鼠标悬停下拉菜单。当用户将鼠标悬停在 JLabel 上时,该窗口会出现并一直存在,直到鼠标退出标签或新可见的窗口。我的问题是,每次用户执行此操作时,屏幕底部的任务栏中都会出现一个新条目,没有标题或图标,并且在窗口上调用 setVisible(false) 后立即消失。

我尝试切换到未装饰的 JDialog,这解决了我的任务栏问题,但引入了一个新问题。在 JDialog 上调用 setVisible(true) 时,焦点从我的框架中移开。标题栏的颜色发生变化以表明这一点,看起来不专业。

使用未修饰的JFrame,出现上述两个问题

我不希望使用 JInternalFrame,因为这需要完全重新设计我的界面(切换到 JDesktopPane 结构),并且我不需要 JInternalFrame 的任何其他功能。

有任何想法吗?

4

1 回答 1

0

您可以JPopupMenu为此使用 a 。

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);

编辑:使用完整的 JPopupMenu 的替代方法是创建一个Popup引用您的 JPopupMenu Component,这将需要更少的重构;例如

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

除此之外,我认为您的问题没有“快速解决方案”:根据 Javadocs,JWindow 是桌面的一等公民,我想这就是 Solaris 向任务栏添加相应图标的原因。

于 2009-08-27T13:04:50.537 回答