Tag: jpopupmenu

JFrame中的JPopupMenu使用AWTUtilities.setWindowOpaque(window,false),使用合成器L&F不显示

这个让我很困惑。 基本上我正在使用定制的Synth L&F使用透明形状的窗口开发多窗口应用程序。 应用程序的JDialog部分从父框架调用JFrame / JDialog组件。 在这些组件中,我有弹出菜单和combobox,问题是一些使用应用程序的人会遇到调用时没有出现的弹出菜单。 没有例外,代码执行正常,包括弹出菜单’show’方法。 除了在Mac OSX上似乎没有问题之外,我已经尝试将这个问题归结为操作系统细节。 像我这样的一些Windows用户没有遇到任何问题,其他人做…. 此外,我已经找到了设置窗口不透明度的有问题的代码行: AWTUtilities.setWindowOpaque(window, false) 如果我删除此LOC,则弹出窗口显示正常。 另外用以下内容替换此LOC: window.setBackground(new Color(0.0f, 0.0f, 0.0f, 0.0f)); 产生同样的问题。 另一件事是,如果我使用默认的L&F弹出窗口渲染正常。 只是为了确认JFrame和JDialog组件的问题是相同的,并且只是想知道是否有其他人遇到过这个问题或者可能指出我可能的原因。 干杯 测试源重现: import com.sun.awt.AWTUtilities; import javax.swing.*; import javax.swing.plaf.synth.SynthLookAndFeel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestFrame extends JFrame{ public TestFrame(){ super.setTitle(“Test Frame”); JButton btnDialog = new JButton(“Open Dialog”); btnDialog.addActionListener(new ActionListener() […]

系统托盘弹出菜单项与图像(IconItem的图标)

我阅读了系统托盘教程和类似的Stack Overflow问题,但无法找到一个好的答案。 我想在J2SE应用程序中添加一个图像到菜单项。 在教程中,使用了MenuItem ,但我找不到如何在SystemTray弹出窗口中向菜单项添加图标。 如果使用JMenuItem ,可以轻松地将图标放置在MenuItems ,但是有MenuItem 。 如何将图像添加到系统托盘popmenu? 更新到此处,我想在弹出菜单中向MenuItem添加图像(而不是SystemTray。)

JMenu在Windows7 LAF Java7中使用focuslost事件

如果在单击另一个组件时仍然打开弹出菜单,则该组件不会获取该事件,因为它可能被弹出窗口消耗。 这通常发生在所有JPopupmenus上。 这只发生在带有Windows LAF(Windows7)的Java 7中。 有解决方法吗? 这是一个已知的bug吗? import javax.swing.*; import java.awt.event.*; public class Test { public static void main(String[] s) throws Exception { String lookAnfFeelClassName = UIManager.getSystemLookAndFeelClassName(); UIManager.setLookAndFeel(lookAnfFeelClassName); JMenu menu = new JMenu(“TEST Menu”); JMenuItem menuItem = new JMenuItem(“Menu Item 1”); JMenuBar menuBar = new JMenuBar(); menu.add(menuItem); menuBar.add(menu); final JButton b = new JButton(“Test”); b.setBounds(5, […]

JPopupMenu行为

我在下面准备了一个小测试用例。 我的问题是当我右键单击窗口时。 JPopupMenu出现但如果我点击JWindow菜单外的任何地方都不会消失。 我必须单击窗口上的某个位置来摆脱它,这不是预期的行为。 编辑:在阅读akf的答案后,我切换到JFrame,当帧处于焦点并且弹出菜单显示时,当您单击另一个窗口时它会消失。 但如果窗口没有焦点,你单击某处菜单不会消失。 import javax.swing.*; import java.awt.*; import java.awt.event.*; class test { static class window extends JWindow implements MouseListener, MouseMotionListener{ JPopupMenu popMenu; JPanel panel = new JPanel(); Point location; MouseEvent pressed; public window(){ addMouseListener( this ); addMouseMotionListener( this ); JLabel label = new JLabel(“JWindow”, JLabel.CENTER); initPopMenu(); add(label); setVisible(true); setAlwaysOnTop(true); setLocationRelativeTo(null); pack(); } […]

Java JPopupMenu bug

好像我在Java中发现了一个错误: 我需要创建一个透明背景的JFrame ,现在我需要为一些用户操作显示JPopupMenu 。 当JPopupMenu完全位于JFrame内时,它工作正常。 但是当JPopupMenu部分位于JFrame之外时,没有任何项目可见。 SSCCE: public class PopupTest { public static void main(String[] a) { final JFrame frame = new JFrame(); frame.setSize(500, 500); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JPanel panel = new JPanel(new BorderLayout()); panel.setBorder(BorderFactory.createLineBorder(Color.RED)); panel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON3) { JPopupMenu menu = new JPopupMenu(); for (int […]

找到已调用弹出菜单的JTable行

我有一个JTable和一个特定于每一行的弹出菜单。 我想计算用户右键单击鼠标(Windows L&F)以显示弹出菜单的行。 我为表创建一个MouseListener,因此它在单击时获取MouseEvent,并在正确的位置显示弹出菜单。 但是当用户从弹出菜单中选择一个项目时,我无法确定一种方法来确定用户在第一个位置右键单击的行。 弹出菜单调用的事件不再具有右键单击发生的x,y坐标。 我已经看过获取弹出窗口的位置,但这属于框架,而不是表格,所以它和它的父母都没有正确的x,y值。 我通过inheritanceJPopupMenu并设置我想要它在MouseListener中的x和y值来解决它。 但在我看来,对于想要在JTable上放置弹出菜单的人来说,这将是一个普遍的问题,我想知道我错过了什么。 有没有更简单的方法来做到这一点,尤其是不涉及子类化JPopupMenu的方法?

如何在JPopupMenu中获得焦点

我是一名经验丰富的Java程序员,但是一个Swing新手所以请耐心等待。 我希望有一个具有键盘焦点的JPopupWindow。 我想响应箭头键,转义(关闭菜单)和回车(调用项目)。 我必须在菜单中添加一个KeyListener并自己编写所有这些,或者是否有某种“模式”我可以设置来激活这种行为,这似乎应该是标准的。 JPopupMenus上的标准Swing教程部分仅讲述助记符和加速器。 我并不特别想要那些。 很难相信这完全违背了JPopupMenu的细节。 什么是获得我想要实现的东西的最佳方法?

从打开的JComboBox打开JPopupMenu

我想改变combobox的OOTB行为,在点击鼠标右键(点击哪个按钮很容易,这不是重点)后冻结它,并打开JPopupMenu而不是选择那个条目。 那么 – 如何禁用在给定条件下选择条目并使用自定义行为呢? 我尝试将鼠标监听器添加到所有combobox组件中,但没有成功 – 没有任何改变 import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JComboBox; import javax.swing.JFrame; public class MainClass { public static void main(final String args[]) { final String labels[] = { “A”, “B”, “C”, “D”, “E” }; JFrame frame = new JFrame(“Selecting JComboBox”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JComboBox comboBox = new JComboBox(labels); frame.add(comboBox, BorderLayout.SOUTH); […]

从JButton显示/隐藏JPopupMenu; FocusListener无法正常工作?

我需要一个带有附加下拉样式菜单的JButton。 所以我拿了一个JPopupMenu并以你在下面的代码中看到的方式将它附加到JButton。 它需要做的是: 单击时显示弹出窗口 如果再次点击则隐藏它 如果在弹出窗口中选择了某个项目,则隐藏它 如果用户点击屏幕中的其他位置,则隐藏它 这四件事有效,但由于我正在使用的布尔标志,如果用户点击其他地方或选择一个项目,我必须在按钮上再次单击两次才会再次显示。 这就是为什么我试图添加一个FocusListener(绝对没有响应)来修复它并在这些情况下将标志设置为false。 编辑:最后一次尝试回答post…… 以下是监听器:(它在一个扩展JButton的类中,所以第二个监听器在JButton上。) // Show popup on left click. menu.addFocusListener(new FocusListener() { @Override public void focusLost(FocusEvent e) { System.out.println(“LOST FOCUS”); isShowingPopup = false; } @Override public void focusGained(FocusEvent e) { System.out.println(“GAINED FOCUS”); } }); addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println(“isShowingPopup: ” + isShowingPopup); […]

如何让JPopupMenu透明化?

我想自定义JPopupMenu的外观,所以我在i上创建了一个扩展JPopupMenu类的自定义类覆盖了paintComponent方法,就像我需要自定义的任何组件一样。 public class CustomPopupMenu extends JPopupMenu { @Override public paintComponent(Graphics g) { //custom draw } } 我知道的唯一问题是我无法使JPopupMenu透明化。 我虽然setOpaque(false)就够了,我错了。 如何让JPopupMenu透明化?