首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当ALT按下时,防止JPopupMenu关闭

当ALT按下时,防止JPopupMenu关闭
EN

Stack Overflow用户
提问于 2018-05-15 09:43:29
回答 1查看 120关注 0票数 0

希望有人能帮上忙。我想用过滤器表示来自摆动位的JTables。我想利用buildin的机会通过正则表达式过滤不同的项。最大的问题是,在搜索字段中输入管道似乎是不可能的。弹出窗口(基于JPopupmenu)总是在按Alt时关闭。我试图删除Alt的键绑定,但没有效果。好像是在内心深处。有什么办法解决这个问题吗?提前谢谢。朱利安

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-15 10:35:04

看起来像Windows L&F的一个特性,它位于Java源代码的某个地方。但我找到了另一个解决办法。

代码语言:javascript
运行
复制
import java.awt.Color;
import java.awt.Window;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JWindow;
import javax.swing.Popup;
import javax.swing.PopupFactory;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.border.LineBorder;

public class PopupTest implements Runnable {

    private Popup popup;

    @Override
    public void run() {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        JFrame frm = new JFrame("Popup test");
        JLabel label = new JLabel("Click somewhere right mouse button to get a popup");
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (SwingUtilities.isRightMouseButton(e)) {
                    if (popup != null) {
                        popup.hide();
                    }
                    JTextField field = new JTextField(10);
                    JLabel lbl = new JLabel("Enter text here: ");
                    JPanel p = new JPanel();
                    p.add(lbl);
                    p.add(field);
                    p.setBorder(new LineBorder(Color.BLACK));
                    popup = PopupFactory.getSharedInstance().getPopup(label, p, e.getXOnScreen(), e.getYOnScreen());
                    // we need some logic for a heavy-weight popup
                    Window win = SwingUtilities.windowForComponent(p);
                    if (win instanceof JWindow) {
                        // if heavy weight make the window focusable
                        win.setFocusableWindowState(true);
                        // and install focus listener to hide popup when it lost focus
                        win.addWindowFocusListener(new WindowFocusListener() {

                            @Override
                            public void windowLostFocus(WindowEvent e) {
                                if (popup != null) {
                                    popup.hide();
                                }
                            }

                            @Override
                            public void windowGainedFocus(WindowEvent e) {
                                // TODO Auto-generated method stub

                            }
                        });
                    }
                    popup.show();
                    field.requestFocus();
                }
            }
        });
        frm.addWindowListener(new WindowAdapter() {
            @Override
            public void windowDeactivated(WindowEvent e) {
                if (popup != null) {
                    popup.hide();
                }
            }
        });
        frm.add(label);
        frm.setSize(500, 200);
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setLocationRelativeTo(null);
        frm.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new PopupTest());
    }
}

在文本字段中,我可以使用"Alt“键而不关闭弹出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50347001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档