Ich entwerfe eine Schnittstelle, in der der Benutzer eine Datei mit der Nummer JFileChooser
(initiiert über JButton
) auswählen und seinen String-Pfad zur späteren Verwendung in einer Tabelle speichern kann. Mein Code zum Auswählen einer Datei ist in der Klasse TheHandler
enthalten, und meine Tabelle befindet sich in der Klasse FilePanel
. Ich habe den Wert filePath
gerichtet auf tablePath
der Klasse FilePanel
, so dass ich die Zeichenfolgen in der Tabelle speichern kann.Java - Speichern von String-Pfaden in der Tabelle mit JFileChooser, get set Methoden?
aber mein Problem ist, dass tablePath
kehrt null
, was ich denke, ist entweder, weil:
1) filePath
innerhalb eines void
Verfahren enthalten
2) ein Wert tablePath
gegeben wird, bevor der Benutzer eine auswählt Datei
oder eine Kombination von 1) und 2). Also meine Frage ist, wie kann ich den Wert filePath
extrahieren, so dass es von tablePath
genommen werden kann, nachdem der Benutzer eine Datei auswählt?
Ich denke, get und set-Methoden, aber ich habe gerade angefangen, darüber zu lernen, und von Beispielen, die ich angetroffen habe, würde ich denken, dass ich sie innerhalb der actionPerformed(ActionEvent event)
Konstruktor verwenden müsste, aber wenn das der Fall ist, ich Ich bin völlig davon überzeugt, wie das geht. Jede Hilfe würde sehr geschätzt werden.
TheHandler
Klasse:
public static class TheHandler implements ActionListener {
String filePath;
public void actionPerformed(ActionEvent event) {
Component parent = null;
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("TIFF Images", "tif", "tiff");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(parent);
filePath = chooser.getSelectedFile().toString();
//System.out.println(filePath);
if (returnVal == JFileChooser.APPROVE_OPTION) {
ImagePlus picture = IJ.openImage(filePath);
picture.show();
}
}
}
FilePanel
Klasse:
public class FilePanel extends JPanel {
public FilePanel() {
setLayout(new GridLayout(1, 0));
TheHandler thePath = new TheHandler();
String tablePath = thePath.filePath;
System.out.println(filePaths); // outputs null, this line runs before file is chosen?
String col[] = {"Loaded TIFF Files"};
String[] tiffFiles = {filePaths, filePaths}; // Vector or list may be more useful?
DefaultTableModel tableModel = new DefaultTableModel(col, 0);
tableModel.addRow(tiffFiles);
}
}
Oh, ich entschuldige mich, es wurde von meinem Beitrag links, aber ich habe den ActionListener mit einem JButton gekoppelt, um den Prozess einzuleiten: addBtn.addActionListener (neuer TheHandler()); Dies macht aber Sinn, lassen Sie mich sehen, ob ich das wirklich schnell arbeiten kann – Rosie
Aha, also korrigieren Sie mich, wenn ich falsch liege, aber innerPath selbst kann nicht aufgerufen werden, aber durch Erstellen der getFilePath() -Methode nimmt innerPath den Wert von innerFilePath wann Die Bedingungen sind erfüllt, und da getFilePath() eine öffentliche Methode ist, die innerFilePath zurückgibt, kann diese Methode in anderen Klassen aufgerufen werden. – Rosie
Eigentlich habe ich eine andere Frage, wenn es Ihnen nichts ausmacht. Die von Ihnen erstellte Methode hat den Dateichooser (der den gewünschten Zeichenfolgenpfad enthält) aus der Void-Methode herausgenommen, aber das Aufrufen dieser Methode in einer anderen Klasse öffnet einen zweiten Dateichooser (der erste, wenn die Lade-Schaltfläche gedrückt wird). Gibt es eine Möglichkeit, nur den Rückgabewert der getFilePath() -Methode zu erhalten, damit ich den resultierenden String-Wert in einer anderen Klasse verwenden kann? – Rosie