스크롤 패널 내부에 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
이상한. 내가 뭘하려고하는지 오해 한 것이 아니라면, 확실히 나를 위해 일했습니다. 내가 테스트 한 예제 코드를 게시했습니다. setAutoscrolls (false) 호출을 제거/추가하면 다른 동작이 발생합니다. – Aaron
은 프로그래밍 방식으로 편집을 시작하는 것과 관련하여 (visible 범위 밖에있는 셀에서) 동작은 autoscrolls 속성에 영향을받지 않습니다. 편집기는 _never_ 보이는 rect로 스크롤됩니다 .-- @Viktor는 사용자 정의 init 코드에서 명시 적으로 선택을 변경 했습니까? 이 모든 년 후에 말하기 힘든 ... – kleopatra
검색 시간이 많이 걸렸지 만 나에게 효과가 있습니다.
무시하여 JTable의 서브 클래스
public void scrollRectToVisible(java.awt.Rectangle aRect)
{
if(getAutoscrolls())
super.scrollRectToVisible(aRect);
}
이 방법은 이제 table.setAutoscrolls(false)
이 제대로 작동합니다.
이것은 scrollRectToVisible의 계약을 위반합니다 (최소한 경계선에서 어렵습니다). _the_는 구성 요소의 임의의 부분을 보이는 rect로 스크롤하는 것을 의미하므로 무조건 사용할 수 있어야합니다. – kleopatra
편집 된 셀을 가시적 인 사각형으로 스크롤하는 것은 프로그래밍 방식으로 편집을 시작할 때 _not_ 기본 동작이 아닙니다 (editCellAt, checked jdk 6/7을 통해) - 편집 시작과 함께 코드가 변경 될 수 있습니까? – kleopatra