Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Darstellung eines JTableHeader's

2 views
Skip to first unread message

Sven

unread,
May 17, 2002, 5:33:54 AM5/17/02
to
Hallo,

ich möchte eine JTable erzeugen mit gruppierbaren Spaltenheader wie
unter

http://www2.gol.com/users/tame/swing/examples/JTableExamples1.html

Dargestellt. Ok, der Code ist zwar vorhanden, aber die Vorgehensweise
ist mir nach langer Einarbeit nicht so ersichtlich. Ich habe versucht
den Quellcode zu Compilieren und auszuführen, er bringt mir jedoch
folgende Exceptions:


java.lang.NullPointerException

at GroupableTableHeaderUI.getHeaderHeight(GroupableTableHeaderUI.java:87)

at GroupableTableHeaderUI.createHeaderSize(GroupableTableHeaderUI.java:108)

at GroupableTableHeaderUI.getPreferredSize(GroupableTableHeaderUI.java:118)

at javax.swing.JComponent.getPreferredSize(JComponent.java:985)

at javax.swing.ViewportLayout.preferredLayoutSize(ViewportLayout.java:71)

at java.awt.Container.preferredSize(Container.java:828)

at java.awt.Container.getPreferredSize(Container.java:812)

at javax.swing.JComponent.getPreferredSize(JComponent.java:987)

at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:682)

at java.awt.Container.layout(Container.java:681)

at java.awt.Container.doLayout(Container.java:671)

at java.awt.Container.validateTree(Container.java:745)

at java.awt.Container.validateTree(Container.java:752)

at java.awt.Container.validateTree(Container.java:752)

at java.awt.Container.validateTree(Container.java:752)

at java.awt.Container.validateTree(Container.java:752)

at java.awt.Container.validate(Container.java:723)

at java.awt.Window.show(Window.java:386)

at java.awt.Component.show(Component.java:941)

at java.awt.Component.setVisible(Component.java:898)

at GroupableHeader.main(GroupableHeader.java:72)

Und wie kann er das ganze überhaupt Übersetzten, wenn die Variable
"columnModel" nicht deklariert bzw. initialisiert ist?

public class GroupableHeader extends JFrame {

GroupableHeader() {
super( "Groupable Header Example" );

DefaultTableModel dm = new DefaultTableModel();
dm.setDataVector(new Object[][]{
{"119","foo","bar","ja","ko","zh"},
{"911","bar","foo","en","fr","pt"}},
new Object[]{"SNo.","1","2","Native","2","3"});

JTable table = new JTable( dm ) {
protected JTableHeader createDefaultTableHeader() {
return new GroupableTableHeader(/****************/columnModel/***********/);
}
};

TableColumnModel cm = table.getColumnModel();
ColumnGroup g_name = new ColumnGroup("Name");
g_name.add(cm.getColumn(1));
g_name.add(cm.getColumn(2));

ColumnGroup g_lang = new ColumnGroup("Language");
g_lang.add(cm.getColumn(3));

ColumnGroup g_other = new ColumnGroup("Others");
g_other.add(cm.getColumn(4));
g_other.add(cm.getColumn(5));
g_lang.add(g_other);

GroupableTableHeader header =
(GroupableTableHeader)table.getTableHeader();
header.addColumnGroup(g_name);
header.addColumnGroup(g_lang);
JScrollPane scroll = new JScrollPane( table );
getContentPane().add( scroll );
setSize( 400, 120 );
}

public static void main(String[] args) {
GroupableHeader frame = new GroupableHeader();
frame.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
System.exit(0);
}
});
frame.setVisible(true);
}
}

Dass er die Funktion <B>createDefaultTableHeader()</B> überlädt ist
mir schon klar, trotzdem muss dem System doch die Variable
<B>columnModel</B> bekannt gemacht werden, oder?

Kann mir hierzu jemand helfen bzw. gute Hinweise geben wie ich sowas
angehen kann? ... oder vielleicht eine Referenz wo die implementierung
besser beschrieben ist?


Sven Engel

Jan Reidemeister

unread,
May 17, 2002, 6:13:52 AM5/17/02
to
Hi Sven,

On 17 May 2002 02:33:54 -0700, Sven <sv...@gmx.de> wrote:
> Hallo,
>
> ich möchte eine JTable erzeugen mit gruppierbaren Spaltenheader wie
> unter
>
> http://www2.gol.com/users/tame/swing/examples/JTableExamples1.html
>
> Dargestellt. Ok, der Code ist zwar vorhanden, aber die Vorgehensweise
> ist mir nach langer Einarbeit nicht so ersichtlich. Ich habe versucht
> den Quellcode zu Compilieren und auszuführen, er bringt mir jedoch
> folgende Exceptions:

Also funktionieren tut der Code. Vor langer Zeit hatte ich den auch mal
verwendet.

> Und wie kann er das ganze überhaupt Übersetzten, wenn die Variable
> "columnModel" nicht deklariert bzw. initialisiert ist?

s. unten.

>
> public class GroupableHeader extends JFrame {
>

...


>
> JTable table = new JTable( dm ) {
> protected JTableHeader createDefaultTableHeader() {
> return new GroupableTableHeader(/****************/columnModel/***********/);
> }
> };
>

Du ueberschreibst hier lokal eine JTable, die ein protected
TableColumnModel namens columnModel besitzt. Dies wird dann hier zur
Erzeugung des Headers verwendet.

>
> Kann mir hierzu jemand helfen bzw. gute Hinweise geben wie ich sowas
> angehen kann? ... oder vielleicht eine Referenz wo die implementierung
> besser beschrieben ist?
>

Tja, wirklich sch÷n wiederverwendbar sind die Beispiele von der Seite nicht
gerade, aber sie sollen ja auch nur einen Weg aufzeigen, wie man bestimmte
Sachen realisieren kann.

Zu Deinem Fehler wuerde ich mal vermuten, dass Du bei der Zuordnung der
Gruppen etwas falsch gemacht hast. Ich meine mich zu entsinnen, dass dieser
GroupableTableHeader darauf ziemlich sensibel reagiert. Versuch es doch erst
mal nur mit einer Gruppierung.

Bye. JR

PS. In dieser NG ist es ueblich, seinen vollen Namen im From: anzugeben.

Christian Kaufhold

unread,
May 17, 2002, 1:30:02 PM5/17/02
to
Hallo!

Sven <sv...@gmx.de> wrote:

> http://www2.gol.com/users/tame/swing/examples/JTableExamples1.html

> Dargestellt. Ok, der Code ist zwar vorhanden, aber die Vorgehensweise
> ist mir nach langer Einarbeit nicht so ersichtlich. Ich habe versucht
> den Quellcode zu Compilieren und auszuführen, er bringt mir jedoch
> folgende Exceptions:


GroupableTableHeaderUI läuft (immer noch?) so nur mit JDK1.2, weil es davon
ausgeht, daß jede Spalte einen eigenen HeaderRenderer hat. I.d.R. wird
aber ab JDK1.3 nur der DefaultRenderer des JTableHeaders verwandt.

Fix:

Replace tableColumn.getHeaderRenderer()
by tableColumn.getHeaderRenderer() != null
? tableColumn.getHeaderRenderer()
: header.getDefaultRenderer();


Christian

0 new messages