我有一個滾動窗格內的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);
}
}
我已經嘗試了scrollpane和jtable上的建議方法,並且都沒有改變我描述的行爲。 – Victor 2009-08-17 20:16:03
奇怪。除非我誤解了你正在嘗試做的事,否則肯定會爲我工作。我已經發布了用於測試的示例代碼。 當setAutoscrolls(false)調用被刪除/添加時,您應該得到不同的行爲。 – Aaron 2009-08-17 21:28:10
與以編程方式開始編輯(fi在可見範圍外的單元格)相關的行爲不受autoscrolls屬性的影響:編輯器被_never_滾動到可見矩形中:-)看起來像@Viktor在他的自定義init代碼中做了一些事情,明確改變了選擇?很難說這麼多年後... – kleopatra 2012-12-24 10:52:35
花了我幾個小時的搜索,但我得到它爲我工作。
重寫此方法與你的JTable的子類
public void scrollRectToVisible(java.awt.Rectangle aRect)
{
if(getAutoscrolls())
super.scrollRectToVisible(aRect);
}
現在table.setAutoscrolls(false)
應能正常工作。
這違反了(至少在邊界線上)scrollRectToVisible的契約:它是將組件的任意部分滾動到可見矩形中的方式,所以必須無條件地提供。 – kleopatra 2012-12-24 10:48:21
將編輯過的單元格滾動到可見矩形中是_not_以編程方式啓動編輯時的默認行爲(通過editCellAt,checked jdk 6/7) - 可能是您的代碼隨着開始編輯而更改了選擇? – kleopatra 2012-12-24 10:55:42