1

JFrameでJTableを右クリックすると、JPopupMenuが表示されます。このJPopupMenuをそのまま表示したまま、マウスを使用してJTableに移動した場合でも、その行にカーソルを合わせることができます。

これは、Windowsアプリケーションのデフォルトの動作ではありません。通常、ポップアップメニューがプログラムに表示されると、ポップアップ所有者ウィンドウでのホバーアクションがブロックされます。

Javaでも同じことができますか?

4

2 に答える 2

1

この問題に対処する 1 つの方法は、GUI 要素の 1 つにインスタンス変数を設定して、ホバー イベントを有効にするかどうかをフラグすることです。これがどのように機能するかを以下に示しましたが、完全な形式ではありません。JPopupMenu が閉じられたときにホバーを再度有効にし、ENABLE_HOVERホバー効果を発生させる前にフィールドの状態を確認する必要もあります。

public MyTable extends JTable {

    private boolean ENABLE_HOVER = true;

    public MyTable() {
    ...
    this.addMouseListener(new MouseListener(){
        ...
        public void mouseClicked(MouseEvent e) {
            if (isRightClick(e)) {
                setHoverEnabled(false);
                showJPopupMenu();
            }
        }
    });
    }

    protected void setHoverEnabled(final boolean hover) {
        this.ENABLE_HOVER = hover;
    }
}
于 2011-03-06T17:20:05.527 に答える
1

多数の有効な要素を無効にするのにより適した別の方法は、ガラス ペインでイベントをインターセプトすることです。これがどのように機能するかの例をここに示します。ただし、インターフェイスが既に構築されている場合は、コンポーネント クラスの大幅な再調整が必要になる可能性があることに注意してください。

ガラス ペインですべてのイベントをインターセプトする必要があります。ホバーが有効になっている場合 (ポップアップ メニューが表示されていない場合)、イベントを適切なコンポーネントに渡します。それ以外の場合、ホバーが無効で、JPopupMenu で発生した MouseEvent は JPopupMenu にのみ渡されます。

于 2011-03-07T09:51:48.977 に答える