6

我正在尝试制作JTable具有可用列跨度的列。具体来说,我希望将 a 嵌套JTable在 anotherJTable中,当用户单击查看嵌套表时,它应该展开以向下推下面的行并填充空白空间。这类似于您在 MS Access 中看到的可以嵌套表格的内容,单击一行上的展开按钮将显示嵌套表格中的相应条目。

如果有人知道使用 执行列跨度的方法JTable,请您指出正确的方向吗?或者,如果您知道另一种方法来做到这一点,我愿意接受建议。该应用程序正在使用 Swing 构建。表中的元素,无论是高级别还是低级别,都必须在任何解决方案中都是可编辑的。使用 nested JTables 这不会是一个问题,任何其他解决方案也必须考虑到这一点。

4

3 回答 3

4

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

于 2008-09-29T03:38:05.140 回答
0

您需要为主表编写自己的 TableUI。使用您自己的 TableModel 来保存额外的数据也很有帮助,例如是否展开了一行。但这是可选的。

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

于 2008-09-28T19:36:13.833 回答
0

基于来自 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 年起不可用,现在在网络存档中查看)

其他资源:

于 2011-02-21T12:04:46.317 回答