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

Benutzereingaben in jTable

0 views
Skip to first unread message

Benjamin Weinhold

unread,
Mar 23, 2003, 7:58:06 AM3/23/03
to
Erstmal ein herzliches Hallo an alle, da ich hier neu bin.

Ich stehe am Anfang meines Studiums und wurde mit Java konfrontiert. Es
macht Spaß alles mögliche zu entdecken und herauszufinden, aber ich bin halt
noch Anfänger.
Zu Übungszwecken möchte ich ein kleines Warenwirtschaftssystem mit Kunden-,
Artikel-, Lieferantenstamm usw. programmieren, um einfach ein bischen
Java-Erfahrung zu sammeln.

Nun aber zu meinem Problem:
Ich lege in einem Frame eine jTable an, die auch wunderbar funktioniert.
Allerdings würde ich gerne verhindern, dass der Benutzer die Tabelleninhalte
verändern kann.
In den FAQ habe ich schon folgende Lösung gelesen, mit der ich aber nicht so
ganz klarkomme (siehe weiter unten).

import javax.swing.table.DefaultTableModel
/**
* Diese Klasse repräsentiert das Datenmodell für eine oder mehrere
* Tabellen
*
* Die Zuweisung geschieht über JTable.setModel(new YourTableModel()));
*/
public class MyTableModel extends DefaultTableModel {
/**
* aus der API: Returns true if the cell at rowIndex and columnIndex
* is editable. Otherwise, setValueAt on the cell will not change the
* value of that cell.
*/
public boolean isCellEditable(int row, int column) {
return false;
}
}

Wenn ich den Code aber als seperate Klasse anlege kommen bei der Anweisung

jTable1.setModel(new MyTableModel());

immer folgende Laufzeitfehler zum Vorschein:


java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.elementAt(Vector.java:427)
at
javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.
java:277)
at Bestellfenster.initBestellfenster(Bestellfenster.java:111)
at Bestellfenster.<init>(Bestellfenster.java:40)
at Hauptnavigation.btnBestellungen_actionPerformed(Hauptnavigation.java:150)
at Hauptnavigation$1.actionPerformed(Hauptnavigation.java:72)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1767)
at
javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButto
n.java:1820)
at
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:4
19)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)
at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener
.java:258)
at java.awt.Component.processMouseEvent(Component.java:5022)
at java.awt.Component.processEvent(Component.java:4819)
at java.awt.Container.processEvent(Container.java:1525)
at java.awt.Component.dispatchEventImpl(Component.java:3527)
at java.awt.Container.dispatchEventImpl(Container.java:1582)
at java.awt.Component.dispatchEvent(Component.java:3368)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3359)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3074)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3004)
at java.awt.Container.dispatchEventImpl(Container.java:1568)
at java.awt.Window.dispatchEventImpl(Window.java:1586)
at java.awt.Component.dispatchEvent(Component.java:3368)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:445)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.ja
va:191)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java
:144)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:130)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:98)

Wäre echt klasse, wenn mir da jemand weiterhelfen könnte.

Gruß,
Benjamin


Christian Kaufhold

unread,
Mar 23, 2003, 9:59:30 AM3/23/03
to
Hello!

Benjamin Weinhold <benjamin...@web.de> wrote:

> public class MyTableModel extends DefaultTableModel {

> public boolean isCellEditable(int row, int column) {
> return false;
> }
> }
>
> Wenn ich den Code aber als seperate Klasse anlege kommen bei der Anweisung
>
> jTable1.setModel(new MyTableModel());

Das erzeugt ein MyTableModel mit 0 Spalten.


> immer folgende Laufzeitfehler zum Vorschein:
>
>
> java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
> at java.util.Vector.elementAt(Vector.java:427)
> at
> javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.
> java:277)
> at Bestellfenster.initBestellfenster(Bestellfenster.java:111)


Daher gibt es keine Spalte 0.


-> DefaultTableModel.setColumnCount, oder besser gleich einen (anderen)
Superclass-Konstruktor aufrufen.

z.B.

public MyTableModel(int columnCount)
{
super(0, columnCount);
}

Christian

Benjamin Weinhold

unread,
Mar 23, 2003, 4:32:29 PM3/23/03
to
Hallo Christian,

das war also des Rätsels Lösung. Funktioniert wunderbar. Vielen Dank für
deine Hilfe. Wusste echt nicht mehr weiter.
Achso - kannst du mir vielleicht eine gute Quelle im Internet empfehlen, wo
ich sowas in Zukunft nachlesen kann, oder gilt auch hier: Übung macht den
Meister?

Gruß,
Benjamin

"Christian Kaufhold" <use...@chka.de> schrieb im Newsbeitrag
news:2t3e7dcae...@simia.chka.de...

Hubert Partl

unread,
Mar 24, 2003, 5:29:46 AM3/24/03
to
Benjamin Weinhold <benjamin...@web.de> wrote:
> Achso - kannst du mir vielleicht eine gute Quelle im Internet empfehlen, wo
> ich sowas in Zukunft nachlesen kann

http://java.sun.com/docs/
http://java.sun.com/docs/books/tutorial/index.html

--
Hubert Partl pa...@mail.boku.ac.at
ZID BOKU Wien http://homepage.boku.ac.at/partl/
*****************************************************
******* MAKE LOVE, NOT WAR! ***********************

0 new messages