Model richtig aktualisieren

Status
Nicht offen für weitere Antworten.

Silicium

Mitglied
Ganz einfache Sache.
Ich versuche einen Wert durch klicken auf einen Button in das Model zu schreiben.
Der Wert kommt von einer JTextArea.
Der Wert wird erst sichbar sobald ich die Selektierete Zeile verlasse.
Der soll jedoch sofort aktualsieren.

Hier der Code:

Model:

Code:
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

import view.Auswertung_Tabelle;
import view.Ergebnis_Tabelle;

public class ErgebnisModell implements TableModel
{
	private String[] bemerkungen;
	private String[] messwert;
	
	public ErgebnisModell()
	{
		bemerkungen = new String[getRowCount()];
		messwert = new String[getRowCount()];
	}

	public void addTableModelListener(TableModelListener arg0)
	{
		
	}

	public Class<?> getColumnClass(int arg0)
	{
		return String.class;
	}

	public int getColumnCount()
	{
		return 2;
	}

	public String getColumnName(int spaltenIndex)
	{
		switch(spaltenIndex)
                {
                        case 0:
                               return "Messwert";
                        case 1:
                               return "Bemerkung";
                }
	}

	public int getRowCount()
	{
		return 10;
	}

	public Object getValueAt(int zeilenIndex, int spaltenIndex )
	{
		switch (spaltenIndex)
		{
		case 0:
			return messwert[zeilenIndex];
		case 1:
			return bemerkungen[zeilenIndex];	
		default: return null;
		}
	}

	public boolean isCellEditable(int arg0, int arg1)
	{
		return false;
	}

	public void removeTableModelListener(TableModelListener arg0)
	{
		
	}

	public void setValueAt(Object value, int zeilenIndex, int spaltenIndex)
	{
	       switch (spaltenIndex)
		{
		        case 0:
			      return messwert[zeilenIndex];
		        case 1:
			      return bemerkungen[zeilenIndex];	
		        default: return null;
		}
	}
}


Methodenaufruf über Button:
Code:
btnSpeichern.addActionListener(new ActionListener()
        {
        	public void actionPerformed(ActionEvent e)
        	{
        		Ergebnis_Tabelle.addBemerkung(txtabem.getText());
        	}
        });


Methode zum Speichern
Code:
public static void addBemerkung(String bemerkung)
	{
		int row = tblErgebnisTabelle.getSelectedRow();
		{	
			model.setValueAt(bemerkung , row, 1);
		}
	}
 
S

SlaterB

Gast
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);

edit: ach halt, du redest ja über eine TextArea, ich war woanders ;)

wo wird überhaupt was selektiert?,
wenn du in der TextArea schreibst und einen Button drückst, dann muss die JTable doch gar nicht selektiert sein?
 

Niki

Top Contributor
Ich glaube das hilft ihm nicht weiter, weil er ja das Model über einen Button ändern möchte. Warum leitest du nicht von AbstractTableModel ab und erweiterst dieses?
Du solltest in deinem Model eine Liste von Objekten halten. Ein Objekt repräsentiert eine Zeile in der Tabelle. Dann machst du eine add/edit/delete-Object Methode und manipulierst die List, anschließend machst du ein fireTableRowsInserted/Updated....
die getValueAt Methode würde dann mittels list.get(row) das jeweilige Objekt holen und mit einem switch kannst du die Spalteninhalte zurück liefern:
Code:
public Object getValueAt(int row, int col){
  Person p = list.get(row);
  switch(col){
    case 0 : return p.getZuname();
    case 1 : return p.getVorname();
  }

  return null;
}
 

Silicium

Mitglied
wo wird überhaupt was selektiert?,
wenn du in der TextArea schreibst und einen Button drückst, dann muss die JTable doch gar nicht selektiert sein?

hm eigentlich ich will ja nicht irgendwo was speichern sondern in der selektierten Zeile.
 
S

SlaterB

Gast
tja, ich bin einfach noch im Schlaf heute ;)

also dann wollen wir mal aus einem richtigen TableModel klauen, z.B. dem DefaultTableModel
Code:
public void setValueAt(Object aValue, int row, int column) {
        Vector rowVector = (Vector)dataVector.elementAt(row);
        rowVector.setElementAt(aValue, column);
        fireTableCellUpdated(row, column);
    }
so ein
fireTableCellUpdated(row, column);
muss schon sein, damit die JTable geupdated wird

wenn du aber gar keine Listener hast (addListener() leer) und auch keine entsprechende fireTableCellUpdated()-Operation,
dann geht das natürlich nicht,

erbe von AbstractTableModel, da ist das alles vorhanden (und überschreibe addListener() dann nicht!)
 

Niki

Top Contributor
Wieder einmal poste ich das Model welches ich gerne verwende:
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);
	}

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

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

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

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

	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);
	}
}

Und hier noch eine TestKlasse:
Code:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class MainFrame extends JFrame {
	
	private JTable table = null;
	
	private TableModel<String[]> model = null;
	
	private JTextField area = null;
	
	public MainFrame(){
		super("CellEditor");
		guiInit();
		pack();
		setLocationRelativeTo(null);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	
	private void guiInit(){
		Container cont = getContentPane();
		cont.setLayout(new GridBagLayout());
		Insets i = new Insets(3, 3, 3, 3);
		GridBagConstraints c = new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
				GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, i, 0, 0);
		
		model = new TableModel<String[]>(new String[]{"A", "B"}){
			public Object getValueAt(int rowIndex, int columnIndex) {
				String[] s = (String[])getElementAt(rowIndex);
				return s[columnIndex];
			}
		};	
		
		table = new JTable(model);
		
		area = new JTextField();
		
		JButton jbEdit = new JButton("Ändern");
		jbEdit.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				int i = table.getSelectedRow();
				String text = area.getText();
				if(i == -1 || text.length() == 0)
					return;
				
				String[] s = model.getElementAt(i);
				s[0] = text;
				model.editElement(s, s);
			}
		});
		
		JScrollPane scroller = new JScrollPane();
		scroller.getViewport().add(table);
		
		scroller.getViewport().setPreferredSize(new Dimension(300, 200));	
	
		
		c.weightx = 1.0;
		c.weighty = 1.0;
		c.fill = GridBagConstraints.BOTH;
		cont.add(scroller, c);
		c.gridy++;
		c.weighty = 0.0;
		c.fill = GridBagConstraints.HORIZONTAL;
		cont.add(area, c);
		c.weightx = 0.0;
		c.weighty = 0.0;
		c.fill = GridBagConstraints.NONE;
		c.gridy++;
		cont.add(jbEdit, c);
		
		List<String[]> content = new ArrayList<String[]>();
		for(int j = 0; j < 10; j++){
			content.add(new String[]{j + "/" + 0, j + "/" + 1});
		}
		model.setContent(content);
			}	
	
	public static void main(String[] args) {		
		new MainFrame().setVisible(true);
	}
}
 

André Uhres

Top Contributor
Code:
model = new DefaultTableModel(new String[]{"Messwert", "Bemerkung"}, 10) {
    public boolean isCellEditable(final int row, final int column) {
        return false;
    }
};
Aber warum eigentlich einfach machen, wenn's auch kompliziert geht :roll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java model class ? Allgemeine Java-Themen 9
J Variablen Array ertellen bei model.put Allgemeine Java-Themen 13
Slevin MVC Model Allgemeine Java-Themen 9
P MVC - Frage zu Model Allgemeine Java-Themen 4
S JTable: Model durch ein anderes ersetzen Allgemeine Java-Themen 2
H Model-View-Controller Fail? Allgemeine Java-Themen 31
P Model + ModelInterfaces Allgemeine Java-Themen 10
M Model View Controller Entwurfsmuster! Allgemeine Java-Themen 11
G Transaction Script, Table- Domain Model Allgemeine Java-Themen 2
J Model View Controller Architektur Allgemeine Java-Themen 6
B Daten an Tabel Model übergeben Allgemeine Java-Themen 8
G Domain Driven Design Model Allgemeine Java-Themen 14
G Mediator-Model Allgemeine Java-Themen 7
M Model für Dateimanager Allgemeine Java-Themen 3
M In der GUI / im Model auf Webrequest warten? Allgemeine Java-Themen 4
borobudur MVC Model Generator Allgemeine Java-Themen 2
E model.getchild Allgemeine Java-Themen 8
Z JTextField mit Model kommunizieren Allgemeine Java-Themen 6
M Unsicher, ob das Code richtig ist Allgemeine Java-Themen 4
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
L Dateien richtig auslesen Allgemeine Java-Themen 6
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Thallius Wie parse ich dieses Datum richtig? Allgemeine Java-Themen 5
X Files.walkFileTree zählt nicht richtig Allgemeine Java-Themen 2
F Schleife funktioniert nicht richtig Allgemeine Java-Themen 13
G Excel Datum richtig auf der Konsole ausgeben Allgemeine Java-Themen 1
P Variable wird in for - loop nicht richtig hochgezählt Allgemeine Java-Themen 11
A Methodenaufruf funktioniert nicht richtig Allgemeine Java-Themen 5
H .jar Datei startet nicht richtig bei Doppelklick Allgemeine Java-Themen 11
N Java MVC Pattern richtig anwenden Allgemeine Java-Themen 24
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
T iText mit eclipse richtig in Java-Projekt einbinden Allgemeine Java-Themen 2
The Pi Android TextView richtig formatieren Allgemeine Java-Themen 1
MaxG. Bilddateien richtig einbinden Allgemeine Java-Themen 9
J Erste Schritte DateTimeFormatter richtig anwenden Allgemeine Java-Themen 3
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
F ExecutorService richtig anwenden Allgemeine Java-Themen 0
J .exe Dateien werden nicht gestartet obwohl Pfad richtig Allgemeine Java-Themen 6
N event_scheduler richtig setzen? Allgemeine Java-Themen 1
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
L Daten ohne Datenbank richtig abspeichern Allgemeine Java-Themen 5
buggy84 Ausführen einer Batch mit Parameterübergabe funktioniert nicht richtig Allgemeine Java-Themen 18
G Tabelle wird nicht richtig dargestellt Allgemeine Java-Themen 9
A Datenstrukturen richtig anlegen/laufzeitanalyse Allgemeine Java-Themen 10
I Datei wird nicht richtig gelöscht Allgemeine Java-Themen 7
L iText PDF Form-Felder werden nach Bearbeitung mit iText nicht mehr richtig erkannt. Allgemeine Java-Themen 2
K Thread richtig benutzen Allgemeine Java-Themen 3
H [Logback || log4j] Wie richtig loggen / Log Instanzen verwalten Allgemeine Java-Themen 2
K Spiele starten nicht richtig Allgemeine Java-Themen 2
N Collisiondetection - Richtig gemacht? Allgemeine Java-Themen 4
L repaint() methode funktioniert nicht richtig! Allgemeine Java-Themen 3
propra MVC richtig umgesetzt? Allgemeine Java-Themen 16
A String.split() funktioniert nicht richtig Allgemeine Java-Themen 4
B Text wird nicht richtig angezeigt Allgemeine Java-Themen 9
D Thread-Array (richtig) überwachen Allgemeine Java-Themen 3
C Variablenwert wird nicht richtig zurückgegeben Allgemeine Java-Themen 8
C Reguläre Ausrücke Punkte im Satz richtig erkennen Allgemeine Java-Themen 6
D Java läuft nicht richtig Allgemeine Java-Themen 12
H List wird nicht richtig gefüllt Allgemeine Java-Themen 6
S Viele Bilder -> Speicher ausgelastet? / (De-)serialisierung geht nicht mehr richtig Allgemeine Java-Themen 8
T Array durchsuchen - aber richtig Allgemeine Java-Themen 7
C cmd Programm arbeitet nicht richtig Allgemeine Java-Themen 3
L ANT - So richtig? Allgemeine Java-Themen 4
A Java-Anwendung "richtig" schließen ohne JVM zu beenden Allgemeine Java-Themen 2
D [SOLVED] Collection wird nicht richtig per Konstruktor übernommen Allgemeine Java-Themen 8
I Wie richtig kommentieren? Allgemeine Java-Themen 33
G Welche Schreibeweise ist richtig Allgemeine Java-Themen 16
G Font richtig vergrößern Allgemeine Java-Themen 4
M TransferHandler.exportDone will nicht so richtig Allgemeine Java-Themen 2
V Java-Programm richtig neustarten? Allgemeine Java-Themen 9
J jar mit nicht richtig installierter JRE !? Allgemeine Java-Themen 2
D SwingWorker, was ist richtig? Allgemeine Java-Themen 2
H Kommunikation mit einem c-Prozess funzt nicht richtig Allgemeine Java-Themen 5
R Thread funktioniert nicht richtig Allgemeine Java-Themen 8
G Date wird nicht richtig geparsed Allgemeine Java-Themen 3
F Wie Fachthemen richtig erklären? Allgemeine Java-Themen 6
E .jar - Datei funktioniert nicht richtig Allgemeine Java-Themen 10
G JTable wird nicht richtig aufgebaut Allgemeine Java-Themen 9
A Wie liefere ich mein Java-Programm richtig aus? Allgemeine Java-Themen 10
P Speicherresourcen schonen - WeakReferences richtig einsetzen Allgemeine Java-Themen 6
P Garbage Collector funktioniert nicht richtig? Allgemeine Java-Themen 12
M Datum nicht richtig geprüft, warum? Allgemeine Java-Themen 9
Ebb String-Array richtig löschen! Allgemeine Java-Themen 3
H Bilder richtig speichern und laden Allgemeine Java-Themen 4
G Geistercode beim Compilern *_* ( ja ihr lest richtig ) Allgemeine Java-Themen 6
M Speichernutzung wohl nicht richtig verstanden? Allgemeine Java-Themen 6
C MVC richtig einsetzen Allgemeine Java-Themen 30
M Umlaute richtig dastellen? Allgemeine Java-Themen 4
U ASCII ZEichenkette wird net richtig ausgegeben Allgemeine Java-Themen 2
S AWT Threads richtig beenden! Wie? Allgemeine Java-Themen 9
C Java-Uhren ticke nicht richtig? Allgemeine Java-Themen 3
M Java 1.5 <> 1.4 - Nicht richtig abwärtskompatibel? Allgemeine Java-Themen 13
I Ist JNI hier richtig? Allgemeine Java-Themen 8
T Fließkomma (double) richtig runden Allgemeine Java-Themen 7
R Float richtig in Integer ? Allgemeine Java-Themen 4
S Tipps: java richtig lernen - wie? Allgemeine Java-Themen 3
J Wie stoppe ich einen Thread richtig? Allgemeine Java-Themen 21
L Best Practice Zip Datei aktualisieren Allgemeine Java-Themen 1
S @version in Kommentaren aktualisieren Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben