JTable column spanning

前端 未结 3 1706
攒了一身酷
攒了一身酷 2021-01-18 07:10

I am trying to make a JTable that has column spans available. Specifically, I am looking to nest a JTable inside another JTable, and w

相关标签:
3条回答
  • 2021-01-18 07:22

    As a pointer in the right direction, try this article at SwingWiki that explains the TableUI method of column spanning quite well. Before this, I also tried some alternatives such as overriding the TableCellRenderer paint methods without much success.

    0 讨论(0)
  • 2021-01-18 07:24

    Based on Code from 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);
      }
    }
    

    Source: http://www.codeguru.com/java/articles/125.shtml (unavailable since 2012, see now in web archive)

    Other ressources:

    • Java-6 updated sources: http://qoofast.blog76.fc2.com/blog-entry-2.html (translated)
      • ColumnGroup.java
      • GroupableTableHeader.java
      • GroupableTableHeaderUI
    0 讨论(0)
  • 2021-01-18 07:38

    You need to write your own TableUI for the master table. It can also helpful to use your own TableModel to save additional data like if a row is expanded. But this is optional.

    I write an equals TableUI that expand a row and show an text editor. In the TableUI you need to change the the row hight dynamically with table.setRowHeight(height). Also it is necessary to copy some stuff from the BaseTableUI because you can not access the private stuff.

    0 讨论(0)
提交回复
热议问题