# JTable Werte auslesen



## Kuckuck22 (23. Jan 2011)

Hi;
Ich möchte das mit Klick auf den JButton "" die ActionPerformed Methode der innerern Klasse ausgeführt wird. Aber anscheinend gibt es Probleme mit der Zeile 
	
	
	
	





```
int auswahlVersNr= Integer.parseInt(table.getValueAt(table.getSelectedRow(), 3).toString()));
```
Dabei soll der Wert der 4.Spalte der markierten Zeile der JTable als int abgelegt werden, um in dann weiterzubenutzen. 
Die Methoden, die danach in der ActionPerformed ausgeführt werden, funktionieren alle.

Hier mal der Quelltext der JTableGui

```
public class PatientListeAusgeben extends ChildFrame implements ConstantInterface {
	
	
	
	private static final long serialVersionUID = 1L;
	private JTable table;
	private JTextField suchText;
	private JButton patientoeffnen;
	private JComboBox combobox;
        private PatAnzeigeTableModel model;
	private TableRowSorter<PatAnzeigeTableModel> sorter;
	private ActionListener controller;
	private int auswahl;
	private Stammdaten markierteDaten;
	



	public PatientListeAusgeben(String title) {
		super(title);
		setSize(460, 300);
	    
	    
	    model= new PatAnzeigeTableModel(erstellePatient()); 
	    table = new JTable(model);
	    sorter= new TableRowSorter<PatAnzeigeTableModel>();
	    suchText= new JTextField(25);
	    patientoeffnen = new JButton("Patient öffnen");
	    combobox= new JComboBox();
	    combobox.addItem("Nachname");
	    combobox.addItem("Geburtsdatum");
	    combobox.addItem("Versicherungsnummer");

	    
	   


	    table.setRowSorter(sorter);
	    sorter.setModel( model );
	    this.setLayout(new BorderLayout());
	    JPanel p1 = new JPanel();
	    this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
	    this.getContentPane().add(p1, BorderLayout.SOUTH);
	    p1.setLayout(new GridLayout(1,3));
	    p1.add(suchText);
	    p1.add(combobox);
	    p1.add(patientoeffnen);
	    controller = new PatListActionListener();
	    patientoeffnen.addActionListener(controller);
	    
	    

	    suchText.getDocument().addDocumentListener(
                new DocumentListener() {
                    public void changedUpdate(DocumentEvent e) {
                        setAuswahl((String)combobox.getSelectedItem());
                        newFilter(auswahl);
                    }
                    public void insertUpdate(DocumentEvent e) {
                    	setAuswahl((String)combobox.getSelectedItem());
                        newFilter(auswahl);
                    }
                    public void removeUpdate(DocumentEvent e) {
                    	setAuswahl((String)combobox.getSelectedItem());
                    	newFilter(auswahl);
                    }
                });
	    }
	
	public void setAuswahl(String column)
	{
		if(column.equals("Nachname"))
			auswahl=1;
		if(column.equals("Geburtsdatum"))
			auswahl=2;
		if(column.equals("Versicherungsnummer"))
			auswahl=3;
		
	}
	 
	  
        private void newFilter(int column) {
	        RowFilter<PatAnzeigeTableModel, Object> rf = null;
	        
	        try {
	            rf = RowFilter.regexFilter(suchText.getText(), column);
	        } catch (java.util.regex.PatternSyntaxException e) {
	            return;
	        }
	        sorter.setRowFilter(rf);
	    }
        
       
        
        
	/**
         * nur als Beispielmethode, dass etwas in der Tabelle steht
         */
	public ArrayList<Stammdaten> erstellePatient()
	{
		Stammdaten st1 = new Stammdaten();
		Stammdaten st2 = new Stammdaten();
		GregorianCalendar gebtag1 = new GregorianCalendar(1915, 12, 14);
		GregorianCalendar gebtag2 = new GregorianCalendar(1970, 10, 20);
		st1.setVorname("Hans");
		st1.setNachname("Müller");
		st1.setGeburtsdatum(gebtag1);
		st1.setVersicherungsnummer(12345);
		st2.setVorname("Peter");
		st2.setNachname("Huber");
		st2.setGeburtsdatum(gebtag2);
		st2.setVersicherungsnummer(45678);
		return Stammdaten.getStammdatenliste();
		
	}
	
	private class PatListActionListener implements ActionListener
	{

		@Override
		public void actionPerformed(ActionEvent e) {
			if(e.getSource().equals(patientoeffnen))
					{
				      if(table.getSelectedRowCount() > 0)
				      {
				               int auswahlVersNr= Integer.parseInt(table.getValueAt(table.getSelectedRow(), 3).toString()); 
				               PatientenVerwalten pv = new PatientenVerwalten();
				               Stammdaten st = pv.sucheNachVersNr(auswahlVersNr);
				               Patient p = new Patient("Patient anzeigen");
				               p.befuelle(st);
				      }  
					}
			}
		
	}
	  
}
```



und das JTableModel


```
public class PatAnzeigeTableModel extends AbstractTableModel {
	
	private String[] columnNames = {"Vorname",
            "Nachname",
            "Geburtsdatum",
            "Versicherungsnummer"};
	
	private Object[][] data ; 
	
	public PatAnzeigeTableModel(ArrayList<Stammdaten> stammdatenliste)
	{
		data = new Object[stammdatenliste.size()][4];
		fuelledata(stammdatenliste);
		 
	}
	
	
	/**
	 * Füllt das Array für die Daten mit den Patientendaten, die in der 
	 * Tabele angezeigt werden sollen
	 * @param stammdatenliste Eine ArrayList mit den anzuzeugenden Daten
	 */
	public void fuelledata(ArrayList<Stammdaten> stammdatenliste)
	{
	 
	 int i =0;
	 do 
	 {
		   data[i][0]=stammdatenliste.get(i).getVorname();
		   data[i][1]=stammdatenliste.get(i).getNachname();
		   SimpleDateFormat date = new SimpleDateFormat("dd.MM.yyyy");
		   String geburtstag = "" + (date.format((stammdatenliste.get(i).getGeburtsdatum()).getTime()));
		   data[i][2]=geburtstag;
		   data[i][3]=new Integer(stammdatenliste.get(i).getVersicherungsnummer());
		   i++;
	 }
	 while(i<stammdatenliste.size());
	 
	 
		
	}
	
	
	
	

	@Override
	public int getColumnCount() {
		
		return columnNames.length;
	}

	@Override
	public int getRowCount() {
		
		return data.length;
	}

	@Override
	public Object getValueAt(int row, int col) {
		
		return data[row][col];
	}
	
	public String getColumnName(int col) {
          return columnNames[col];
    }
	
	
	
	
	
	
}
```


Es muss doch eine Möglichkeit geben, die 4.Spalte der markierten Zeile zurückzugeben.
Schon mal vielen Dank für die Hilfe


----------



## SlaterB (23. Jan 2011)

was funktioniert denn nicht?
was liefert table.getSelectedRow()? bitte sagen wenn du es weißt, System.out.println() liefert es
was liefert table.getValueAt(table.getSelectedRow(), 3) bzw. auch im Vergleich direkt hinprogrammiert der richtige Index table.getValueAt(x, 3)? bitte sagen wenn du es weißt, System.out.println() liefert es

was geht, was nicht?


----------



## Kuckuck22 (23. Jan 2011)

Funktioniert alles. Ich weiss jetzt wo der fehler liegt. Ich muss die Klasse Patient mit einem anderen Konstruktor aufrufen.
Trotzdem danke .


----------

