2

コンボボックスの 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);
                }
            });
        }
    }
}
4

1 に答える 1

3
  • Swing では、2 つの軽量ポップアップ コンテナを同時に表示することはできません。

  • JPopup からの JComboBox ポップアップの

  • JPopupヘビーウェイトに設定するための汚いハックがあります

  • ただし、(または)と混合AWT ContainerSwing JComponentsて使用することをお勧めしますAWT.PopupSwing.JComponentJMenuItemJButton

于 2012-06-28T13:54:29.227 に答える