2009-08-17 5 views
0

스크롤 패널 내부에 jtable이 있습니다. 부분적으로 보이지 않는 셀에 초점이 맞춰지면 위 또는 아래로 스크롤 할 때 스크롤 판을 멈출 수 있습니까?포커스가있는 셀을 스크롤 할 수 없도록 설정했습니다.

문제는 사용자가 마우스를 올려 놓을 때 셀을 편집 가능으로 설정했기 때문에 셀이 부분적으로 보이지 않는 셀 위로 마우스를 가져 가면보기가 갑자기 변경됩니다. 나는이 행동이 싫어. 그것을 바꾸는 방법에 대한 아이디어?

+0

편집 된 셀을 가시적 인 사각형으로 스크롤하는 것은 프로그래밍 방식으로 편집을 시작할 때 _not_ 기본 동작이 아닙니다 (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

나는 scrollpane과 jtable 모두에 대해 제안 된 방법을 시도했지만 설명 된 동작을 변경하지도 않습니다. – Victor

+0

이상한. 내가 뭘하려고하는지 오해 한 것이 아니라면, 확실히 나를 위해 일했습니다. 내가 테스트 한 예제 코드를 게시했습니다. setAutoscrolls (false) 호출을 제거/추가하면 다른 동작이 발생합니다. – Aaron

+0

은 프로그래밍 방식으로 편집을 시작하는 것과 관련하여 (visible 범위 밖에있는 셀에서) 동작은 autoscrolls 속성에 영향을받지 않습니다. 편집기는 _never_ 보이는 rect로 스크롤됩니다 .-- @Viktor는 사용자 정의 init 코드에서 명시 적으로 선택을 변경 했습니까? 이 모든 년 후에 말하기 힘든 ... – kleopatra

0

검색 시간이 많이 걸렸지 만 나에게 효과가 있습니다.

무시하여 JTable의 서브 클래스

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

이 방법은 이제 table.setAutoscrolls(false)이 제대로 작동합니다.

+0

이것은 scrollRectToVisible의 계약을 위반합니다 (최소한 경계선에서 어렵습니다). _the_는 구성 요소의 임의의 부분을 보이는 rect로 스크롤하는 것을 의미하므로 무조건 사용할 수 있어야합니다. – kleopatra

관련 문제