私が行っていることを簡単に説明し、コードの一部を提供します。
JComboBox でオプションを選択し、JComboBox での選択に基づいてファイルを除外する必要がある JFileChooser を開くボタンをクリックする小さな GUI があります。
たとえば、ユーザーがText File
JComboBox から選択し、ユーザーがボタンをクリックすると、ディレクトリとテキスト ファイルのみを表示する JFileChooser が開きます。
私のメインクラスでは、コンストラクターにこれがあります:
public MyApp() {
//init components and other logic
comboBox.setModel(new FileExtensionModel());
}
次に、そのクラスには、ファイルチューザーを開くボタンのメソッドがあります。
private void openFilAction(ActionEvent e) {
JFileChooser fc = new JFileChooser();
fc.setFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
return f.getName().endsWith(myFileType) || f.isDirectory();
}
public String getDescription() {
return "myFileType";
}
}
int choose = fc.showOpenDialog(this);
//do logic
}
最後に、DefaultComboBoxModel の基本的な拡張機能を示します。
public class FileExtensionModel extends DefaultComboBoxModel {
Map<String, String> selection;
public FileExtensionModel() {
selection = new HashMap<String, String>();
selection.put("Text File", ".txt");
selection.put("Rar File", ".rar");
selection.put("Zip File", ".rar");
selection.put("Tar File", ".tar");
selection.put("Ini File", ".ini");
for(String key : select.keySet()) {
this.addElement(key);
}
}
}
したがって、内部クラスからマップにアクセスできないためmyFileType
、マップ内の値にどのように置き換えることができるのか疑問に思っています。FileExtensionModel()
FileFilter()
どんな提案でも大歓迎です。コードを少し動かしてもかまいません。その大部分を FileExtensionModel クラスで処理できれば素晴らしいことです。