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

[Swing] Spaltennreite in JTable auf Null setzen

9 views
Skip to first unread message

Susanne Klemm

unread,
Jul 2, 2002, 9:41:11 AM7/2/02
to
Hallo NG

Ich quäl mich mal wieder mit der JTable. Diesmal möchte ich einer
Spalte die Breite 0 zuweisen, da diese nur IDs enthält, die der
internen Verwaltung dienen. Ich hab es so probiert:

table.getColumnModel().getColumn(0).setMaxWidth(0);

Aber die Spalte ist nun ein paar Pixel breit und zeigt mit drei
Punkte. Kann ich die Breite nicht ganz auf Null setzen? Ich hab auch
schon dran gedacht, sie "unsichtbar" zu machen. Ich möchte sie aber
nicht aus dem TableModel entfernen :/

Vielleicht habt ihr ja ein paar Ideen, wie ich mein Problem umsetze...

Danke im Vorraus

Ciao

Susanne


Christian Hauser

unread,
Jul 2, 2002, 9:55:20 AM7/2/02
to

Geht evt. über das Interface TableColumnModel mit removeColumn()

HTH
Hausi

Sven Kiesewetter

unread,
Jul 2, 2002, 10:00:05 AM7/2/02
to
ich hab noch was gefunden.
schau mal in javax.swing.table.TableColumn, das sollte dir weiterhelfen,
vorallem verbessert es das Verständnis über die Funktionsweise von JTable.

Sven Kiesewetter

unread,
Jul 2, 2002, 9:50:36 AM7/2/02
to

Hi Susanne,

mir würde auf Anhieb folgendes einfallen: nimm dein eigenes TableModel
in dem du alle entsprechenden Methoden überschreibst, die Wert anhand
von Spaltennummern liefern. Die Methoden mußt du eben so umsetzen, dass
sie statt Spalte 0 Spalte 1 liefern usw.

Oder du überschreibst das TableColumnModel und erreichst so das
gewünschte Mapping.

Gruß, Sven

Uwe Plonus

unread,
Jul 2, 2002, 9:55:12 AM7/2/02
to
Susanne Klemm wrote:

Was spricht dagegen, diese Spalte nicht mit einem Index zu versehen?

Bsp: Du hast ein Objekt mit zwei Attributen. Das eine gibst Du als Index
0 zurück und das andere gar nicht. Die Tabelle bekommt dann gar nicht
mit, daß es noch ein Attribut gibt.

Alternative: Man kann über das Tabellenmodell auf Indizies zugreifen,
welche durch getColumnCount() nicht abgedeckt sind. Für das obige
Beispiel bedeutet dies, daß getColumnCount() 1 zurückgibt, bei der
Methode getValueAt() ist jedoch der columnIndex 0 und 1 zulässig...

Uwe

Linda Radecke

unread,
Jul 2, 2002, 10:09:19 AM7/2/02
to

Susanne Klemm wrote:

> Ich quäl mich mal wieder mit der JTable. Diesmal möchte ich einer
> Spalte die Breite 0 zuweisen, da diese nur IDs enthält, die der
> internen Verwaltung dienen. Ich hab es so probiert:

> table.getColumnModel().getColumn(0).setMaxWidth(0);

> Aber die Spalte ist nun ein paar Pixel breit und zeigt mit drei
> Punkte. Kann ich die Breite nicht ganz auf Null setzen? Ich hab auch
> schon dran gedacht, sie "unsichtbar" zu machen. Ich möchte sie aber
> nicht aus dem TableModel entfernen :/


Entweder muesstest du alle drei Aufrufe nach 0 machen:

setMinWidth(0);/setMaxWidth(0);/setPreferredWidth(0);

Der Cursor springt aber trotzdem evtl. in diese column,
so besonders schoen finde ich es nicht. Oder auch
TableColumnModel.removeColumn(column) als eine weitere
Moeglichkeit, bzw. der andere noch gepostete Vorschlag,
hab ich aber nicht ausprobiert so.

Linda
--
(=)
/ li...@jalice.ch - http://www.jalice.net
(=)
/ l.ra...@hswzfh.ch - http://www.hswzfh.ch
(=)

Susanne Klemm

unread,
Jul 2, 2002, 10:09:02 AM7/2/02
to

"Christian Hauser" <NO_SPAM_c.hauser@NO_SPAM_ative.ch> schrieb im
Newsbeitrag news:3D21B0C8.6000707@NO_SPAM_ative.ch...

> Susanne Klemm wrote:
> > Hallo NG
> >
> > Ich quäl mich mal wieder mit der JTable. Diesmal möchte ich einer
> > Spalte die Breite 0 zuweisen, da diese nur IDs enthält, die der
> > internen Verwaltung dienen. Ich hab es so probiert:
> >
> > table.getColumnModel().getColumn(0).setMaxWidth(0);
> >
> > Aber die Spalte ist nun ein paar Pixel breit und zeigt mit drei
> > Punkte. Kann ich die Breite nicht ganz auf Null setzen? Ich hab
auch
> > schon dran gedacht, sie "unsichtbar" zu machen. Ich möchte sie
aber
> > nicht aus dem TableModel entfernen :/
> >
> > Vielleicht habt ihr ja ein paar Ideen, wie ich mein Problem
umsetze...
> >
> Geht evt. über das Interface TableColumnModel mit removeColumn()

Geht leider nicht. Die Spalte wird zwar optisch (ich denke auch
inhaltlich) entfernt, aber ich kann dann nicht mehr auf den Inhalt
Zugreifen. Ich krieg dann lauter Fehlermeldung a la diesem:

java.lang.ArrayIndexOutOfBoundsException: 4 >= 4
at java.util.Vector.elementAt(Vector.java:427)
at
javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumn
Model.java:277)
at javax.swing.JTable.convertColumnIndexToModel(JTable.java:1668)
[...]

Ich probier nun mal die anderen vorgeschlagenen Wege. Deiner war halt
der am schnellsten durchzuführende *g*

Trotzdem Danke

Ciao

Susanne

Susanne Klemm

unread,
Jul 2, 2002, 10:15:36 AM7/2/02
to
Hi Linda

"Linda Radecke" <li...@jalice.ch> schrieb im Newsbeitrag
news:3D21B40F...@jalice.ch...
> Susanne Klemm wrote:

> > Ich quäl mich mal wieder mit der JTable. Diesmal möchte ich einer
> > Spalte die Breite 0 zuweisen, da diese nur IDs enthält, die der
> > internen Verwaltung dienen. Ich hab es so probiert:

> > table.getColumnModel().getColumn(0).setMaxWidth(0);

> > Aber die Spalte ist nun ein paar Pixel breit und zeigt mit drei
> > Punkte. Kann ich die Breite nicht ganz auf Null setzen? Ich hab
auch
> > schon dran gedacht, sie "unsichtbar" zu machen. Ich möchte sie
aber
> > nicht aus dem TableModel entfernen :/

> Entweder muesstest du alle drei Aufrufe nach 0 machen:
>
> setMinWidth(0);/setMaxWidth(0);/setPreferredWidth(0);

Wow... das nenn ich doch mal eine einfache schnelle Lösung :) Das war
genau das, was ich gesucht habe.

> Der Cursor springt aber trotzdem evtl. in diese column,
> so besonders schoen finde ich es nicht.

Stört hier weniger, da die meine Applikation eh total mauslastig ist
:)

Vielen Dank

Ciao

Susanne


Alexander Zabara

unread,
Jul 2, 2002, 10:19:15 AM7/2/02
to
Hallo Susanne,

> Geht leider nicht. Die Spalte wird zwar optisch (ich denke auch
> inhaltlich) entfernt, aber ich kann dann nicht mehr auf den Inhalt
> Zugreifen. Ich krieg dann lauter Fehlermeldung a la diesem:
>
> java.lang.ArrayIndexOutOfBoundsException: 4 >= 4
> at java.util.Vector.elementAt(Vector.java:427)
> at

[...]


Ich glaube der Fehler liegt daran, dass Du auf die Daten über
die Tabelle selbst zugreifst.
Das geht ohne Fehlermeldung über TableModel, ungefähr so:

((DefaultTableModel)table.getModel()).getValueAt(int,int);

Beim Entfernen der Spalte werden die Daten nur aus der Tabelle gelöscht,
aber nicht aus dem Model.

[...]

>
> Susanne
>

Gruß

Alexander


Linda Radecke

unread,
Jul 2, 2002, 10:26:09 AM7/2/02
to

Susanne Klemm wrote:

> "Linda Radecke" <li...@jalice.ch> schrieb im Newsbeitrag
> news:3D21B40F...@jalice.ch...

[...]
> > setMinWidth(0);/setMaxWidth(0);/setPreferredWidth(0);

> Wow... das nenn ich doch mal eine einfache schnelle Lösung :) Das war
> genau das, was ich gesucht habe.

> > Der Cursor springt aber trotzdem evtl. in diese column,
> > so besonders schoen finde ich es nicht.

> Stört hier weniger, da die meine Applikation eh total mauslastig ist
> :)

Hallo Susanne,

wenn es fuer dich so stimmt, freut mich das, bzgl. removeColumn()
findest du auch hier noch einen Abschnitt zum Beachten:

http://www.chka.de/swing/table/columns.html

Susanne Klemm

unread,
Jul 2, 2002, 10:34:34 AM7/2/02
to

"Alexander Zabara" <zab...@web.de> schrieb im Newsbeitrag
news:afscrk$gp26o$1...@ID-104012.news.dfncis.de...

Ja wenn das so ist...
Stimmt, ich greif eigentlich immer über table.getValueAt() zu. Nur mag
ich das jetzt nicht überall umschreiben :) Aber für's nächste mal,
werd ich's mir merken.

Ciao

Susanne


Kurt Harders

unread,
Jul 2, 2002, 10:35:29 AM7/2/02
to
Hallo Susanne,

Susanne Klemm <Sus...@wtfc.de> wrote:

> Ich quäl mich mal wieder mit der JTable. Diesmal möchte ich einer
> Spalte die Breite 0 zuweisen, da diese nur IDs enthält, die der
> internen Verwaltung dienen. Ich hab es so probiert:

Wieso sollte man etwas mit Breite 0 in der Praesentationschicht
noch haben? Im Modell OK, aber warum dann nicht nur dort?

Gruss, Kurt

--
Kurt Harders Modellbahnelektronik
mailto:ku...@kharders.de
Modellbahnelektronik: http://www.modellbahn.kharders.de
privat: http://www.kharders.de

Kay Hornig

unread,
Jul 2, 2002, 11:04:29 AM7/2/02
to
Hallo Susanne,


"Susanne Klemm" <Sus...@wtfc.de> wrote:
>
>Punkte. Kann ich die Breite nicht ganz auf Null setzen? Ich >hab auch
>schon dran gedacht, sie "unsichtbar" zu machen. Ich möchte sie aber
>nicht aus dem TableModel entfernen :/
>


ich mache das "immer" so:
...
TableColumn col = null;
... // 0..12
col = new TableColumn(13);
col.setHeaderValue(strColNames[11]);
col.setCellRenderer(default_renderer);
gettblTermin().getColumnModel().removeColumn(col);
...
damit sind sie im Model, aber nicht in der Tabelle sichtbar.
Ich hoffe, ich habe nichts wesentliches vergessen. Aber die Vorredner haben ja
schon Hinweise gegeben ...


ciao
Kay

--
__________________________________________________________
News suchen, lesen, schreiben mit http://newsgroups.web.de

0 new messages