2013-09-28 4 views
0

JTable과 JDialog가 있습니다. 내가 원하는 것은 크기가 테이블 크기와 같은 대화 상자 창입니다 (최대 크기를 넘지 않는 경우). 그리고 테이블에서 80 * 25 픽셀 크기의 셀을 원합니다. 다음은 현재 가지고있는 코드입니다.JTable의 사이즈에 맞추어 Dialog의 사이즈를 설정하는 방법은?

JTable table = new JTable(res, varnames); 
table.setRowHeight(25); 
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
for (int i = 0; i <= nvars; i++) { 
    table.getColumnModel().getColumn(i).setMinWidth(80); 
    table.getColumnModel().getColumn(i).setMaxWidth(80); 
    table.getColumnModel().getColumn(i).setPreferredWidth(80); 
} 
JScrollPane tableSP = new JScrollPane(table); 
out.getContentPane().add(tableSP); 
table.setEnabled(false); 
out.pack(); 
out.setVisible(true); 

올바른 크기의 테이블이있는 대화 상자가 있습니다. 그러나 대화 자체는 너무 커서 빈 공간이 많습니다. 어떻게이 작업을 수행 할 수 있습니까?

편집 : 추가 공간이 발생하는 문제를 발견했습니다. JScrollPane는, 테이블 자체보다 많은 공간을 차지합니다. 하지만 헤더에 ScrollPane이 필요합니다. 공간을 적게 차지하도록하는 방법은 어디에 있습니까?

답변

1

보고있는 추가 영역은 scrollPane입니다. 뷰의 preferredScrollableViewportSize (Scrollable을 구현 한 경우)를 존중합니다. 일반 JTable은 해당 속성을 (다소 임의적 인) 하드 코드 된 크기로 반환합니다. 그래서 해결 방법은 서브 클래스를 만들고 메소드를 구현하여 적절한 결과를 반환하는 것입니다 (f.i.

JTable table = new JTable(10, 5) { 
    // make this a property in a custom table 
    int visibleRows = 10; 
    /** 
    * Overridden to exactly fit a given number of rows/columns 
    */ 
    @Override 
    public Dimension getPreferredScrollableViewportSize() { 
     int height = visibleRows * getRowHeight(); 
     int width = getPreferredSize().width; 
     return new Dimension(width, height); 
    } 

}; 

또는 JXTable합니다 (SwingX project의 일부)를 사용하여 이미/-Columns을 속성 visibleRows를 제공 visibleRows의 관점있다.

0

내가 원하는 테이블의 동일한 크기의 대화 상자 창은

JTable table = new JTable(...); 
table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
JScrollPane scrollPane = new JScrollPane(table); 
dialog.add(scrollPane); 
dialog.pack(); 
dialog.setVisible(true); 
+0

보통 당신도 :-) prefScrollableSize는 변두리 만보다 악 하드 코딩 알고있는 (조심 통상의 setXXSize – kleopatra