ArrayIndexOutOfBoundsException bei Update von JTable und Model

Darokh

Mitglied
Hi,
ich übe gerade, Daten aus einer mysql Datenbank in einer Tabelle abzubilden, dort dann zu editieren und dann wieder zurück in die Datenbank zu geben.
Das läuft nun auch alles - das einzige Problem ist das Updaten der Tabelle.

Wenn ich die Daten nach der Editierung wieder in das Model überführe und dann in der Tabelle anzeigen lassen möchte, geht das sogar, erhalte dann aber die ArrayIndexOutOfBoundsException -1.

Zwar funktioniert immer noch alles, aber zufrieden bin ich damit nun nicht.


Der Code ist gerade zwar nur zum Training und somit nicht 100% ig optimiert, über Rückmeldung bin ich jedoch trotzdem sehr dankbar.

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.*;

public class TableFromDatabase extends JFrame implements ListSelectionListener {
    	
	private DefaultTableModel model;	
	private final String userName = ***;
	private final String password = ***;
	private String databaseURL = ***;	
	
	private JTable table;	
	private JTextField tf_Vorname;
	private JTextField tf_Nachname;	
	private JCheckBox chkbx_boolean;
	private int selRow;
	private int selCol;
	
	private Class[] types = new Class [] 
			 {
		        String.class, String.class, String.class, Boolean.class
		      };
	
	
	  public static void main(String[] args) 
	  {
		TableFromDatabase frame = new TableFromDatabase();
	  }
	
	
	  	
	  public void loadData()
      {
		  System.out.println("LOADING DATA");
		  Vector <String> columnNames = new Vector<String>();  // die Spaltennamen werden hier gespeichert
	      Vector <Vector> data = new Vector <Vector>();			// datensatz wird gespeichert
	      model = new DefaultTableModel();
	      
      	 try {
               
           	//  Connect to the Database
           	   String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
               Class.forName( driver );
               Connection connection = DriverManager.getConnection(databaseURL, userName, password);
               
               
               //  Read data from a table
               String sql = "Select id_Persons, Vorname, Nachname, BoolTest from tbl_Persons";
               Statement stmt = connection.createStatement();
               ResultSet rs = stmt.executeQuery( sql );
               ResultSetMetaData md = rs.getMetaData();
               int columns = md.getColumnCount();
               
               
               //  Get column names
               for (int i = 1; i <= columns; i++)
               {
                   columnNames.addElement( md.getColumnName(i) ); 
                   System.out.println(md.getColumnName(i));
               }
               //  Get row data
               while (rs.next()) 
               {
                   Vector <Object> row = new Vector<Object>(columns);
                   
                   for (int i = 1; i <= columns; i++)
                   {
                       row.addElement( rs.getObject(i) );
                   }
                   data.addElement( row );
               }
               rs.close();
               stmt.close();   

               model.setDataVector(data, columnNames);
              
               
           } catch(Exception e) 
           {
               System.out.println( e );
           }
      	
           
      }

	  
    public TableFromDatabase() 
    {
    	
    	model = new DefaultTableModel()  
        {
            public Class getColumnClass(int columnIndex) 
            {
                return types [columnIndex];
            }
            
            public boolean isCellEditable( int rowIndex, int columnIndex )
            {
              return false;
            }
                         
        };
        
		setDefaultCloseOperation( EXIT_ON_CLOSE );
		setBounds(100,100,500,500);	   
		
	    getContentPane().setLayout(null);
    	  
	    
    	
        
        loadData();	// lädt daten in model
		
        //  Erstelle Tabelle       
        table = new JTable(model);	// fügt daten zur tabelle hinzu
        JScrollPane scrollPane = new JScrollPane( table );	// tabelle zum Scrollpane hinzufügen
        scrollPane.setBounds(20, 20, 400, 200);
        getContentPane().add( scrollPane ); 	// hinzufügen zum Frame
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        
        ListSelectionModel selectionModel = table.getSelectionModel();
		selectionModel.addListSelectionListener( this );

   
        
        tf_Vorname = new JTextField();
        tf_Vorname.setBounds(76, 252, 86, 20);
        getContentPane().add(tf_Vorname);
        tf_Vorname.setColumns(10);
        
        tf_Nachname = new JTextField();
        tf_Nachname.setBounds(76, 291, 86, 20);
        getContentPane().add(tf_Nachname);
        tf_Nachname.setColumns(10);
        
        chkbx_boolean = new JCheckBox("New check box");
        chkbx_boolean.setBounds(76, 331, 97, 23);        
        getContentPane().add(chkbx_boolean);
        
        
        
        JButton btn_Save = new JButton("Save");
        btn_Save.addActionListener(new ActionListener() 
        {
        	public void actionPerformed(ActionEvent e) 
        	{
        		try {
                    
                	//  Connect to the Database
                	String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
                    Class.forName( driver );
                    Connection myCon = DriverManager.getConnection(databaseURL, userName, password);
                    
                    String query =  "UPDATE tbl_Persons SET Vorname = '" + tf_Vorname.getText() + "', Nachname = '" + tf_Nachname.getText() + "' WHERE id_Persons = " + model.getValueAt(selRow, 0); 
                    		                    		
                     PreparedStatement stmt = myCon.prepareStatement(query);
                     stmt.executeUpdate();
                     myCon.close();  
                     loadData();                     
                     table.setModel(model); 
        		}
        	  catch(Exception e1) 
        	  {
                 System.out.println( e1 );
             }
        		
        	}
        	
        });
        btn_Save.setBounds(247, 304, 89, 23);
        getContentPane().add(btn_Save);
        setVisible(true);
        
    }
   

	public void valueChanged(ListSelectionEvent e) 
	{
		 if (!e.getValueIsAdjusting()) 
		 { 
			 selRow = table.getSelectedRow();
			 selCol = table.getSelectedColumn();
			 
			 // Show values in textfields
			 tf_Vorname.setText((String) model.getValueAt(selRow, 1));
			 tf_Nachname.setText((String) model.getValueAt(selRow, 2));			 
			 chkbx_boolean.setSelected((Boolean) model.getValueAt(selRow,3));
			 
         }
		
	}
	
}
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
Moin,

was zeigt denn Dein Debugger in der Zeile für model an ?

Ich konnte mir so aus dem Bauch heraus vorstellen, dass das mit dem Laden in loadData() so nicht klappt !
Versuch' mal das model, das Du dort füllst, an die umliegende Variable model zurück zugeben!

Gruß
Klaus
 

Darokh

Mitglied
Also als Identifier:
[id_Persons, Vorname, Nachname, BoolTest]

dataVector:
[[1, Brigitte, Rasaa, true], [2, Clara, Reer, true], [3, Ulli, Schale, false], [4, Patrick, Brand, true]]


listener:
EventListenerList: 0 listeners:

Danach gibt er mir dann die Fehlermeldung...


Deinen Vorschlag verstehe ich leider nicht so ganz :(
 
S

SlaterB

Gast
gibt es einen genauen StackTrace?
zu Beginn des Konstruktors wird ein überschiebenes DefaultTableModel erstellt, das ist komplett sinnlos,

allgemein ein schönes Beispiel für verkorste Ineinandermischung von GUI und Datenbankcode,
niemand kann das Programm testen,
würdest du den Datenbank-Code in eigene Klassen auslagern, die simple Daten wie String[][] oder evtl. ausnahmsweise gar fertige DefaultTableModel zurückgeben,
könntest du hier den DB-Code völlig ausklammern und durch Dummy-Daten ersetzen,

ich habe das testweise gemacht, bei mir tritt aber kein Fehler auf,
ach und Debugger sind immer zu misstrauen wenn sie den Programmfluss anhalten und wer weiß was alles,
lasse deine Programme normal laufen, was spricht dagegen dort auf die Exception zu warten?
ein kompletter StackTracee könnte noch Informationen enthalten

in der Zeile
> table.setModel(model)
kann unmöglich eine ArrayIndexOutOfBoundsException auftreten,
intern vielleicht, wenn auch unwahrscheinlich, aber das sollte dann der StackTrace genau zeigen,

Java:
  } catch(Exception e) 
           {
               System.out.println( e );
           }
statt e.printStackTrace() ist natürlich selbsteingebautes völliges Abschneiden von Programminformationen, selbst schuld..
hättest du den DB-Code von der GUI getrennt, hättest du an dieser Stelle wahrscheinlich gar kein catch(Exception),
und dann die bessere automatische Standardausgabe, ein weiterer Vorteil..


(edit: teste jetzt noch mit der Selektion, erweitere auf 4 Spalten + Boolean)

Java:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        TableFromDatabase frame = new TableFromDatabase();
    }

}


class TableFromDatabase
    extends JFrame
    implements ListSelectionListener
{

    private DefaultTableModel model;

    private JTable table;
    private JTextField tf_Vorname;
    private JTextField tf_Nachname;
    private JCheckBox chkbx_boolean;
    private int selRow;
    private int selCol;

    private Class[] types = new Class[]
        {String.class, String.class, String.class, Boolean.class};


    public static void main(String[] args)
    {
        TableFromDatabase frame = new TableFromDatabase();
    }


    public void loadData()
    {
        System.out.println("LOADING DATA");
        Vector<String> columnNames = new Vector<String>(); // die Spaltennamen werden hier
                                                           // gespeichert
        Vector<Vector> data = new Vector<Vector>(); // datensatz wird gespeichert
        model = new DefaultTableModel();


        // Read data from a table

        String[] col =
            {"a", "b", "c"};
        String[][] dat =
            {
                {"a1", "b1", "c1"},
                {"a2", "b2", "c2"}};
        int columns = col.length;


        // Get column names
        for (int i = 1; i <= columns; i++)
        {
            columnNames.addElement(col[i - 1]);
            System.out.println(col[i - 1]);
        }
        // Get row data
        for (int j = 0; j < dat.length; j++)
        {
            Vector<Object> row = new Vector<Object>(columns);

            for (int i = 1; i <= columns; i++)
            {
                row.addElement(dat[j][i-1]);
            }
            data.addElement(row);
        }
        model.setDataVector(data, columnNames);
    }


    public TableFromDatabase()
    {

        model = new DefaultTableModel()
            {
                public Class getColumnClass(int columnIndex)
                {
                    return types[columnIndex];
                }

                public boolean isCellEditable(int rowIndex, int columnIndex)
                {
                    return false;
                }

            };

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(100, 100, 500, 500);

        getContentPane().setLayout(null);


        loadData(); // lädt daten in model

        // Erstelle Tabelle
        table = new JTable(model); // fügt daten zur tabelle hinzu
        JScrollPane scrollPane = new JScrollPane(table); // tabelle zum Scrollpane
                                                         // hinzufügen
        scrollPane.setBounds(20, 20, 400, 200);
        getContentPane().add(scrollPane); // hinzufügen zum Frame
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        ListSelectionModel selectionModel = table.getSelectionModel();
        selectionModel.addListSelectionListener(this);


        tf_Vorname = new JTextField();
        tf_Vorname.setBounds(76, 252, 86, 20);
        getContentPane().add(tf_Vorname);
        tf_Vorname.setColumns(10);

        tf_Nachname = new JTextField();
        tf_Nachname.setBounds(76, 291, 86, 20);
        getContentPane().add(tf_Nachname);
        tf_Nachname.setColumns(10);

        chkbx_boolean = new JCheckBox("New check box");
        chkbx_boolean.setBounds(76, 331, 97, 23);
        getContentPane().add(chkbx_boolean);


        JButton btn_Save = new JButton("Save");
        btn_Save.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    loadData();
                    table.setModel(model);
                }

            });
        btn_Save.setBounds(247, 304, 89, 23);
        getContentPane().add(btn_Save);
        setVisible(true);

    }


    public void valueChanged(ListSelectionEvent e)
    {
        if (!e.getValueIsAdjusting())
        {
            selRow = table.getSelectedRow();
            selCol = table.getSelectedColumn();

            // Show values in textfields
            tf_Vorname.setText((String)model.getValueAt(selRow, 1));
            tf_Nachname.setText((String)model.getValueAt(selRow, 2));
            chkbx_boolean.setSelected((Boolean)model.getValueAt(selRow, 3));

        }

    }

}
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
ok, war dann doch nicht so wild:
beim Neuladen verschwindet die Selektion, valueChanged arbeitet mit Selektions-Index -1
am StackTrace eigentlich schon jetzt locker zu erkennen:
Code:
	at java.util.Vector.elementAt(Unknown Source)
	at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source)
	at test.TableFromDatabase.valueChanged(Test.java:179)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(Unknown Source)
	at javax.swing.JTable.clearSelectionAndLeadAnchor(Unknown Source)
	at javax.swing.JTable.tableChanged(Unknown Source)
	at javax.swing.JTable.setModel(Unknown Source)
	at test.TableFromDatabase$2.actionPerformed(Test.java:160)
...
der setModel() ist gewiss beteiligt, aber davor doch noch ne Menge mehr
 

Darokh

Mitglied
Hm, ich hab nun sehr viel rumgeschaut...aber eine wirkliche Lösung habe ich bisher noch nicht gefunden.
Hat jemand noch eine Idee? :/


Ich habe mal versucht, die Verbesserungsvorschläge umzusetzen. Ich hoffe, das hier ist besser.
- Habe die DB Geschichte nun ausgelagert
- fillModel Methode angelegt, mit der nun das Model befüllt wird.
- generell mal die Übersicht verbessert...glaube ich.

Was ich noch nicht verstanden habe ist die Sache mit dem DefaultTableModel und dem unnötigen Erstellen / Überschreiben.




Java:
/*
 * TableFromDatabase.java
 */
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.*;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.*;

public class TableFromDatabase extends JFrame implements ListSelectionListener {
    	
	private DefaultTableModel model;	
	
	private JTable table;	
	private JTextField tf_Vorname;
	private JTextField tf_Nachname;	
	private JCheckBox chkbx_boolean;
	private int selRow;
	private int selCol;
	
	private DBConnection myCon = new DBConnection();
	
	private Class[] types = new Class [] 
			 {
		        String.class, String.class, String.class, Boolean.class
		      };
	
	  	

	  
    public TableFromDatabase() 
    {
    	
    	model = new DefaultTableModel()  
        {
            public Class getColumnClass(int columnIndex) 
            {
                return types [columnIndex];
            }
            
            public boolean isCellEditable( int rowIndex, int columnIndex )
            {
              return false;
            }
                         
        };
        		
    	  
	    
    	
        
        loadData();	// lädt daten in model
		
        //  Erstelle Tabelle       
        table = new JTable(model);	// fügt daten zur tabelle hinzu
        JScrollPane scrollPane = new JScrollPane( table );	// tabelle zum Scrollpane hinzufügen
        scrollPane.setBounds(20, 20, 400, 200);
        this.getContentPane().add( scrollPane ); 	// hinzufügen zum Frame
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        
        ListSelectionModel selectionModel = table.getSelectionModel();
		selectionModel.addListSelectionListener( this );

   
        
        tf_Vorname = new JTextField();
        tf_Vorname.setBounds(76, 252, 86, 20);
        getContentPane().add(tf_Vorname);
        tf_Vorname.setColumns(10);
        
        tf_Nachname = new JTextField();
        tf_Nachname.setBounds(76, 291, 86, 20);
        getContentPane().add(tf_Nachname);
        tf_Nachname.setColumns(10);
        
        chkbx_boolean = new JCheckBox("New check box");
        chkbx_boolean.setBounds(76, 331, 97, 23);        
        getContentPane().add(chkbx_boolean);
        
        
        
        JButton btn_Save = new JButton("Save");
        btn_Save.setBounds(247, 304, 89, 23);
        btn_Save.addActionListener(new ActionListener() 
        {
        	public void actionPerformed(ActionEvent e) 
        	{
        	
        		myCon.updateDB("UPDATE tbl_Persons SET Vorname = '" + tf_Vorname.getText() + "', Nachname = '" + tf_Nachname.getText() + "' WHERE id_Persons = " + model.getValueAt(selRow, 0));
        		
        		loadData();       		
        		
                table.setModel(model);
        		
        	}
        		
        		
        	
        });
               
        
        this.getContentPane().add(btn_Save);        
        this.setDefaultCloseOperation( EXIT_ON_CLOSE );
		this.setBounds(100,100,500,500);			
	    this.getContentPane().setLayout(null);
        this.setVisible(true);
        
    }
    
    
    public DefaultTableModel loadData()
    {
		  System.out.println("LOADING DATA");
		  Vector <String> columnNames = new Vector<String>();  // die Spaltennamen werden hier gespeichert
	      Vector <Vector> data = new Vector <Vector>();			// datensatz wird gespeichert
	      //model = new DefaultTableModel();
	      
    	 try {
    		 
    		 ResultSet rs = myCon.returnQuery("Select id_Persons, Vorname, Nachname, BoolTest from tbl_Persons");
             ResultSetMetaData md = rs.getMetaData();
             int columns = md.getColumnCount();
             
             
             //  Get column names
             for (int i = 1; i <= columns; i++)
             {
                 columnNames.addElement( md.getColumnName(i) ); 
                 System.out.println(md.getColumnName(i));
             }
             //  Get row data
             while (rs.next()) 
             {
                 Vector <Object> row = new Vector<Object>(columns);
                 
                 for (int i = 1; i <= columns; i++)
                 {
                     row.addElement( rs.getObject(i) );
                 }
                 data.addElement( row );
             }          

             fillModel(data, columnNames);
            
             
         } catch(Exception e) 
         {
      	   e.printStackTrace();
         }
		return model;
    	
         
    }
    
    public void fillModel(Vector<Vector> data, Vector <String> columnNames)
    {
    	model.setDataVector(data, columnNames);
    }
    

	public void valueChanged(ListSelectionEvent e) 
	{
		 if (!e.getValueIsAdjusting()) 
		 { 
			 selRow = table.getSelectedRow();
			 selCol = table.getSelectedColumn();
			 
			 // Show values in textfields
			 tf_Vorname.setText((String) model.getValueAt(selRow, 1));
			 tf_Nachname.setText((String) model.getValueAt(selRow, 2));			 
			 chkbx_boolean.setSelected((Boolean) model.getValueAt(selRow,3));
			 
         }
		
	}
	
}
 
Zuletzt bearbeitet:
S

SlaterB

Gast
JAVA-Tags statt CODE-Tags !

was gibt es beim überschriebenen Model nicht zu verstehen?
die Zeilen
Java:
    	model = new DefaultTableModel()  
        {
            public Class getColumnClass(int columnIndex) 
            {
                return types [columnIndex];
            }
            
            public boolean isCellEditable( int rowIndex, int columnIndex )
            {
              return false;
            }
                         
        };
kannst du schlicht streichen, später wird doch noch ein neues model erstellt, welchen Zweck haben deiner Ansicht nach diese Zeilen?
das types-Array fällt im Moment auch weg, bzw. ist vielleicht ganz gut aber nicht eingebunden

edit:
mit nun auskommentierten
//model = new DefaultTableModel();
später mag vielleicht wieder alles sinnvoll sein

------

hattest du mein letztes Posting gelesen?
wie gesagt ist der Fehler letztlich minimal, so sehe ich es zumindest im Moment,
du musst nur in der valueChanged(ListSelectionEvent e) darauf achten, bei selRow -1 keinen Mist zu machen,
dürfte doch klar sein?
 

Darokh

Mitglied
Vielleicht hab ich das mit dem Überschreiben noch nicht so ganz bzw. falsch verstanden...
Wenn ich das hier rausnehme:

Java:
public Class getColumnClass(int columnIndex) 
            {
                return types [columnIndex];
            }
            
            public boolean isCellEditable( int rowIndex, int columnIndex )
            {
              return false;
            }

Dann sind meine Zellen in der Tabelle editierbar (was ich nicht möchte) und die Boolean Spalte wird mir nicht als Grafik sondern als Text angezeigt. Wie bekomm ich das ohne das Überschreiben hin?

Dein Posting habe ich natürlich gelesen - aber so ganz verstehen tue ich es nicht. Für mich klingt es so, dass da irgendwo ein Fehler drin ist, aber nicht klar ist, wo. Aber er macht auch keine Probleme, somit kann man ihn ja vernachlässig.
Ich lerne die ganze Geschichte ja gerade und würde natürlich mit dem Verfahren, wie ich es hier demonstriere natürlich auch weiter Daten einer DB ändern....wenn da aber immer ein Fehler drin ist, fühle ich mich da aber nicht gerade wohl ;)
 
S

SlaterB

Gast
> Wenn ich das hier rausnehme: [..] Dann sind meine Zellen in der Tabelle editierbar (was ich nicht möchte)
denkst du denn überhaupt nicht mit, liest du nicht alles was ich alles schreibe?

selbstverständlich hat das Überschreiben an sich seinen Sinn,
ich sage doch dass es nichts bringt, weil du später noch ein neues DefaultTableModel erzeugst, das erste komplett überschreibst,
egal wie kompliziert und hilfreich es aufgebaut ist..

inzwischen hast du den Befehl in Zeile 126 des neuen Codes ja auskommentiert, wie ich editiert hatte,
also kein Gemecker von mir mehr dazu

----------

> Für mich klingt es so, dass da irgendwo ein Fehler drin ist, aber nicht klar ist, wo.

auch dazu ist mir unverständlich wie du an meinen teils sehr deutlichen Ausführungen anscheinend vorbeiliest,

beim Neuladen verschwindet die Selektion, valueChanged arbeitet mit Selektions-Index -1
du sagst dass du ein Problem beim Neuladen hast, ich sage dir was beim Neuladen passiert, die Selektion aus der Tabelle verschwindet,
was ist an diesem Punkt unverständlich?

in der Folge kommt valueChanged() dran, das sieht man am StackTrace, das ist ja logisch wenn sich die Selektion ändert,
was ist an diesem Punkt unverständlich?

wie ich es sage, ich es sich aus der Exception und logischen Überlegungen ergibt, ist es nun so dass der Selektions-Index,
selRow, -1 ist,
was ist an diesem Punkt unverständlich?

an dem Punkt habe ich dann aufgehört, dass ein Arrayzugriff mit -1 nicht besonders erfolgreich ist, dürfte klar sein,

wenn du fragen würdest
'was ist denn so schlimm an Index -1 in valueChanged()'
oder
'wieso verschwindet die Selektion beim Neuladen'
oder
'was meinst du mit xy'
oder sonst irgendwas intelligentes in Bezug auf das Programm oder meine Antwort, dann wäre das ja noch halbwegs vorangehend,
aber nur
> Dein Posting habe ich natürlich gelesen - aber so ganz verstehen tue ich es nicht.
> Für mich klingt es so, dass da irgendwo ein Fehler drin ist, aber nicht klar ist, wo.
das bietet ja gar nichts, ganz schön frustrierend erkenntnislos..
 

Darokh

Mitglied
Ja, du sagst mir, wo der Fehler ist...aber da du, wie du siehst, ich noch nicht wirklich erfahren bin, hilft mir diese Ausführung eben nur teilweise.

Was soll ich nun beispielsweise machen, wenn die Selektion weg ist? Wie kann ich das Problem beheben?
Wie kann ich den Fehler mit der Selektion und dem valueChanged beheben? Das ist ja gerade mein Problem...
Mir hilft es jetzt zu Beginn nicht zu wissen, was der Fehler ist, sondern brauche auch irgendwie eine Idee davon, wie ich ihn weg bekomme...unabhängig davon, ob er nun schwerwiegend ist oder nicht. Irgendetwas läuft da ja nicht rund und ich habe es noch nicht ganz verstanden.


Anyway:
- Was für Auswirkungen hat es, wenn die Selektion weg ist?
- Warum nur beim Neuladen und nicht bei der ersten Ausführung - beide werden doch genau gleich ausgeführt.
- Muss Index -1 in valueChanged() irgendwo zurückgesetzt werden?
- wie sollte ich anstelle dessen das defaulttablemodel mit den gewünschen Funktionen einbauen, so dass ich es nicht im Nachhinein überschreibe?
 
Zuletzt bearbeitet:
S

SlaterB

Gast
tja, mit diesem Frage wäre wie gesagt mehr geholfen, obwohl die Antwort darauf denkbar einfach ist und inzwischen schon geschrieben:
mit Index -1 kannst du nicht auf die Arrays zugreichen, das musst du mit if unterscheiden und dann z.B. die Textfelder leeren oder
'keine Selektion' reinschreiben, was immer nach deinem Wunsch in dieser Situation passieren soll,
jedenfalls nicht aufs Array/ aufs Model zugreifen, das gibt offensichtlich Exception
 

Darokh

Mitglied
Der Vollständigkeit halber, hier meine Lösung, die nun auch funktioniert.
Vielen Dank.


[Java]

public void valueChanged(ListSelectionEvent e)
{
if (!e.getValueIsAdjusting())
{

selRow = table.getSelectedRow();
selCol = table.getSelectedColumn();
if (selRow >= 0)
{
// Show values in textfields
tf_Vorname.setText((String) model.getValueAt(selRow, 1));
tf_Nachname.setText((String) model.getValueAt(selRow, 2));
chkbx_boolean.setSelected((Boolean) model.getValueAt(selRow,3));
}

}

}
[/code]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Fehler beim Generierung Fehler beim Generierung java.lang.ArrayIndexOutOfBoundsException: 0 Datenbankprogrammierung 12
T compiler fehler: should be mapped with insert="false" update="false" Datenbankprogrammierung 1
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
OnDemand Mysql UPDATE if condition Datenbankprogrammierung 14
OnDemand Select vs Update ins blaue, was ist teurer? Datenbankprogrammierung 11
OnDemand MySQL Trigger löst nicht aus bei Hibernate Update Datenbankprogrammierung 12
R HSQLDB ResultSet update aktualisiert DB, aber nicht das ResultSet Datenbankprogrammierung 2
F UPDATE - Befehl nur in einer Zeile Datenbankprogrammierung 11
L SQL-Statement INSERT INTO ON DUPLICATE KEY UPDATE funktioniert nicht Datenbankprogrammierung 5
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
OnDemand Update auf Mysql läuft nicht durch Datenbankprogrammierung 30
OnDemand SQL-Statement Update mit innerjoin Datenbankprogrammierung 18
OnDemand Update table SET will nicht Datenbankprogrammierung 9
P MySQL INSERT / UPDATE MySQL - perStoredProcedure oder direkt im Code Datenbankprogrammierung 3
S Update Tabelle aus Textfeld Datenbankprogrammierung 2
S JPA: update von Schlüsselwerten Datenbankprogrammierung 2
ruutaiokwu sql server werte swappen beim update-vorgang mit unique-constraints..? Datenbankprogrammierung 2
M Update Befehl Datenbankprogrammierung 1
S MySQL Nach wiederholtem Update falsche Werte (im Speicher?) Datenbankprogrammierung 1
M SQL-Statement Datentypen in Kriterienausdruck unverdräglich bei Update auf DB von Java aus Datenbankprogrammierung 0
M SQL UPDATE richtig anwenden BITTE um HILFE Datenbankprogrammierung 3
M SQL UPDATE führt zu JAVA Absturz Datenbankprogrammierung 6
S HSQLDB Verbieten eines update auf eine bestimmte reihe Datenbankprogrammierung 4
M Derby/JavaDB Neu geschriebener Eintrag per UPDATE lässt sich nicht unmittelbar abrufen Datenbankprogrammierung 2
S UPDATE user Datenbankprogrammierung 4
R Fehler 2601 trotz SQL-UPDATE ? Datenbankprogrammierung 2
B DB Update via batch Datenbankprogrammierung 3
H Update ganze zeile Datenbankprogrammierung 4
R sqlite UPDATE wirkt nicht aus Java Datenbankprogrammierung 7
S ID Wert von Insert über jdbcTemplate.update Datenbankprogrammierung 3
D Error 1452: Cannot add or update a child row: a foreign key constraint fails Datenbankprogrammierung 15
D SQL Update auf eine Query möglich? Datenbankprogrammierung 4
5 Datenbank Update Datenbankprogrammierung 8
A Oracle Update Befehl in Datenbank anhand einer Schleife Datenbankprogrammierung 8
turmaline Oracle "Häppchenweises" Update durchführen Datenbankprogrammierung 4
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
M Access Update Statement Fehler update -> unmöglich? Datenbankprogrammierung 3
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
I Derby/JavaDB Update Fehler Datenbankprogrammierung 4
N Update Prepared Statement Fehler bei Argumenten Datenbankprogrammierung 3
N batch-Update wird nicht durchgeführt Datenbankprogrammierung 2
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
1 On duplicate Key update Datenbankprogrammierung 3
M DB update geht einfach nicht Datenbankprogrammierung 2
F ResultSet kann Datenbank nicht update, warum? Datenbankprogrammierung 3
G MySQL Update Datenbankprogrammierung 5
M MySQL größere von zwei Zahlen in Update Statement Datenbankprogrammierung 2
T Update an SQL Tabelle ?! Datenbankprogrammierung 10
C MySQL Update funktioniert nicht Datenbankprogrammierung 11
C Update Table1 mit Relationship Table2 Datenbankprogrammierung 6
prakdi einzelnen SQL Eintrag finden der "update" enthält Datenbankprogrammierung 3
V Datenbank Update Datenbankprogrammierung 7
A update methode für datenbank Datenbankprogrammierung 2
M Hibernate: Insert statt Update Datenbankprogrammierung 8
E Update DB; Werte aus Feldern übernehmen Datenbankprogrammierung 5
H Batch Update/Insert Datenbankprogrammierung 4
E Insert oder Update- Prüfung Datenbankprogrammierung 3
H Datenbank Update Datenbankprogrammierung 3
J SQL Abfrage: Verschiedene Werte in einer Spalte mit einem Update Befehl? Datenbankprogrammierung 7
cosmic Problem beim Update einer Oracle DB Datenbankprogrammierung 7
M Update mysql Fehler ?? Datenbankprogrammierung 4
T Problem beim Update in die Access DB Datenbankprogrammierung 9
R Update Time auslesen Datenbankprogrammierung 2
T DB2 delete/update über 2 Tabellen Datenbankprogrammierung 2
K Ist mein UPDATE fehlerhaft? Datenbankprogrammierung 3
G Update-Befehl Fehlerhaft ?? Datenbankprogrammierung 2
G Update Befehl funkt nicht. WARUM? Datenbankprogrammierung 5
S Update Problem Datenbankprogrammierung 3
M Insert Update usw. Datenbankprogrammierung 2
S CashedRowSet update - oder was mache ich falsch - Datenbankprogrammierung 6
B [SQL] UPDATE oder REPLACE INTO Befehl Datenbankprogrammierung 10
S Update mit null Datenbankprogrammierung 11
H UPDATE . Datenbankprogrammierung 3
S PostgreSQL SELECT/UPDATE etc. Datenbankprogrammierung 4
T Update-Frage Datenbankprogrammierung 11
Y Hibernate - Update bestimmter Spalten Datenbankprogrammierung 2
G update sperren bei client/server anwendung Datenbankprogrammierung 7
T Diverse JDBC Probleme (inner join, rs.last(), update) Datenbankprogrammierung 2
B Update funktioniert nicht Datenbankprogrammierung 8
R Update und Insert Gleichzeitig? Datenbankprogrammierung 2
K MsAccess immer beim zweiten Update java.sql.SQLException Datenbankprogrammierung 28
N Hibernate & hsqldb: Problem bei db-update Datenbankprogrammierung 7
T Problem beim Update vom Resultset + Firebird Datenbankprogrammierung 2
G Update Statement automatisch unterteilen lassen Datenbankprogrammierung 3
G ist hieran was falsch ? UPDATE Anweisung Datenbankprogrammierung 8
W Hibernate Update Problem Datenbankprogrammierung 3
A Syntaxfehler bei update. Datenbankprogrammierung 8
O Update-Problem mit Hibernate-Framework Datenbankprogrammierung 5
L Problem mit Update Datenbankprogrammierung 14
L UPDATE löst Exception aus Datenbankprogrammierung 6
G Problem mit Datums-Format bei UPDATE Datenbankprogrammierung 3
F Update mit Prepared Statements Datenbankprogrammierung 10
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
H Tabellenspalte in JTable in der falschen Reihenfolge Datenbankprogrammierung 10
M Datenbank editierbach machen in JTable Datenbankprogrammierung 13
L jTable mit Datenbankwerten befüllen Datenbankprogrammierung 7
S MySQL JTable zeigt nach Datenbankabfrage eine Spalte zu viel an Datenbankprogrammierung 0
A SQLite jTable binding mit Netbeans Datenbankprogrammierung 11
C MySQL JTable in JScrollPane nach insert aktualisieren Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben