daten in eine Jtable über ein JDialog anzeigen

Gut ... dann hab ich das zumindest richtig erfasst.
Was du nun machen musst ist dir das Objekt was du ändern willst besorgen *aus dem TableModel* ... dies zu ändern und danach die Table einfach neu zu rendern.
 
Gut ... dann hab ich das zumindest richtig erfasst.
Was du nun machen musst ist dir das Objekt was du ändern willst besorgen *aus dem TableModel* ... dies zu ändern und danach die Table einfach neu zu rendern.

ich habe folgendes gemacht aber geht trotzdem nicht
Java:
public void mitarbeiterAendern(Mitarbeiter mit)
	{
		
		
        int row= table.getSelectedRow();
       // myDefaultModel.removeRow(row);
        row = rowSorter.convertRowIndexToModel(row);
			myDefaultModel.setValueAt(mit.getName(), row, 0);
			myDefaultModel.setValueAt(mit.getVorname(), row, 1);
			myDefaultModel.setValueAt(mit.getWohnort(), row, 2);
			myDefaultModel.setValueAt(mit.getAlter(), row, 3);
			myDefaultModel.setValueAt(mit.isVerheiratet(), row, 4);
		  
			
		
		
	}
 
"Funktioniert nicht" ist keine Fehlermeldung :rolleyes:

fire...changed ist keins drin.

was ist hier falsch
Java:
public void mitarbeiterAendern(Mitarbeiter mit)
	{
		
		
         int row= table.getSelectedRow();
        for (int i = 0; i < columnName.length; i++) {
        	
    		
    		switch (i) {
    		case 0: 	mit.setName((String) mit.getName());
    					myDefaultModel.fireTableCellUpdated(row, i);
    		break;
            
    		case  1 :  mit.setVorname((String) mit.getVorname());
    					myDefaultModel.fireTableCellUpdated(row, i);
    		break;
    		case 2 :  mit.setWohnort((String) mit.getWohnort());
    		          myDefaultModel.fireTableCellUpdated(row, i);
    		break;
    		case 3 :   mit.setAlter(((Integer) mit.getAlter()).intValue());
    		           myDefaultModel.fireTableCellUpdated(row, i);
    		break;
    		case 4 :   mit.setVerheiratet(((Boolean)mit.isVerheiratet()).booleanValue());
    		           myDefaultModel.fireTableCellUpdated(row, i);
    		break;
    		}		}

das problem bei mir wenn ich die markierte Zeile über Jdialge ändern will dann werden zwar die daten der Markierten Zeile in Jdialog angezeigt aber wenn ich irgendwas update und buttonAendern drücke dann passiert nichts
Java:
@Override
	public void actionPerformed(ActionEvent arg0) {
		if(arg0.getSource() == buttonOK)
			
		{
			
			
			
			
			 mitDefaultModel.addRow(mitarbeiterEinfuegen());
			 
			
			      setVisible(false);
			
			 
				 
			
			      
			
		}else if(arg0.getSource() == buttonAendern)
		{
			mitarbeiter.setName(t_nachname.getText());
		      mitarbeiter.setVorname(t_vorname.getText());
		      mitarbeiter.setAlter(Integer.valueOf(t_alter.getText()));
		      mitarbeiter.setVerheiratet(verheiratetBox.isSelected());
		      mitGui.mitarbeiterAendern(mitarbeiter);
		      setVisible(false);
		}
		
		else setVisible(false);
		
	}
 
Zuletzt bearbeitet:
Dann verwende doch ZWEI GETRENNTE JDialog mit GETRENNTEN ActionListener ...
Alternativ auch ein JOptionPane dem du dann die beiden Optionen : HINZUFÜGEN und ÄNDERN gibst ...

Was wir nur vorher nicht wussten : wie ist deine setValueAt(...) Methode aufgebaut ... desshalb haben wir uns über das fehlende re-Rendern gewundert.

//EDIT

Post #3

Code gelöscht


SUPER -.-'
Auf das andere iregndwann später mal nie den originalen fehlerhaften Code zu gesicht bekommen und so nie ihre Probleme werden lösen können ohne das wieder sowas kilometer langes wie das hier vom Zaun getreten wird ...

*Boar ... wie ich sowas liebe : Post(-Inhalt) , Thread und am besten der User-Acc gleich mit gelöscht ... nur weil man nicht die Hilfe bekommen hat die man wollte ... und das nur weil man nicht die nötigen Infos gebracht hat ... sowas sollte unmöglich gemacht werden !*
 
Zuletzt bearbeitet von einem Moderator:
kann sein dass ich die Methode fire...update nicht richtig verwendet habe?
hat jemand einen Vorschlag?
danke im voraus
 
Zuletzt bearbeitet:
Das liegt daran das du zwar das Mitarbeiter-Objekt an sich änderst ... jedoch nicht das im TableModel ... wesshalb sich da auch nichts ändert wenn du die Zelle neu renderst.

Kann es sein das du mit OOP noch so deine Probleme hast ?
 
Das liegt daran das du zwar das Mitarbeiter-Objekt an sich änderst ... jedoch nicht das im TableModel ... wesshalb sich da auch nichts ändert wenn du die Zelle neu renderst.

Kann es sein das du mit OOP noch so deine Probleme hast ?

ich habe aber die setValueAt() von DefaultTableModel überschrieben, und die Zellen neu gesetzt, aber trotzdem werden die in der tabelle nicht geändert

Java:
@Override
	public void setValueAt(Object wert, int zeile, int spalte) {
		
		Object obj = getMitarbeiterList().get(zeile);
		Mitarbeiter mit = (Mitarbeiter) obj;
		switch (spalte) {
		case 0: 	mit.setName((String) wert);
					fireTableCellUpdated(zeile, spalte);
		break;
        
		case  1 :  mit.setVorname((String) wert);
					fireTableCellUpdated(zeile, spalte);
		break;
		case 2 :  mit.setWohnort((String) wert);
		          fireTableCellUpdated(zeile, spalte);
		break;
		case 3 :   mit.setAlter(((Integer) wert).intValue());
		           fireTableCellUpdated(zeile, spalte);
		break;
		case 4 :   mit.setVerheiratet(((Boolean)wert).booleanValue());
		           fireTableCellUpdated(zeile, spalte);
		break;
		}
		
		
	
	}
 
Ja ... aber wenn du Mitarbeiter.setName() *oder was auch immer* callst ... dann hat das ja nu einfluss auf das Mitarbeiter-Objekt selbst. Du musst aber für sorgen das sich auch das Objekt im TableModel ändert ... erst dann bringt ein re-rendering überhaupt was.

Alternativ kannst du ja mal ganz unten dran setzen :
Java:
TopLevelContainer.validate();
TopLevelContainer.update(TopLevelContainer.getGraphics());
Wobei TopLevelContaner eine Referent auf dein JFrame oder so ist.
 
Du musst aber für sorgen das sich auch das Objekt im TableModel ändert ... erst dann bringt ein re-rendering überhaupt was.

Alternativ kannst du ja mal ganz unten dran setzen :
Java:
TopLevelContainer.validate();
TopLevelContainer.update(TopLevelContainer.getGraphics());
Wobei TopLevelContaner eine Referent auf dein JFrame oder so ist.

aber hier wird das Objekt im TableModel geändert, und diese methode wird in actionlistener aufgerufen (buttonAendern)
Java:
public void mitarbeiterAendern(Mitarbeiter mit)
	{
		
		
        int row= table.getSelectedRow();
        //row = rowSorter.convertRowIndexToModel(row);
        for (int i = 0; i < columnName.length; i++) {
        	
    		
    		switch (i) {
    		case 0: 	
    			myDefaultModel.setValueAt(mit.getName(), row, i);
    		System.out.println("mit.getName(): "+mit.getName());
    		 myDefaultModel.fireTableCellUpdated(row, i);
    		System.out.println("myDefaultModel.getValueAt(row, i):"+myDefaultModel.getValueAt(row, i));
    						
    		break;
            
    		case  1 : myDefaultModel.setValueAt(mit.getVorname(), row, i);
    		//System.out.println("mit.getVorname():"+mit.getVorname());
    		
    		break;
    		case 2 :  myDefaultModel.setValueAt(mit.getWohnort(), row, i);
    		System.out.println("mit.getWohnort():"+mit.getWohnort());
    		
    		break;
    		case 3 :  myDefaultModel.setValueAt(mit.getAlter(), row, i);
    		System.out.println("mit.getAlter():"+mit.getAlter());
    		System.out.println("myDefaultModel.getValueAt(row, i):"+myDefaultModel.getValueAt(row, i));
    		
    		break;
    		case 4 :  myDefaultModel.setValueAt(mit.isVerheiratet(), row, i);
    		System.out.println("mit.isVerheiratet():"+mit.isVerheiratet());
    		
    		break;
    		}
    		
    		
		}
 
Zurück