Aus JTable selektiertes Element nehmen und Datei in Maske laden

Guten Tag zusammen
Ich habe hier ein Java Problemchen und mir wurde von einem Freund empfohlen sich hier zu melden.
Also ich hab momentan eine JTable welche mit dir.list die Dateinamen alle aufnimmt und zuerst nach dem , splittet und dann darstellt.
Nun möchte ich die Funktion einbauen das unter der JTable ein Laden Button steht und sobald man eine Zeile anwählt soll dieser aktiviert sein und die erste Zelle der Zeile lesen (einzigartige ID).
Danach soll wenn man den Button Laden anklickt der Dateiinhalt in die Maske geladen werden zur Bearbeitung. Nur habe ich momentan keine Ahnung wie ich das bewerkstelligen soll. Ich hatte schon Mühe gehabt diese Tabelle mit FIlter und so weiter zu erstellen. Kann mir hier jemand helfen? :confused: Wäre sehr froh um Hilfe. Ich rätsel nun schon seit 8:00 wie ich das machen könnte. Mein Code um die Daten überhaupt mal anzuzeigen sieht momentan so aus:

        String s;
        Vector rowData = new Vector();
        File dir = new File("C:/Users/" + userName + "/AppData/Local/Networkadm/");
        FilenameFilter filter = new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.startsWith(jTextField1.getText());
            }
        };

        String[] children = dir.list(filter);
        if (children.length == 0) {
            JOptionPane.showConfirmDialog(null, "Ihre Eingabe erzielte keine Treffer", "Nichts gefunden", JOptionPane.OK_CANCEL_OPTION);
        } else {
            for (int i = 0; i < children.length; i++) {
                String filename = children**;
                File allData = new File("C:/Users/" + userName + "/AppData/Local/Networkadm/");
                String[] DIR = allData.list();
                String[] strings = filename.replaceAll(".dat", "").split(",");
                Vector colData = new Vector(Arrays.asList(strings));
                rowData.add(colData);

                
                }

                Vector<String> columnNames = new Vector<String>();
                columnNames.addElement("ID");
                columnNames.addElement("Bezeichung");
                columnNames.addElement("Standort");
                Vector columnNamesV = new Vector(columnNames);


                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                frame.setLocationByPlatform(true);
                JTable table = new JTable(rowData, columnNamesV);
                JScrollPane scrollPane = new JScrollPane(table);
                frame.add(scrollPane, BorderLayout.CENTER);
                frame.setSize(1000, 150);
                frame.setVisible(true);


         }

      

    }                                      ```

Auf basis der bisherigen Beschreibungen klingt das, als wäre GROB sowas das, wonach du suchst…

package bytewelt;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class TableWithButton
{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            
            @Override
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
    
    private static void createAndShowGUI()
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel p = new JPanel(new GridLayout(1,0));
        final JTextField textField = new JTextField();
        p.add(textField);
        
        JButton b = new JButton("Open");
        b.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                String userName = "userName";
                String prefix = textField.getText();
                openSelectionFrame(userName, prefix);
            }
        });
        p.add(b);
        
        f.getContentPane().add(p);
        
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
    
    // TODO This method should be split up into multiple methods
    private static void openSelectionFrame(String userName, final String prefix)
    {
        // Find all files with the given prefix
        File dir = new File("C:/"); // TODO use userName here
        FilenameFilter filter = new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.startsWith(prefix);
            }
        };
        final String[] children = dir.list(filter);
        
        if (children.length == 0) {
            JOptionPane.showConfirmDialog(null, "Ihre Eingabe erzielte keine Treffer", "Nichts gefunden", JOptionPane.OK_CANCEL_OPTION);
            return;
        }
        
        // Extract ID, Description and Location from the file names
        // and use them as the row data for the table
        Vector<Object> rowData = new Vector<Object>();
        for (int i = 0; i < children.length; i++) 
        {
            String filename = children**;
            String[] strings = filename.replaceAll(".dat", "").split(",");
            Vector<Object> colData = new Vector<Object>(Arrays.asList(strings));
            rowData.add(colData);
        }
        Vector<String> columnNames = new Vector<String>();
        columnNames.addElement("ID");
        columnNames.addElement("Bezeichung");
        columnNames.addElement("Standort");


        // Create the main panel that is shown in the frame
        JPanel mainPanel = new JPanel(new BorderLayout());
        
        // Create the table and add it to the main panel
        final JTable table = new JTable(rowData, columnNames);
        JScrollPane scrollPane = new JScrollPane(table);
        mainPanel.add(scrollPane, BorderLayout.CENTER);
        
        // Create the selectButton that may be pressed to
        // open the currently selected file
        final JButton selectButton = new JButton("Select");
        selectButton.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                int selectedRow = table.getSelectedRow();
                Object selectedValue = table.getValueAt(selectedRow, 0);
                String selectedID = String.valueOf(selectedValue);
                String selectedFileName = children[selectedRow];
                System.out.println("Selected ID "+selectedID+", file name "+selectedFileName);
            }
        });
        JPanel buttonPanel = new JPanel(new FlowLayout());
        buttonPanel.add(selectButton);
        mainPanel.add(buttonPanel, BorderLayout.SOUTH);
        
        // Disable the selectButton, and ENable it only
        // when a row was selected in the table
        selectButton.setEnabled(false);
        ListSelectionModel selectionModel = table.getSelectionModel();
        selectionModel.addListSelectionListener(new ListSelectionListener()
        {
            @Override
            public void valueChanged(ListSelectionEvent e)
            {
                selectButton.setEnabled(true);
            }
        });
        
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setLocationByPlatform(true);
        frame.getContentPane().add(mainPanel);
        frame.setSize(1000, 150);
        frame.setVisible(true);
    }
    
    
}

Ich habe was versucht was anders aussieht und mir momentan nur ausgibt was selektiert ist weil ich noch nicht weiter weiss. Denkst du das würde so auch gehen oder bin ich da komplett auf dem Holzweg?

                @Override
                public void actionPerformed(ActionEvent event) {
                    try {
                        int sZel = table.getSelectedRow();
                        final String IDs = table.getModel().getValueAt(sZel, 0).toString();
                        File dir = new File("C:/Users/" + userName + "/AppData/Local/Networkadm/");
                        FilenameFilter filter = new FilenameFilter() {
                            public boolean accept(File dir, String name) {
                                return name.startsWith(IDs + ",");
                            }
                        };

                        String[] children = dir.list(filter);
                        if (children.length == 0) {
                            JOptionPane.showConfirmDialog(null, "Daten konnten nicht geladen werden", "Fehler", JOptionPane.OK_CANCEL_OPTION);
                        } else {
                            System.out.println("found!");
                        }
                    } catch (ArrayIndexOutOfBoundsException e) {
                        JOptionPane.showConfirmDialog(null, "Kein Datensatz gewählt", "Fehler", JOptionPane.OK_CANCEL_OPTION);
                    }
                }

            });```
Natürlich weiss ich nun nicht wie ich die gefundene Datei im Filter aufgreifen kann und den Inhalt in die Maske laden :/
EDIT: vielleicht sollte ich noch erwähnen das im Hauptfenster ein Formular ist um Daten einzugeben und abzuspeichern und nebenan ist eben die Suche womit sich die Tabelle öffnet mit den vorhandenen Dateien und daraus soll man dann den selektierten Eintrag in die Maske zur Bearbeitung laden können. Die Werte werden in der Datei alle Zeilenweise mit , am Schluss gespeichert.

[quote=Orion]Natürlich weiss ich nun nicht wie ich die gefundene Datei im Filter aufgreifen kann[/quote]Ich empfehle, einen ListSelectionListener bei der JTable zu registrieren und diesen die Zeilennummer der Auswahl an den Button übergeben zu lassen```public class TableSelectionTest {
int selectedRow = 0;

public static void main(String[] args) {
	new TableSelectionTest().testSelectionListener();
}

public void testSelectionListener() {
	final JTable jTable = new JTable(new DefaultTableModel(4, 5) {
		@Override
		public Object getValueAt(int pRow, int pColumn) {
			return MessageFormat.format("row: {0}, column:{1}", pRow,
					pColumn);
		}
	});
	JButton loaderButton = new JButton(new AbstractAction("Load row") {
		@Override
		public void actionPerformed(ActionEvent pArg0) {
			JOptionPane.showMessageDialog(
					null,
					"loading row: " + selectedRow
							+ ", value of first column: "
							+ jTable.getValueAt(selectedRow, 0));
		}
	});
	jTable.getSelectionModel().addListSelectionListener(
			new ListSelectionListener() {

				@Override
				public void valueChanged(ListSelectionEvent pArg0) {
					if (!pArg0.getValueIsAdjusting()) {
						selectedRow = jTable.getSelectedRow();
					}
				}
			});
	JPanel jPanel = new JPanel(new BorderLayout());
	jPanel.add(jTable, BorderLayout.CENTER);
	jPanel.add(loaderButton, BorderLayout.SOUTH);
	JOptionPane.showMessageDialog(null, jPanel);
}

}```
bye
TT

2 Sachen:
-Um das User Verzeichnis zu herauszufinden kannst du auf das user.home Property zugreifen: http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html
-Wenn du schon irgendeine eindeutige ID aus deinem Table rausholst, wieso machst du aus der nicht direkt ein File daraus sondern benutzt einen FileNameFilter? Macht den Eindruck als ob du nicht genau weisst wofür der da ist.

Ach das ganze hier ist schon gelöst mein Programm hab ich gestern noch komplett Fertiggestellt und hab heute ne 1 bekommen :smiley: Danke aber für die Antworten und ja den Filter hab ich so nach und nach verstanden.