我在Java应用程序中使用JWindow对象来模拟鼠标悬停下拉菜单。当用户将鼠标悬停在JLabel上时,窗口会出现并保持不变,直到鼠标退出标签或新显示的窗口。我的问题是,每次用户执行此操作时,屏幕底部的任务栏中都会出现一个新条目,没有标题或图标,并且只要在窗口上调用setVisible(false)就会消失。
我尝试切换到一个未修饰的JDialog,这解决了我的任务栏问题,但引入了一个新问题。当在JDialog上调用setVisible(true)时,焦点将从我的框架中移除。标题栏的颜色会发生变化,表明这看起来很不专业。
使用未修饰的JFrame,发生了上述两个问题
我不希望使用JInternalFrame,因为需要完全重新设计我的界面(切换到JDesktopPane结构),而且我不需要JInternalFrame的任何其他功能。
有什么想法吗?
答案 0 :(得分: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);
编辑:使用完整的JPopupMenu的另一种方法是创建引用您的Popup
的Component
,这将需要更少的重构; e.g。
Component myMnu = ...
Popup popup = new Popup(null, myMnu, 100, 100);
popup.show();
除此之外我不认为你的问题有“快速修复”:根据Javadocs,JWindow是桌面的一等公民,我想这就是Solaris为这个任务添加相应图标的原因杆