Столбец JTable - PullRequest
       17

Столбец JTable

6 голосов
/ 28 сентября 2008

Я пытаюсь сделать JTable с доступными интервалами столбцов. В частности, я хочу вложить JTable в другой JTable, и когда пользователь щелкает, чтобы просмотреть вложенную таблицу, он должен развернуться, чтобы сдвинуть строки внизу и заполнить пустое пространство. Это похоже на то, что вы видите в MS Access, где вы можете вкладывать таблицы, и нажатие на кнопку расширения в строке покажет вам соответствующие записи во вложенной таблице.

Если кто-то знает способ выполнения пролета столбца с помощью JTable, не могли бы вы указать мне правильное направление? Или, если вы знаете альтернативный способ сделать это, я открыт для предложений. Приложение создается с помощью Swing. Элементы в таблице, как высокого, так и низкого уровня, должны быть доступны для редактирования в любом решении. При использовании вложенных JTable s это не будет проблемой, и любое другое решение также должно учитывать это.

Ответы [ 3 ]

4 голосов
/ 29 сентября 2008

Как указатель в правильном направлении, попробуйте эту статью в SwingWiki, которая довольно хорошо объясняет метод TableUI, охватывающий столбцы. Перед этим я также попробовал некоторые альтернативы, такие как переопределение методов рисования TableCellRenderer без особого успеха.

0 голосов
/ 21 февраля 2011

На основании кода от 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 г., см. Теперь в веб-архив )

Другие ресурсы:

0 голосов
/ 28 сентября 2008

Вам нужно написать свой собственный TableUI для главной таблицы. Также может быть полезно использовать вашу собственную TableModel для сохранения дополнительных данных, например, если строка развернута. Но это необязательно.

Я пишу равный TableUI, который расширяет строку и показывает текстовый редактор. В TableUI вам нужно динамически изменять высоту строки с помощью table.setRowHeight (height). Также необходимо скопировать некоторые вещи из BaseTableUI, потому что вы не можете получить доступ к личным вещам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...