JTable alte Daten vor Änderung abfangen

Status
Nicht offen für weitere Antworten.

mr.warft

Mitglied
Hallo,

ich würde gerne wissen, ob es möglich ist und dann auch wie es gemacht wird :roll: das ich die Daten die in einer jTable stehen direkt vor der Änderung abfangen kann.

Bsp: In einer Zelle steht 12 und ich ändere den Wert auf 21 - dann bekomme ich vom TableModelListener einen Meldung das ein Wert geändert wurde und das dieser jetzt 21 ist...nun würde ich den alten Wert aber auch noch haben, da dann die Veränderung in eine DB geschrieben werden soll (es gibt sonst keine ID in der DB...die setzt sich aus den Werten in der Tabelle zusammen, da die Eindeutig sind).

Wäre nett wenn mir da jemand helfen könnte...ich probiere nun schon seid 2h und bekomme nichts brauchbares hin. Ich habe auch schon mit dem ListSelectionListener versucht aber das ist auch nicht das was ich suche. :bahnhof:

Gruß
 
Ich denke Du solltest einfach sauber zwischen Daten und GUI trennen, dann stellt sich diese Problematik eigentlich gar nicht.

lr
 
einfach bevor der wert geändert wurde die zelle abfragen und irgendwo zwischenspeichern
 
du musst doch wissen wo du deine tabelle neufüllst .... Ich mein die ändert sich ja nicht einfach so
 
SirWayne hat gesagt.:
Ich mein die ändert sich ja nicht einfach so

das ist richtig...aber trotzdem weiß ich immer noch nicht wo ich den alten Wert abfangen sollte.

hier ein Teil des Codes (ist ein bisschen durcheinander, da es zum Testen dient)

Code:
public JPanel initGUI() {
		
		try {
			javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
			
					ArrayList<Aequivalenzziffer> al = new ArrayList<Aequivalenzziffer>();
					al = new AequivalenzzifferConnect().getArrayList();
					Object[][] data = {};

					TableModel jTable1Model = new DefaultTableModel(data, new String[] { "Kostenstellen Nr", "Kostenträger Nr", "Aequivalenzziffer" });
					jTable1 = new JTable(jTable1Model);
					DefaultTableModel jTableModel = (DefaultTableModel) jTable1.getModel();

					for (Aequivalenzziffer ae : al){
						Object[] data2 = {
								ae.getKostenstellenNr(),
								ae.getKostentraegerNr(),
								ae.getZiffer()};
						
						jTableModel.addRow(data2);
						}
					jScrollPane1 = new JScrollPane(jTable1);
					jTableModel.addTableModelListener(this);
					jTable1.getSelectionModel().addListSelectionListener(this);
					jPanel = new JPanel(new BorderLayout());
					jPanel.setLayout(null);
					jPanel.setPreferredSize(new Dimension(474, 485));
					jPanel.add(jScrollPane1);
					jPanel.add(getSafeButton());
					jPanel.add(getCancelButton());
					jScrollPane1.setBounds(10, 0, 454, 432);
					

		} catch (Exception e) {
			e.printStackTrace();
		}
		
		kostenStellen = jTable1.getColumnModel().getColumn(0);
		KostenstellenGui ko = new KostenstellenGui();
		koStBox = new JComboBox(ko.getdd());
		kostenStellen.setCellEditor(new DefaultCellEditor(koStBox));
		koStBox.addItemListener(this);
		
		TableColumn kostenTraeger = jTable1.getColumnModel().getColumn(1);
		ArtikelAendern aa = new ArtikelAendern();
		JComboBox artBox = new JComboBox(aa.getdd());
		kostenTraeger.setCellEditor(new DefaultCellEditor(artBox));
		
		return jPanel;
	}

	private JButton getSafeButton() {
		if(safeButton == null) {
			safeButton = new JButton();
			safeButton.setText("Speichern");
			safeButton.setBounds(109, 451, 81, 23);
		}
		return safeButton;
	}
	
	private JButton getCancelButton() {
		if(cancelButton == null) {
			cancelButton = new JButton();
			cancelButton.setText("Abbruch");
			cancelButton.setBounds(276, 451, 75, 23);
			cancelButton.addActionListener(this);
		}
		return cancelButton;
	}
	
	public void tableChanged(TableModelEvent e) {
		int row = e.getFirstRow();
        int column = e.getColumn();
        TableModel model = (TableModel)e.getSource();
        String columnName = model.getColumnName(column);
        Object data = model.getValueAt(row, column);
        System.out.println("row und column "+row +" "+column);
        System.out.println("model: "+model);
        System.out.println("ColumnName: "+columnName);
        System.out.println("data: "+data);

        
        System.out.println("es wurde etwas geändert.");
		
	}

	public void valueChanged(ListSelectionEvent e) {
		int row = e.getFirstIndex();
		System.out.println("etwas wurde selektiert. "+ row);
		
	}
	

	public void actionPerformed(ActionEvent e) {
		Object src = e.getSource();
		if (src == cancelButton){
			jPanel.removeAll();
			jPanel.setEnabled(false);
		}
	}

wäre nett, wenn du mir hier zeigen könntest, wo ich den alten Wert abfangen könnte.

Danke
 
AHJA keine ahnung was du mir jetzt geschickt hast, aber ich seh nirgends wo sich die tabelle ändert außer in der initGUI()... aber da sie init heißt denk ich mir mal dass das der anfngwert der tabelle ist
 
die Tabelle selbst stammt von DefaultTableModel ab und ist damit editierbar. Ich kann die Werte in der Tabelle editieren und dann auch verändern...funktioniert auch so wie ich es mir gedacht habe. Nun würde ich aber gerne, bevor der Wert geändert wird, den alten Wert der Celle irgendwo in ner Variable zwischen speichern wollen. Aber ich komme mit all meinen Versuchen immer nur an den neuen Wert.

Verstehtst du mein Problem?
 
add ein MouseListener auf die Tabelle und frag die zelle in die reingeklickt wird ab...
 
kannst dir auch ein eigenes Model machen...

EDIT: ist in dem link oben mit drin--> nicht gesehen =)
 
SirWayne hat gesagt.:
kannst dir auch ein eigenes Model machen...

das mit dem eigenem Model ist wohl auch beim nächsten mal die bessere Wahl. Ich benutze zur Zeit das DefaultTableModel aber ich musste nun schon so oft etwas anpassen (und das denn in jeder Tabelle :autsch: )

Danke für die nützlichen Tipps...beim nächsten mal wird alles besser :lol:

Super Forum :applaus: :applaus: :applaus:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben