5

私は Netbeans を使用しており、JTable を使用してウィンドウを設計し、JTable コンポーネントに MouseEvent リスナーを追加して、次のコードを追加しました。

private void productsTableMousePressed(java.awt.event.MouseEvent evt) {
    if(evt.isPopupTrigger()) {
        tablePopupMenu.setLocation(evt.getXOnScreen(), evt.getYOnScreen());
        tablePopupMenu.setVisible(true);
        System.out.println("Fired!");
    }
}

private void productsTableMouseReleased(java.awt.event.MouseEvent evt) {
    if(evt.isPopupTrigger()) {
        tablePopupMenu.setLocation(evt.getXOnScreen(), evt.getYOnScreen());
        tablePopupMenu.setVisible(true);
    }
}

ただし、一部のセルをクリックした場合にのみ機能します。JTable 領域全体で動作させたいと考えています。どのように?

4

3 に答える 3

3

ただし、一部のセルをクリックした場合にのみ機能しますが、JTable領域全体で機能させたい

MouseListenerはすべてのセルで機能します。setLocation(...)メソッドを使用する必要があるかどうかはわかりません。

コード例については、ポップアップメニューの表示を参照してください。

または、より良いアプローチは次を使用することです。

table.setComponentPopupMenu(...);
于 2012-01-18T00:18:17.240 に答える
3

テーブルが JScrollPane 内にあると仮定すると、ビューポート全体がカバーされない場合があります。ビューポートの全領域が確実にカバーされるようsetFillsViewportHeight(true)にするには、テーブルを呼び出します。

于 2012-01-18T07:35:24.920 に答える
0

私の JTable (JInternalFrame にネストされた JScrollPane にあります) では、JTable が JScrollPane よりも大きい場合、スクロールとサイズ変更に問題が発生する可能性があることがわかりました。

基本的に、フレームが左側のモニターに表示されていて、テーブルを右端までスクロールした場合、ポップアップは右側のモニターに表示されます。

フレームとスクロール ペインの両方に対する getMousePositions() と、マウス イベント getX および getXOnScreen() の 4 つの異なるオプションの結果を確認しました。

私が望んでいた結果が得られたのは、フレームの getMousePositions() だけでした。他のすべては、私にとって理にかなっている、世界に対する独自の内部ビューによって相殺されました.

だから私が言っているのは、マウスの座標をどこで取得するかに注意することだと思います.

于 2013-05-11T01:14:55.357 に答える