Frage

Ich versuche eine zu machen JTable das über verfügbare Spaltenspannen verfügt.Konkret möchte ich a verschachteln JTable in einem anderen JTable, und wenn der Benutzer klickt, um die verschachtelte Tabelle anzuzeigen, sollte sie erweitert werden, um die Zeilen darunter nach unten zu verschieben und den leeren Raum zu füllen.Dies ähnelt dem, was Sie in MS Access sehen, wo Sie Tabellen verschachteln können. Wenn Sie in einer Zeile auf die Schaltfläche „Erweitern“ klicken, werden Ihnen die entsprechenden Einträge in der verschachtelten Tabelle angezeigt.

Wenn jemand eine Möglichkeit kennt, einen Column Span durchzuführen JTable, kannst du mir bitte den richtigen Weg weisen?Oder wenn Sie eine alternative Möglichkeit kennen, dies zu tun, bin ich offen für Vorschläge.Die Anwendung wird mit Swing erstellt.Elemente in der Tabelle, sowohl auf hoher als auch auf niedriger Ebene, müssen in jeder Lösung bearbeitet werden können.Verwendung verschachtelt JTableDas wird kein Problem sein und jede andere Lösung müsste dies ebenfalls berücksichtigen.

War es hilfreich?

Lösung

Als Zeiger in die richtige Richtung, versuchen dieser Artikel bei SwingWiki, die die TableUI erklärt Methode der Spalte ganz gut überspannt. Vor diesem habe ich versucht, auch einige Alternativen wie Überschreiben der Table Farbe Methoden ohne viel Erfolg.

Andere Tipps

Sie müssen Ihre eigenen TableUI für die Master-Tabelle schreiben. Es kann auch hilfreich, um Ihr eigenes Tablemodel verwenden, um zusätzliche Daten, wie zu speichern, wenn eine Zeile erweitert wird. Aber dies ist optional.

Ich schreibe ein Gleichheits TableUI, die eine Zeile und zeigen einen Texteditor erweitern. Im TableUI müssen Sie das die Zeile Höhe dynamisch mit table.setRowHeight (Höhe) ändern. Auch ist es notwendig, ein paar Sachen aus der BaseTableUI zu kopieren, weil Sie nicht die privaten Sachen zugreifen können.

Basierend auf Code von 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);
  }
}

Quelle: http://www.codeguru.com/java/articles/125.shtml (seit 2012 nicht mehr verfügbar, siehe jetzt in Webarchiv)

Weitere Ressourcen:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top