Je suis en train de concevoir une interface dans laquelle l'utilisateur peut sélectionner un fichier à partir de JFileChooser
(initié via JButton
) et stocker son chemin de chaîne dans une table, pour une utilisation ultérieure. Mon code pour sélectionner un fichier est contenu dans la classe TheHandler
, et ma table est dans la classe FilePanel
. J'ai la valeur de filePath
dirigé à tablePath
de la classe FilePanel
, de sorte que je peux stocker les chaînes dans la table.Java - Stocke les chemins de chaîne dans la table avec JFileChooser, obtient les méthodes set?
Cependant, mon problème est que tablePath
retours null
, qui je pense est parce que:
1) filePath
est contenu dans une méthode void
2) une valeur est donnée à tablePath
avant que l'utilisateur sélectionne un fichier
ou une combinaison de 1) et 2). Donc, ma question est comment je peux extraire la valeur de filePath
, de sorte qu'il peut être pris par tablePath
après que l'utilisateur sélectionne un fichier? Je pense aux méthodes get et set, mais je viens de commencer à les apprendre, et à partir d'exemples que j'ai rencontrés, je pense que je devrais les utiliser dans le constructeur actionPerformed(ActionEvent event)
, mais si c'est le cas, je Je suis complètement découragé sur la façon de le faire. Toute aide serait grandement appréciée.
TheHandler
Classe:
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
Classe:
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, je suis désolé, il a été omis de mon message, mais j'ai le ActionListener couplé avec un JButton pour lancer le processus: addBtn.addActionListener (new TheHandler()); Cela a du sens cependant, laissez-moi voir si je peux obtenir ce travail rapide – Rosie
Aha, corrigez-moi si je me trompe, mais innerPath lui-même ne peut pas être appelé, mais en créant la méthode getFilePath(), innerPath prend la valeur de innerFilePath les conditions sont satisfaites, et puisque getFilePath() est une méthode publique qui retourne innerFilePath, cette méthode peut être appelée dans d'autres classes. – Rosie
En fait, j'ai une autre question si cela ne vous dérange pas. La méthode que vous avez créée a sorti le filechooser (qui me donnera le chemin de chaîne désiré) de la méthode void, mais en invoquant cette méthode dans une autre classe ouvrira un second filechooser (le premier étant lorsque le bouton load est enfoncé). Est-ce que je peux obtenir juste la valeur de retour de la méthode getFilePath(), de sorte que je puisse employer cette valeur de chaîne résultante dans une autre classe? – Rosie