2012-01-17 10 views
4

上のMouseListenerを右クリックして、私は、JTableの持つウィンドウを設計し、JTableのコンポーネント上のMouseEventリスナーを追加し、このコードを追加しました:私は、NetBeansを使用しています全体のJTableコンポーネント

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); 
    } 
} 

をしかし、それはときにのみ機能しますIいくつかのセルをクリックします。私はそれをJTable全体の領域で作業したいと思っています。どうやって?

答えて

2

はJScrollPaneの内部にある、それはビューポート全体をカバーしないかもしれません。ビューポートの全領域がカバーされるようにするには、テーブルのsetFillsViewportHeight(true)に電話してください。

+0

はい、あなたは正しいです、それは私の問題でした:)私はそれを少し前に考え出しました。しかし、JScrollPaneでmousePressedをトリガーして解決したので、このメソッドをありがとうございます。 –

+0

+1、良い推測。 – camickr

+0

多くの人が、JScrollPaneとのやりとりの仕方を正しく認識していないようです。私はまだ私が望む以上にそれと苦労しています。 – jackrabbit

3

しかし、私はいくつかのセルをクリックしたときにのみ動作しますが、私はそれが

のMouseListenerは、すべてのセル上で動作します全体JTableの領域に取り組んで取得したいです。 setLocation(...)メソッドを使用する必要があるかどうかはわかりません。

コード例としてBringing Up a Popup Menuを参照してください。

それとももっと良い方法が使用することです:あなたのテーブルを想定し

table.setComponentPopupMenu(...); 
+1

+1のためのcomponentPopupMenu - それはそれを行う_the_方法です:-)チュートリアルは古くなっています... – kleopatra

0

JTable(JInternalFrameにネストされたJScrollPaneにあります)では、JTableがJScrollPaneより大きい場合、スクロールとサイズ変更に問題があることがあります。

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

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

欲しかった結果を与えたのは、フレームのgetMousePositions()だけでした。それ以外のものはすべて、それが私にとって意味をなさない世界の内面的見地から相殺されました。

だから私はあなたがマウスの座標を取得する場所に注意していると思います。

関連する問題