TableModel

Status
Nicht offen für weitere Antworten.

Ocean-Driver

Bekanntes Mitglied
Hallo,


Ich habe eine Tabelle Stunden mit nur einer Spalte. Jetzt würde ich diese gerne mit einer ArrayList<String> füllen.


Jetzt kriege ich diese Liste über eine statische Methode aus der Klasse Tag.getZeitraeume() (Es ist eine statische Methode).

Beim anlegen des TableModels übergebe ich also per Tag.getZeitraeume(); die Daten.

Hier ist das TabellenModell

Code:
package stundenplaner.TableModel;
import java.util.ArrayList;

import javax.swing.table.AbstractTableModel;

public class StundenTableModel extends AbstractTableModel{

    private ArrayList<String> stunden;
    
      
    public StundenTableModel(ArrayList<String> stunden)
    {
        this.stunden = stunden;

    }
        //Anzahl der Spalten
	public int getColumnCount() {
		return 1;
	}
        //Anzahl der Datensätze
	public int getRowCount() {
		return stunden.size();
	}

        
        //Spaltenname(n)
     public String getColumnName()
    {
        return "Stunden";
    }

        
    public boolean isCellEditable() {
            return false;
    }
    
    @Override
       public boolean isCellEditable(int rowIndex, int columnIndex) {
            return false;
    }

    public Object getValueAt(int columnIndex) {
        return stunden.get(columnIndex);
    }
    

    public Object getValueAt(int rowIndex, int columnIndex) {
        return this.getValueAt(columnIndex);
    }
    



}



Und hier erzeuge ich die Tabelle + Modell:


Code:
jTable2 = new javax.swing.JTable();
StundenTableModel STM = new StundenTableModel(Tag.getZeitraeume());
jTable2.setModel(STM);

jTable2.setName("jTable2"); // NOI18N



jScrollPane3.setViewportView(jTable2);




Ich glaube mir ist das mit dem Tabellenmodell noch nicht ganz klar. Was fehlt an dem Model, um es mit den Daten zu füllen? Er füllt jedoch die Tabelle komplett mit dem ersten Eintrag (und das 6x mal --> die ArrayList ist auch 6 Einheiten groß).
 
B

Beni

Gast
Code:
    public Object getValueAt(int rowIndex, int columnIndex) {
        return this.getValueAt(columnIndex);
    }

Du beachtest nur columnIndex, also steht in allen Zeilen einer Spalte dasselbe. Versuch es mal mit rowIndex.
 

Ocean-Driver

Bekanntes Mitglied
Hi,


Wie kann ich denn die gerade selektierte Spalte zurückerhalten?

Ich will in der Tabelle editable auf false setzen. Durch auf einen Klick auf einen Button soll die Selektierte Spalte dann freigegeben werden.
 

Ocean-Driver

Bekanntes Mitglied
Hallo,


Ich hab jetzt mal ein einzelnen Datensatz selektet und diesen als Integer abgespeichert. Ich hab mir die variable mal ausgegeben, die Werte liegen alle im gültigen Bereich.
Dann habe ich mit aus der Tabelle den Wert an der Stelle i (aus der Spalte 1) geholt und in nem String gespeichert (getValueAt gibt ein Objekt zurück, was aber 100% ein String ist).

Wenn ich mir den Wert aber speichere, erhalte ich eine ganze Latte von Fehlermeldungen:


Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277)
at javax.swing.JTable.convertColumnIndexToModel(JTable.java:2496)
at javax.swing.JTable.getValueAt(JTable.java:2638)
at stundenplaner.StundenplanerView.editZeitraumButtonActionPerformed(StundenplanerView.java:373)
at stundenplaner.StundenplanerView.access$1000(StundenplanerView.java:27)
at stundenplaner.StundenplanerView$7.actionPerformed(StundenplanerView.java:316)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Ich weiß nicht woher die ArrayIndexOutOfBoundsException kommen soll, ich stehe keine Index-Überschreitung.


Hier mal mein Quellcode (der der relevant ist):

Code:
        int i = TableZeitraeume.getSelectedRow();
        
        System.out.println(i);
        
        String a = (String) TableZeitraeume.getValueAt(i, 1);
        
        
        TextZeitraum.setText((String)TableZeitraeume.getValueAt(i, 1));


Hier die Methode die den String zurückliefert:
Code:
    public Object getValueAt(int rowIndex, int columnIndex) { 
               return stunden.get(rowIndex); 
    }
 
B

Beni

Gast
Code:
String a = (String) TableZeitraeume.getValueAt(i, 1);

Der kleinste Index eines Arrays ist in Java 0. Rate mal was der kleinste Index bei einem TableModel ist.
 

Ocean-Driver

Bekanntes Mitglied
Wenn ich ein Feld bearbeite, und die JTable dann aktularisiere will,
male ich die Table einfach mit repaint(); neu,oder setzte ich den Wert in der Tabelle einfach direkt auf den aus dem TextField?

Was ist die gängiere Methode?
 
B

Beni

Gast
Die gängige Methode ist, dass das TableModel ein TableModelEvent abfeuert (an seine TableModelListener schickt). Das AbstractTableModel hat dazu einige "fireXYZ"-Methoden, die das für dich machen können.
 

Ocean-Driver

Bekanntes Mitglied
Also syntaktisch müsste man doch den TableModelListener aufrufen und diesem das TableModelEvent vom TableModel zuschicken.

richtig?


Nur, wenn ich mir das Model über TblZeitraeume.getModel(); hole, kriege ich keine fire methode?
 
B

Beni

Gast
Wer ist für den Inhalt des Models verantwortlich, wer kennt den Inhalt des Models? Das Model selbst!
D.h. das Model sollte die Events selber verschicken, das sollte man nicht "von aussen" aufrufen.

Dein "StundenplanModel" hat da ja eine Methode "setValueAt". Diese Methode wird von der JTable aufgerufen, wenn man eine Zelle editiert hat. Und da kannst du dann auch gleich der Aufruf für "fire..." machen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
C TableModel zugehörige Table ermitteln AWT, Swing, JavaFX & SWT 3
E Eigenes TableModel für ArrayList<String[]> AWT, Swing, JavaFX & SWT 5
W Neues TableModel und JTable wird nicht refreshed AWT, Swing, JavaFX & SWT 3
D Swing JTable TableModel + RowCount AWT, Swing, JavaFX & SWT 18
JAVAnnik Problem mit TableModel AWT, Swing, JavaFX & SWT 3
S Swing Setzen von TableModel liefert NullPointer AWT, Swing, JavaFX & SWT 6
S TableModel Header wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
K verständnissproblem mit TableModel AWT, Swing, JavaFX & SWT 2
K zwei TableModel AWT, Swing, JavaFX & SWT 9
N Swing Eintrag in JTable an dessen TableModel weiterreichen AWT, Swing, JavaFX & SWT 3
hdi Swing Komisches Problem mit TableModel & setAutoCreateRowSorter AWT, Swing, JavaFX & SWT 2
E Swing TableModel fireTableDataChanged führt zu IndexOutOfBoundsException AWT, Swing, JavaFX & SWT 9
F Tablemodel zu mehreren Tabellen AWT, Swing, JavaFX & SWT 6
K JTable +TableModel --> Anpassung der Tabellengröße (Zeilenanzahl) AWT, Swing, JavaFX & SWT 3
K TableModel mit Daten aus Datenbank füllen AWT, Swing, JavaFX & SWT 7
K TableModel Daten übergeben AWT, Swing, JavaFX & SWT 9
L Klick auf JTable -> EditorPane manipulieren, Fragen zu TableModel AWT, Swing, JavaFX & SWT 9
X Swing Daten aus Vector ins TableModel ?? AWT, Swing, JavaFX & SWT 12
E JTable und tablemodel Verständnisproblem AWT, Swing, JavaFX & SWT 3
C Kann Konstruktor von eigenem TableModel nicht nutzen AWT, Swing, JavaFX & SWT 2
D eigenes Tablemodel, Zeile löschen ArrayindexOOB excp AWT, Swing, JavaFX & SWT 4
P Eigenes TableModel abgeleitet von AbstractTableModel (neue rows nicht sichtbar) AWT, Swing, JavaFX & SWT 6
S Table oder TableModel so ueberschreiben, dass Columns minimale Breite haben? AWT, Swing, JavaFX & SWT 2
R JTable - TableModel AWT, Swing, JavaFX & SWT 6
D JTable - TableColumnModel - TableModel AWT, Swing, JavaFX & SWT 3
S JTable nimmt TableModel nicht an AWT, Swing, JavaFX & SWT 4
D Mehrere CheckBoxen im TableModel wechselseitig ausschließen AWT, Swing, JavaFX & SWT 5
R TableModel und Columnmodel - Zusammenspiel? AWT, Swing, JavaFX & SWT 2
G TableModel mit anderen Spalten AWT, Swing, JavaFX & SWT 4
G JTable - TableModel aus ArrayList AWT, Swing, JavaFX & SWT 8
D TableModel + Daten bearbeiten + Daten zurückschreiben AWT, Swing, JavaFX & SWT 9
A JTable, eigenes TableModel und dessen Objekte AWT, Swing, JavaFX & SWT 4
G Frage zu JTable und TableModel AWT, Swing, JavaFX & SWT 4
V Vector->TableModel->RowSorter:Bei Markierung Index im AWT, Swing, JavaFX & SWT 2
S Daten aus editierbaren TableModel lesen AWT, Swing, JavaFX & SWT 7
F TableModel Spaltenkoepfe benamen, wie? AWT, Swing, JavaFX & SWT 2
F Wie MouseListener bei TableModel anmelden? AWT, Swing, JavaFX & SWT 3
G JTable, TableModel und CellRenderer AWT, Swing, JavaFX & SWT 3
R DataVector bei TableModel - Class Cast Exception AWT, Swing, JavaFX & SWT 9
N TableModel mit CheckBox? AWT, Swing, JavaFX & SWT 5
J Tablemodel AWT, Swing, JavaFX & SWT 2
G jTable + ScrollPane (+ TableModel) AWT, Swing, JavaFX & SWT 7
D invokeLate bei änderung im TableModel? AWT, Swing, JavaFX & SWT 4
G TableModel von JTable wieder entfernen AWT, Swing, JavaFX & SWT 10
G TableModel auswerten und in Datei schreiben AWT, Swing, JavaFX & SWT 3
P JTable TableModel JFreeReport AWT, Swing, JavaFX & SWT 4
T anlegen einer jTable mit TableModel AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben