2009-08-17 85 views
0

我有一個滾動窗格內的jtable。我如何停止滾動向上或向下滾動窗口,當一部分視線不在的單元格獲得重點時?禁用滾動到焦點單元

問題是我將單元格設置爲可編輯的,當用戶將鼠標懸停在它們上面時,因此當您將鼠標懸停在部分視線之外的單元格中時,視圖突然改變。我不喜歡這種行爲。關於如何改變它的任何想法?

+0

將編輯過的單元格滾動到可見矩形中是_not_以編程方式啓動編輯時的默認行爲(通過editCellAt,checked jdk 6/7) - 可能是您的代碼隨着開始編輯而更改了選擇? – kleopatra 2012-12-24 10:55:42

回答

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

我已經嘗試了scrollpane和jtable上的建議方法,並且都沒有改變我描述的行爲。 – Victor 2009-08-17 20:16:03

+0

奇怪。除非我誤解了你正在嘗試做的事,否則肯定會爲我工作。我已經發布了用於測試的示例代碼。 當setAutoscrolls(false)調用被刪除/添加時,您應該得到不同的行爲。 – Aaron 2009-08-17 21:28:10

+0

與以編程方式開始編輯(fi在可見範圍外的單元格)相關的行爲不受autoscrolls屬性的影響:編輯器被_never_滾動到可見矩形中:-)看起來像@Viktor在他的自定義init代碼中做了一些事情,明確改變了選擇?很難說這麼多年後... – kleopatra 2012-12-24 10:52:35

0

花了我幾個小時的搜索,但我得到它爲我工作。

重寫此方法與你的JTable的子類

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

現在table.setAutoscrolls(false)應能正常工作。

+0

這違反了(至少在邊界線上)scrollRectToVisible的契約:它是將組件的任意部分滾動到可見矩形中的方式,所以必須無條件地提供。 – kleopatra 2012-12-24 10:48:21