문제
나는 만들려고 노력하고있다 JTable
열 스팬이 있습니다. 구체적으로, 나는 둥지를 찾고있다 JTable
다른 내부 JTable
, 그리고 사용자가 중첩 테이블을 보려면 클릭하면 아래 줄을 아래로 밀고 빈 공간을 채워야합니다. 이것은 테이블을 중첩 할 수있는 MS Access에서 볼 수있는 것과 유사하며 행의 확장 버튼을 클릭하면 중첩 테이블의 해당 항목이 표시됩니다.
누군가가 열 범위를 수행하는 방법을 알고 있다면 JTable
, 당신은 나를 올바른 방향으로 가리키길 바랍니다. 또는 대안적인 방법을 알고 있다면 제안에 열려 있습니다. 응용 프로그램은 스윙으로 구축되고 있습니다. 테이블의 요소 인 높은 수준과 낮은 수준은 모든 솔루션에서 편집 할 수 있어야합니다. 중첩 사용 JTable
s 이것은 문제가되지 않으며 다른 솔루션은 이것을 고려해야합니다.
해결책
올바른 방향으로 포인터로 시도하십시오 이 기사 Swingwiki에서는 열의 테이블 루이 방법을 잘 설명합니다. 그 전에는 또한 Tablecellrenderer 페인트 방법을 크게 성공하지 못한 것과 같은 몇 가지 대안을 시도했습니다.
다른 팁
마스터 테이블에 대한 자신의 TableUi를 작성해야합니다. 또한 행이 확장 된 경우와 같이 추가 데이터를 저장하기 위해 자신의 Tablemodel을 사용하는 것이 도움이 될 수 있습니다. 그러나 이것은 선택 사항입니다.
나는 행을 확장하고 텍스트 편집기를 보여주는 평등 테이블 루이를 씁니다. TableUI에서는 테이블로 동적으로 행을 동적으로 변경해야합니다. 또한 개인 물건에 액세스 할 수 없기 때문에 BasetableUi에서 일부 물건을 복사해야합니다.
Code-Guru의 코드를 기반으로합니다.
/*
* (swing1.1beta3)
*
* |-----------------------------------------------------|
* | 1st | 2nd | 3rd |
* |-----------------------------------------------------|
* | | | | | | |
*/
//package jp.gr.java_conf.tame.swing.examples;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import jp.gr.java_conf.tame.swing.table.*;
/**
* @version 1.0 11/09/98
*/
public class MultiWidthHeaderExample extends JFrame {
MultiWidthHeaderExample() {
super( "Multi-Width Header Example" );
DefaultTableModel dm = new DefaultTableModel();
dm.setDataVector(new Object[][]{
{"a","b","c","d","e","f"},
{"A","B","C","D","E","F"}},
new Object[]{"1 st","","","","",""});
JTable table = new JTable( dm ) {
protected JTableHeader createDefaultTableHeader() {
return new GroupableTableHeader(columnModel);
}
};
TableColumnModel cm = table.getColumnModel();
ColumnGroup g_2nd = new ColumnGroup("2 nd");
g_2nd.add(cm.getColumn(1));
g_2nd.add(cm.getColumn(2));
ColumnGroup g_3rd = new ColumnGroup("3 rd");
g_3rd.add(cm.getColumn(3));
g_3rd.add(cm.getColumn(4));
g_3rd.add(cm.getColumn(5));
GroupableTableHeader header = (GroupableTableHeader)table.getTableHeader();
header.addColumnGroup(g_2nd);
header.addColumnGroup(g_3rd);
JScrollPane scroll = new JScrollPane( table );
getContentPane().add( scroll );
setSize( 400, 100 );
header.revalidate();
}
public static void main(String[] args) {
MultiWidthHeaderExample frame = new MultiWidthHeaderExample();
frame.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
System.exit(0);
}
});
frame.setVisible(true);
}
}
원천: http://www.codeguru.com/java/articles/125.shtml (2012 년 이후에 사용할 수 없습니다. 지금 참조하십시오 웹 아카이브)
기타 ressources :