相关疑难解决方法(0)

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

我需要一个带有附加下拉样式菜单的JButton.所以我拿了一个JPopupMenu并以你在下面的代码中看到的方式将它附加到JButton.它需要做的是:

  • 单击时显示弹出窗口
  • 如果再次点击则隐藏它
  • 如果在弹出窗口中选择了某个项目,则隐藏它
  • 如果用户点击屏幕中的其他位置,则隐藏它

这4周工作上的事情,但我使用,因为布尔标志,如果用户点击了其他位置或选择一个项目,我必须在按钮上点击两次才能再次之前.这就是为什么我尝试添加一个FocusListener(绝对没有响应)来修复它并在这些情况下将标志设置为false.

编辑:最后一次尝试回答帖子......

以下是监听器:(它在一个扩展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);
  if (isShowingPopup) {
   isShowingPopup = false;
  } else {
   Component c = (Component) e.getSource();
   menu.show(c, -1, c.getHeight());
   isShowingPopup = true;
  }
 }
});
Run Code Online (Sandbox Code Playgroud)

我现在已经用这个太久了.如果有人能给我一个关于这个问题的线索,那就太好了!

谢谢!

码:

public class …
Run Code Online (Sandbox Code Playgroud)

java swing jbutton jpopupmenu

8
推荐指数
1
解决办法
2万
查看次数

标签 统计

java ×1

jbutton ×1

jpopupmenu ×1

swing ×1