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
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.
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