2008-09-28 10 views
6

Próbuję utworzyć JTable, która ma dostępne zakresy kolumn. W szczególności szukam zagnieżdżenia JTable w innym JTable, a kiedy użytkownik kliknie, aby wyświetlić zagnieżdżoną tabelę, powinien rozwinąć, aby przesunąć poniższe wiersze i wypełnić puste miejsce. Jest to podobne do tego, co widać w MS Access, gdzie można zagnieżdżać tabele, a kliknięcie przycisku rozwijania w wierszu pokaże odpowiednie wpisy w tabeli zagnieżdżonej.JTable kolumna obejmująca

Jeśli ktoś wie, jak wykonać szpadel z JTable, czy możesz wskazać mi właściwy kierunek? Lub jeśli znasz alternatywny sposób, aby to zrobić, jestem otwarty na sugestie. Aplikacja jest budowana za pomocą Swing. Elementy w tabeli, zarówno na wysokim, jak i niskim poziomie, muszą być edytowalne w dowolnym rozwiązaniu. Używanie zagnieżdżonych JTable s nie będzie problemem, a każde inne rozwiązanie również będzie musiało wziąć to pod uwagę.

Odpowiedz

4

Jako wskaźnik we właściwym kierunku, spróbuj this article na stronie SwingWiki, która wyjaśnia dość dobrze metodę TableUI kolumny. Wcześniej próbowałem także niektórych alternatyw, takich jak nadpisywanie metod malowania TableCellRenderer bez większego powodzenia.

+1

Link już nie działa :( –

+2

Skopiuj, jeśli artykuł jest nadal offline: http://web.archive.org/web/20080726035429/http://www.swingwiki.org/howto:column_spanning – Synox

+0

Archiwum pokazuje Błąd 500 na temat tego artykułu :( –

0

Musisz napisać własną tabelkę interfejsu użytkownika dla tabeli głównej. Pomocne może być również użycie własnego TableModelu do zapisywania dodatkowych danych, na przykład w przypadku rozwinięcia wiersza. Ale jest to opcjonalne.

Piszę równy TableUI, który rozwija wiersz i pokazuje edytor tekstu. W TableUI trzeba dynamicznie zmieniać wysokość wiersza za pomocą table.setRowHeight (height). Ponadto konieczne jest skopiowanie pewnych rzeczy z BaseTableUI, ponieważ nie masz dostępu do prywatnych rzeczy.

+1

ja nadal nie wiem, jak byś go o mówienie swoją JTable scalić kolumn w danym rzędzie. Wiem, jak wstawić nowy wiersz do tabeli, ale jak mam powiedzieć tabeli, aby scalić te komórki? – Elie

0

podstawie kodeksu z 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); 
    } 
} 

Źródło: http://www.codeguru.com/java/articles/125.shtml (dostępne od 2012 roku, teraz zobaczyć w web archive)

Inne Zasoby:

+0

Code-Guru mówi "nie znaleziono strony". Dlatego właśnie odradza się udzielanie linków. – Matthieu