私はJFrame
にJFileChooser
を持っています。デフォルトのファイル選択アクションボタンの代わりにカスタムインポートボタンが必要です。JFileChooser.getSelectedFile()カスタムアクションボタンを実装するときにnullを返します
私がカスタムアクションボタンを使用する場合、JFileChooser.getSelectedFile()
は、ファイル名テキストボックスに値を入力するとnullを返します。一方、ファイルをクリックしてカスタムインポートをクリックすると、私が選択したファイルを取得できます。
ここで私はこの
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再現するサンプルコードが含まれていました。
手順に再現する:
- アプリケーションを実行し
- を入力します有効なファイル名i n個のカスタムインポート]をクリックし
- テキストボックス「ファイル名」
- 今、あなたは見ることができます
注「あなたは、ファイル名が、getSelectedFile()の戻りヌルに入った」:私はimportFileChooser.setControlButtonsAreShown(true);
ファイルをクリックせずにテキストボックスに入力した場合でもgetSelectedFile()を取得できます。
実際に私は "ファイル名"テキストボックスでファイルパスのみを入力することができますので、私は自動化スクリプトを記述しようとしています。
ファイルをクリックせずにgetSelectedFile()でファイルを取得する方法はありますか?
Mac OS Xでは再生できません。チューザUIには「テキストボックス」がありません。 – trashgod
@trashgod:ここにはスクリーンショットが含まれています。私はWindowsとLinuxの両方でこのように見ることができます。 – Tamil