6

JTable利用可能な列スパンを持つを作成しようとしています。具体的には、JTable別の中に a をネストしようJTableとしています。ユーザーがクリックしてネストされたテーブルを表示すると、展開して下の行を押し下げ、空のスペースを埋める必要があります。これは、テーブルをネストできる MS Access で見られるものと似ており、行の展開ボタンをクリックすると、ネストされたテーブルの対応するエントリが表示されます。

で列スパンを実行する方法を誰かが知っている場合JTableは、正しい方向に向けてください。または、これを行う別の方法を知っている場合は、提案をお待ちしています。アプリケーションは Swing でビルドされています。テーブル内の要素は、高レベルと低レベルの両方で、どのソリューションでも編集可能である必要があります。ネストされたJTables を使用すると、これは問題になりません。他のソリューションでもこれを考慮する必要があります。

4

3 に答える 3

4

正しい方向へのポインタとして、SwingWikiで、列スパンのTableUIメソッドを非常によく説明しているこの記事を試してください。その前に、TableCellRendererのペイントメソッドをオーバーライドするなど、いくつかの方法を試しましたが、あまり成功しませんでした。

于 2008-09-29T03:38:05.140 に答える
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 年以降は利用できません。現在はWeb アーカイブで参照してください)

その他のリソース:

于 2011-02-21T12:04:46.317 に答える
0

マスター テーブル用に独自の TableUI を作成する必要があります。独自の TableModel を使用して、行が展開された場合などの追加データを保存することも役立ちます。ただし、これはオプションです。

行を展開してテキスト エディターを表示する equals TableUI を作成します。TableUI では、table.setRowHeight(height) を使用して行の高さを動的に変更する必要があります。また、プライベートなものにアクセスできないため、BaseTableUI からいくつかのものをコピーする必要があります。

于 2008-09-28T19:36:13.833 に答える