java - 从打开的 JComboBox 中打开 JPopupMenu

标签 java swing jcombobox jpopupmenu jpopup

我想更改组合框的 OOTB 行为,在单击鼠标右键后卡住它(检测单击了哪个按钮很容易,所以这不是重点)并打开 JPopupMenu 而不是选择该条目。

那么 - 如何禁用在给定条件下选择条目并使用自定义行为?

我尝试首先向所有组合框组件添加鼠标监听器,但没有成功 - 没有任何改变

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);
        frame.setSize(400, 200);
        frame.setVisible(true);

        for (Component c : comboBox.getComponents()) {
            c.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {
                    System.out.println("cli");
                    super.mouseClicked(e);
                }
                public void mousePressed(MouseEvent e) {
                    System.out.println("pre");
                    super.mousePressed(e);
                }
            });
        }
    }
}

最佳答案

  • 在 Swing 中不可能同时显示两个轻量级弹出容器

  • 关于 JComboBox popup from JPopup 的示例

  • 有关于将 JPopup 设置为重量级的肮脏黑客

  • 但我建议将 AWT ContainerSwing JComponents 混合使用,并将 AWT.PopupSwing 结合使用.JComponent(JMenuItemJButton)

关于java - 从打开的 JComboBox 中打开 JPopupMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11245982/

相关文章:

java - 线程似乎没有干净地退出 - 线程挂起

java - 如何通过没有索引列的XML设置List对象的 "one-to-many"映射

java - Long.parseLong 抛出二进制字符串的 NumberFormatException

java - 使用 setAutoCreateRowSorter(true) 时获取列排序顺序?

java - java 中的组合框无法正常工作 bluej

java - 如何在不使用@transactional注解的情况下进行事务管理

java - fireTableDataChanged() 的问题

java - JTextArea 不断将主面板滚动到顶部

java - 在 Swing 中更改 JTable 列中的下拉内容

单击单元格之前表中的 Java JComboBox 不显示