JTable: SelectionListener Problem

GGK_01

Bekanntes Mitglied
Hallo

Ich schreibe ein Programm, das Inhalte aus einer SQL DB in einer JTable einliest.

  • die Table hat ein Popup Menü mit dem ich die selektierte Zeile in mehrere JTextFelder übertrage.
  • die JTextFelder können editiert werden
  • über einen Button werden dabei durchgeführte Änderungen in die SQL DB übertragen
  • die Tabelle wird dann neu eingelesen und die Änderungen gleich dargestellt.

  • Wenn ich jedoch einen SelectionListener auf die Tabelle setze damit die Werte der selektierten Zeile beim Klicken in die Zeile übertragen werden. Passiert folgendes:
  • die Werte der selektierten Zeile werden in die JTextFelder übertragen
  • die Änderungen in den JTextFeldern werden in die DB übertragen
  • die Tabelle wird neu eingelesen
  • die Änderungen werden aber Nicht dargestellt...

Der ActionListener des Buttons:
Java:
ButtonDBUpdate.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
       
        SqlConnect readDB = new SqlConnect();
        insert = Boolean.valueOf(false);
        try {
          collection.dataCollection();
          readDB.writeDataBase(insert);
          readDB.close();
        }
        catch (Exception e1)
        {
          e1.printStackTrace();
        }
      }
    });

der SelectionListener:
Java:
    getTable().getSelectionModel().addListSelectionListener(new ListSelectionListener()  {

		@Override
		public void valueChanged(ListSelectionEvent arg0) {
			// TODO Auto-generated method stub
			
			collection.insertData();
			
			System.out.println("Listener arbeitet");
			btnSpeichern.setEnabled(false);
			chckbxActivate.setSelected(false);
		}
    });

Methode collection Insert (stark gekürzt):
Java:
 public void insertData() {
    table = Hauptprogramm.table;
    dataList = Hauptprogramm.selectData(table);
    System.out.println("DataList: " + dataList);
}

Hier (Sys-Output "springst rüber") stoppt das Programm bei Verwendung eines Selection Listeners:
Java:
  public static ArrayList selectData(JTable table)
  {
    ArrayList dataList = new ArrayList();
    int columns = table.getColumnCount();

    
    int col = 0;
    Object fetchElementID = "";
    for (col = 0; col < columns; col++)
    {
    
    	//*System.out.println("Col: "+col +" Col im View: "+table.convertColumnIndexToView(col));
    	System.out.println("Col Vergleich ["+col+"]: "+table.getModel().getColumnName(col)+": "+col+" "+table.convertColumnIndexToView(col)+" "+table.convertColumnIndexToModel(col));
    	//*if (col < columns - 1) {
    		System.out.println("col: "+col);
    		if (table.convertColumnIndexToView(col)!= -1) {
    			//*System.out.println(col + " : " + table.getValueAt(table.getSelectedRow(), table.convertColumnIndexToView(col)));
    			dataList.add(table.getValueAt(table.getSelectedRow(), table.convertColumnIndexToView(col)) + " ");
    			System.out.println("Springst rüber?");  //* ---> wird beim SelectionListener nicht mehr erreicht
    		
    		} 
    		if (col == 29) {
    			fetchElementID = table.getModel().getValueAt(table.getSelectedRow(), 29);
    			dataList.add(fetchElementID);
    			System.out.println("Object: " + fetchElementID);
    		}
    		
    	

    	
    }
 
    
    return dataList;
  }

Ausgabe auf der Konsole:

Code:
Col Vergleich [0]: Test Bestanden: 0 0 0
col: 0

Kann es sein, dass der SelectionListener eine Selektion auf die JTAble macht, die so gar nicht mehr existiert...oder wo kann das Problem liegen?

Danke

GGK
 
Zuletzt bearbeitet:
Hast du mal die repaint() Methode der JTable probiert?

Der JTable mitteilen, dass Änderungen gemacht wurden, sollte so gehen:

Java:
((AbstractTableModel) jTable.getModel()).fireTableDataChanged();
 
Zuletzt bearbeitet:
ja habe ich. Ich glaube aber nicht, dass es daran liegt, denn über das Popup Menü funktioniert alles.
Ich verwende übrigens das DefaultTableModel.

Java:
          model.fireTableDataChanged();
          table.repaint();

Es muss irgendwie mit dem SelectionListener zusammenhängen.
 
Zuletzt bearbeitet:

Zurück
Oben