Tabelleneintrag einfügen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich habe folgende Methode die aufgerufen wird sobald ich
auf einen Button klicke.

Sie schreibt einen String über setValue in das Model rein.
Der Wert in der Tabelle wird jedoch erst angezeigt nachdem ich die Selektierte Zeile verlasse.

Weiß jemand warum ?

Code:
public static void addBemerkung(String bemerkung)
	{
		int row = tblAuswertungTabelle.getSelectedRow();
				
		if(tblAuswertungTabelle.isCellEditable(row, 5))
		{
			model.setValueAt(bemerkung , row, 5);
		}
		else
		{
			System.out.println("Zelle nicht editierbar");
		}
	}


Die Set Methode schaut so aus:

Code:
public void setValueAt(Object value, int row, int col) 
	{
	   bemerkungen[row] = (String) value;
       fireTableCellUpdated(row, col);
    }
 

Niki

Top Contributor
Du solltest ein eigenes TableModel verwenden und auf Objekten arbeiten, nicht direkt über setValueAt. Dieses TableModel kannst du verwenden, du musst nur noch davon ableiten und die getValueAt Methode überschreiben:
Code:
import java.util.ArrayList;
import java.util.List;


import javax.swing.table.AbstractTableModel;

public abstract class TableModel<T> extends AbstractTableModel {

	private List<T> content = null;
	private String[] header = null;

	public TableModel(List<T> content, String[] header) {
		this.content = content;
		this.header = header;
	}

	public TableModel(String[] header) {
		this(new ArrayList<T>(), header);
	}

	public List<T> getContent() {
		return content;
	}

	public void setContent(List<T> content) {
		this.content = content;
		this.fireTableDataChanged();
	}

	public void addElement(T o) {
		int pos = content.size();
		content.add(o);
		this.fireTableRowsInserted(pos, pos + 1);
	}

	public void editElement(T oldo, T newo) {
		int pos = content.indexOf(oldo);
		if (pos == -1) {
			return;
		}

		content.remove(oldo);
		content.add(pos, newo);
		this.fireTableRowsUpdated(pos, pos + 1);
	}

	public void editElement(int pos, T newo) {
		content.remove(pos);
		content.add(pos, newo);
		this.fireTableRowsUpdated(pos, pos + 1);
	}

	public void deleteElement(T o) {
		int pos = content.indexOf(o);
		if (pos == -1) {
			return;
		}

		content.remove(o);
		this.fireTableRowsDeleted(pos, pos + 1);
	}

	public void deleteElement(int pos) {
		content.remove(pos);
		this.fireTableRowsDeleted(pos, pos + 1);
	}

	public int getColumnCount() {
		return header.length;
	}

	public String getColumnName(int col) {
		return header[col];
	}

	public int getRowCount() {
		return content.size();
	}

	public T getElementAt(int index) {
		return content.get(index);
	}
	
	

}
 

André Uhres

Top Contributor
Anonymous hat gesagt.:
Ich habe folgende Methode die aufgerufen wird sobald ich
auf einen Button klicke.

Sie schreibt einen String über setValue in das Model rein.
Der Wert in der Tabelle wird jedoch erst angezeigt nachdem ich die Selektierte Zeile verlasse.

Weiß jemand warum ?..

Dein Code funktioniert bei mir, ohne besagtes Problem.
 
G

Guest

Gast
gut denken wir uns mal mein Problem wech.

Wie könnte man in Laufzeit eine Tabellenzellle füllen.

Das heißt ich habe z.B. eine JTextArea und sobald ich da was eingebe wird es auch in der Zelle
eingegeben.
 

André Uhres

Top Contributor
Anonymous hat gesagt.:
gut denken wir uns mal mein Problem wech.
Wie könnte man in Laufzeit eine Tabellenzellle füllen.
Das heißt ich habe z.B. eine JTextArea und sobald ich da was eingebe wird es auch in der Zelle
eingegeben.
Du gibst der JTextArea einen DocumentListener der die JTable aktualisiert:
Code:
       jTextArea1.getDocument().addDocumentListener(new DocumentListener() {

            public void insertUpdate(DocumentEvent e) {
                updateTable();
            }

            public void removeUpdate(DocumentEvent e) {
                updateTable();
            }

            public void changedUpdate(DocumentEvent e) {
                updateTable();
            }

            private void updateTable() {
                int row = jTable1.getSelectedRow();
                if(row < 0)return ;
                jTable1.setValueAt(jTextArea1.getText(), row, 3);
            }
        });
Und du gibst der JTable einen ListSelectionListener der die JTextArea aktualisiert:
Code:
       jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

            public void valueChanged(ListSelectionEvent e) {
                if(e.getValueIsAdjusting())return ;
                int row = jTable1.getSelectedRow();
                Object val = jTable1.getValueAt(row, 3);
                if(val != null){
                    jTextArea1.setText(val.toString());
                }else{
                    jTextArea1.setText("");
                }
            }
        });
    }
 

André Uhres

Top Contributor
Niki hat gesagt.:
Du solltest ein eigenes TableModel verwenden und auf Objekten arbeiten, nicht direkt über setValueAt..
Die Idee ist im Prinzip gut so, aber wir müssen die Methode "setValueAt" trotzdem überschreiben,
wenn die Zellen editierbar sein sollen (setValueAt ist von Haus aus leer) :wink:
 

Niki

Top Contributor
Nicht umbedingt, ich hab das mal so gelöst und funktioniert auch:
Code:
DefaultCellEditor editor = new DefaultCellEditor(new JTextField());
		editor.addCellEditorListener(new CellEditorListener(){
			public void editingStopped(ChangeEvent e) {
				DefaultCellEditor source = (DefaultCellEditor)e.getSource();
				JTextField tf = (JTextField)source.getComponent();
				String text = tf.getText();
				int row = table.getSelectedRow();
				int col = table.getSelectedColumn();
				
				String[] s = model.getElementAt(row);
				s[col] = text;
				model.editElement(row, s);
			}
			
			public void editingCanceled(ChangeEvent e) {
				
			}
		});
		
		table.getColumnModel().getColumn(0).setCellEditor(editor);
 
G

Guest

Gast
Der Quellcode von dir André funktioniert, nur lande ich dann wieder beim selben
Problem und zwar das ich die Zelle verlassen muss um den Inhalt sichtbar zu machen :(
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C In DefaultTableModel nachträglich Werte einfügen Allgemeine Java-Themen 2
A Java ListNode Element einfügen ohne Bibliothek Allgemeine Java-Themen 6
S Link element an vorletzte stelle einfügen Allgemeine Java-Themen 2
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
G JTextField Inhalt in einem Long einfügen Allgemeine Java-Themen 2
G Excel Tabelle lesen und in neue Excel Tabelle einfügen Allgemeine Java-Themen 11
S Wo .close() einfügen? Allgemeine Java-Themen 0
I Apache POI Word Text einfügen Allgemeine Java-Themen 26
K Swing OpenStreetMap in JFrame einfügen Allgemeine Java-Themen 1
B Eclipse Ekit-Editor einfügen Allgemeine Java-Themen 0
T Neuen Kanal in Bild (TIFF) einfügen à la Photoshop Allgemeine Java-Themen 2
D Symbol in Word-Dokument einfügen Allgemeine Java-Themen 1
N Automatisches einfügen einer selbst generierten ID in Klasse mit Annotation Allgemeine Java-Themen 8
F 2D Array in jList einfügen Allgemeine Java-Themen 8
J XML Dokument Zeilenumbruch in den Quellcode einfügen Allgemeine Java-Themen 5
H Semicolon Einfügen JSP Seite Allgemeine Java-Themen 9
K Neue Elemente in JList einfügen Allgemeine Java-Themen 2
Todesbote Excel Blattschutz aufheben und Daten einfügen Allgemeine Java-Themen 3
T Mit Apache Poi Daten aus einer Excel Tabelle kopieren und in Word einfügen Allgemeine Java-Themen 1
Z Sortiertes Einfügen in doppelt verkettete Liste Allgemeine Java-Themen 5
S Text in for Schleife in Label einfügen Allgemeine Java-Themen 4
S JPanel einfügen in MainClass Allgemeine Java-Themen 4
R Schnelles Einfügen in SortedSet Allgemeine Java-Themen 11
Z Ausschneiden, Kopieren, Einfügen, Löschen in JTextArea Allgemeine Java-Themen 5
JAVAnnik Bilder in JLabel Array einfügen Allgemeine Java-Themen 2
E Bild mit Listener einfügen Allgemeine Java-Themen 3
reibi Leeres Verzeichnis in ein Zipfile einfügen Allgemeine Java-Themen 12
N Tupel in eine SET einfügen Allgemeine Java-Themen 3
S Progressbar einfügen Allgemeine Java-Themen 4
W xml File einlesen und in eine andere xml File einfügen.. Allgemeine Java-Themen 2
L List <Hauser> in Combobox einfügen Allgemeine Java-Themen 5
D Kopieren und Einfügen Allgemeine Java-Themen 8
D Einfügen über JMenuBar Allgemeine Java-Themen 4
N einfügen string in methode Allgemeine Java-Themen 10
R doppelt verkettete Liste: Fehler beim Einfügen Allgemeine Java-Themen 3
G Zeile einfügen in TreeTable Allgemeine Java-Themen 2
G Teilstring in einen String einfügen Allgemeine Java-Themen 5
P JTree/ Nodes einfügen Allgemeine Java-Themen 2
G Plug-in: Wie JButton einfügen? Allgemeine Java-Themen 12
A FileChannel: Mitten in eine Datei was einfügen Allgemeine Java-Themen 2
W Daten in Access einfügen über Java Allgemeine Java-Themen 21
G Plugin (Visual Editor) in Eclipse einfügen Allgemeine Java-Themen 2
Zed JList Object einfügen und Text anzeigen Allgemeine Java-Themen 3
P Timestamp in eine Firebird-Datenbank einfügen Allgemeine Java-Themen 6
K Bilder mit Java in MS Word einfügen Allgemeine Java-Themen 2
M Text in JTextfield einfügen sofort dann wird Text gekürzt Allgemeine Java-Themen 2
H html datein einfügen Allgemeine Java-Themen 7
M Pfeilzeichen (z.B. ALT + 26) einfügen Allgemeine Java-Themen 2
S Bild aus Zwischenablage in Applet einfügen Allgemeine Java-Themen 2
R Frage zu einfügen in generische lineare Liste Allgemeine Java-Themen 7
S Werte in Tabelle einfügen! Allgemeine Java-Themen 9
N Zeilenumbruch in String nach jeweils x Zeichen einfügen? Allgemeine Java-Themen 6
G Text cursorgenau einfügen [ehemals hilfe ... dringend] Allgemeine Java-Themen 7
G Hilfe - JButton in JTable (Spalte) einfügen! Allgemeine Java-Themen 6
S addAtPosition - Zahl an einer bestimmten Position einfügen Allgemeine Java-Themen 8
G wie Klasse in JFrame "einfügen" Allgemeine Java-Themen 12
D iText: Tabelle in Footer einfügen Allgemeine Java-Themen 6
G Einfügen von Werten aus TXT-Datei in ein Array !?! Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben