スクロールペイン内に jtable があります。部分的に表示されていないセルがフォーカスを取得したときに、スクロールペインが上下にスクロールするのを止めるにはどうすればよいですか?
問題は、ユーザーがセルの上にマウスを置いたときにセルを編集可能に設定しているため、部分的に表示されていないセルの上にマウスを移動すると、ビューが突然変化することです。私はこの振る舞いが好きではありません。それを変更する方法についてのアイデアはありますか?
スクロールペイン内に jtable があります。部分的に表示されていないセルがフォーカスを取得したときに、スクロールペインが上下にスクロールするのを止めるにはどうすればよいですか?
問題は、ユーザーがセルの上にマウスを置いたときにセルを編集可能に設定しているため、部分的に表示されていないセルの上にマウスを移動すると、ビューが突然変化することです。私はこの振る舞いが好きではありません。それを変更する方法についてのアイデアはありますか?
テーブルで「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);
}
}
検索に何時間もかかりましたが、うまくいきました。
このメソッドを JTable サブクラスでオーバーライドします
public void scrollRectToVisible(java.awt.Rectangle aRect)
{
if(getAutoscrolls())
super.scrollRectToVisible(aRect);
}
これtable.setAutoscrolls(false)
で正常に動作するはずです。