2009-08-17 9 views
0

私はスクロールペインの内部にjtableを持っています。部分的に見えないセルにフォーカスが当たったときに、スクロールペインの上下スクロールを止めるにはどうすればよいですか?フォーカスのあるセルへのスクロールを無効にする

問題は、ユーザーがマウスオーバーしたときにセルを編集可能に設定しているため、部分的に見えないセルにマウスを重ねると、ビューが突然変化します。私はこの行動が気に入らない。どのようにそれを変更する上で任意のアイデア?

+0

編集されたセルを可視の矩形にスクロールすることは、編集をプログラムで開始する際のデフォルトの動作ではありません(editCellAt、checked jdk 6/7を介して)。 – kleopatra

答えて

2

テーブルで "setAutoscrolls(false)"を呼び出すことができます。

javadocはマウスドラッグイベントの受け渡しについて説明していますが、行/セルセクションのスクロールも無効にする必要があります。

import java.awt.BorderLayout; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 

public class TableTest extends JFrame { 

    private JTable table; 
    /** 
    * Create a new TableTest Frame. 
    * @param title The title of the frame. 
    */ 
    public TableTest() { 

     Object[][] tableData = new Object[][] { 
       {1, "One"}, {2, "Two"}, {3, "Three"}, 
       {4, "Four"}, {5, "Five"}, {6, "Six"}}; 

     DefaultTableModel tableModel = new DefaultTableModel(tableData, new String[] {"A", "B"}); 
     table = new JTable(tableModel); 
     table.setAutoscrolls(false); 

     JScrollPane scrolly = new JScrollPane(table); 
     setLayout(new BorderLayout()); 
     add(scrolly, BorderLayout.CENTER); 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 

     TableTest frame = new TableTest(); 
     frame.pack(); 
     frame.setSize(200, 100); 
     frame.setVisible(true); 
    } 
} 
+0

私は、スクロールペインとjtableの両方で提案されたメソッドを試しました。 – Victor

+0

奇妙な。あなたがしようとしていることを誤解していない限り、それは私にとっては間違いなく働いていました。私はこれをテストするために使用したサンプルコードを投稿しました。 setAutoscrolls(false)呼び出しを削除/追加すると、異なる動作が発生するはずです。 – Aaron

+0

は、プログラムを使って編集を開始することに関連しています(可視範囲外のセルではfi)。この挙動はautoscrollsプロパティの影響を受けません:エディタは_never_に表示されたrectにスクロールされます:-) @Viktorは、明示的に選択を変更しましたか?これらのすべての年の後に難しい... – kleopatra

0

検索に時間がかかりましたが、私のために働くことができました。あなたのJTableのサブクラスで

オーバーライドこのメソッド

public void scrollRectToVisible(java.awt.Rectangle aRect) 
    { 
     if(getAutoscrolls()) 
     super.scrollRectToVisible(aRect); 
    } 

table.setAutoscrolls(false)が正常に動作するはずです。

+0

これはscrollRectToVisibleのコントラクトの(少なくとも難しい境界線に違反しています):これはコンポーネントの任意の部分を表示可能な矩形にスクロールすることを意味するため、無条件で使用できる必要があります。 – kleopatra

関連する問題