Ich habe eine JFrame
mit JFileChooser
. Es ist notwendig, eine benutzerdefinierte Import-Schaltfläche anstelle der Standard-Dateiauswahl-Aktionsschaltfläche zu haben.JFileChooser.getSelectedFile() gibt null zurück, wenn benutzerdefinierte Aktionsschaltfläche implementiert wird
Wenn ich benutzerdefinierte Aktionstaste verwenden, geben JFileChooser.getSelectedFile()
null zurück, wenn ich Wert in Textfeld Dateiname eingeben. Wenn ich dagegen auf die Datei klicke und auf den benutzerdefinierten Import klicke, kann ich die Datei auswählen, die ich ausgewählt habe.
Hier enthalten i den Beispielcode dieses
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class FileChooserDemo extends JPanel
implements ActionListener {
private static final long serialVersionUID = 1L;
JFileChooser importFileChooser;
JFrame frame;
private void createAndShowGUI() {
//Create and set up the window.
frame = new JFrame("FileChooserDemo");
JPanel inputJobDetailsPanel = new JPanel(new BorderLayout(0,5));
importFileChooser = new JFileChooser();
importFileChooser.setControlButtonsAreShown(false);
importFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
importFileChooser.setMultiSelectionEnabled(false);
inputJobDetailsPanel.add(importFileChooser, BorderLayout.CENTER);
GridBagLayout importButtonPanelLayout = new GridBagLayout();
importButtonPanelLayout.columnWidths = new int[] {150};
importButtonPanelLayout.rowHeights = new int[] {30};
JPanel importButtonPanel = new JPanel();
importButtonPanel.setLayout(importButtonPanelLayout);
JButton importButton = new JButton("Custom Import");
importButton.setActionCommand("import");
importButton.addActionListener(this);
importButtonPanel.add(importButton, new GridBagConstraints());
JButton OtherButton = new JButton("Other Action");
OtherButton.setActionCommand("otherImport");
OtherButton.addActionListener(this);
importButtonPanel.add(OtherButton, new GridBagConstraints());
inputJobDetailsPanel.add(importButtonPanel, BorderLayout.PAGE_END);
frame.add(inputJobDetailsPanel);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new FileChooserDemo().createAndShowGUI();
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if(command.equals("import")) {
if(importFileChooser.getSelectedFile() == null) {
JOptionPane.showMessageDialog(frame, "You entered file name but getSelectedFile() return null");
}else {
JOptionPane.showMessageDialog(frame, "Chosen File Name: " + importFileChooser.getSelectedFile().getName());
}
}else {
JOptionPane.showMessageDialog(frame, "You clicked other action");
}
}
}
O/P zu reproduzieren:
Schritte zum Reproduzieren:
- Führen Sie die Anwendung
- eingeben ein gültiger Dateiname i n "Dateiname" Textfeld
- Klicken Sie auf Custom Import
- Jetzt können Sie sehen, "Sie eingegebene Dateiname aber getSelectedFile() return null"
Hinweis: Wenn i Standardaktion Taste freigegeben durch importFileChooser.setControlButtonsAreShown(true);
Ich kann die GetSelectedFile() sogar in Textbox eingegeben, ohne auf die Datei klicken.
Eigentlich versuche ich ein Automatisierungsskript zu schreiben, also kann ich nur Dateipfad über "Dateiname" Textfeld eingeben.
Irgendeine Idee, um die Dateien von getSelectedFile() ohne Klicken auf die Datei zu bekommen ??
Kann unter Mac OS X nicht reproduziert werden; Die Benutzeroberfläche der Auswahl enthält kein "Textfeld". – trashgod
@trashgod: Hier habe ich den Screenshot aufgenommen. Ich kann das sowohl in Windows als auch in Linux sehen. – Tamil