我在尝试做一个 JTable 已列的跨越提供。具体地说,我找到一个鸟巢 JTable 在另一个 JTable, 和当用户的点击查看的嵌套表格,就应该展开以下推行以下和填补空白。这是类似的,你看看MS Access,你可以窝表,并点击的展开按钮行上会告诉你的相应条目的嵌套表。

如果有人知道的一种方式来执行一个列跨与 JTable, 你能请点我在正确的方向?或如果你知道的一个替代方式来做到这一点,我是开放的建议。该应用程序是正在兴建的摆动。表中的元素,这两个高级别和低级别,必须是编辑在任何解决方案。使用嵌套的 JTable这不会是一个问题,以及任何其他解决办法必须考虑到这一点。

有帮助吗?

解决方案

作为指向正确方向的指针,请尝试在SwingWiki上这篇文章解释TableUI列的方法很好。在此之前,我还尝试了一些替代方法,例如重写TableCellRenderer绘制方法,但没有取得多大成功。

其他提示

您需要为主表编写自己的TableUI。使用您自己的TableModel来保存其他数据(如扩展行)也很有帮助。但这是可选的。

我写了一个等于TableUI,展开一行并显示文本编辑器。在TableUI中,您需要使用table.setRowHeight(height)动态更改行高。此外,有必要从BaseTableUI复制一些东西,因为你无法访问私有东西。

基于代码代码-大师:

/*
 *  (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年以来,看到现在 档案网络)

其他资源:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top