--- /dev/null
+package yukihane.inqubus.gui;
+
+import java.awt.EventQueue;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.nio.file.Path;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.SortedSet;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+import javax.swing.JTextField;
+import yukihane.inqubus.filewatch.FileWatchUtil;
+
+class AutoCompleteAdapter extends KeyAdapter {
+
+ private final JComboBox<String> component;
+ private final Set<Path> alternates = new HashSet<>();
+
+ AutoCompleteAdapter(JComboBox<String> component) {
+ this.component = component;
+ }
+
+ void setAlternates(Collection<Path> alternates) {
+ this.alternates.clear();
+ this.alternates.addAll(alternates);
+ }
+
+ @Override
+ public void keyTyped(final KeyEvent e) {
+ EventQueue.invokeLater(new Runnable() {
+
+ @Override
+ public void run() {
+ final String text = ((JTextField) e.getSource()).getText();
+ final SortedSet<String> alt = FileWatchUtil.contain(alternates, text);
+ final String[] altArray = alt.toArray(new String[0]);
+ DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>(altArray);
+ component.setModel(model);
+ component.showPopup();
+ }
+ });
+ }
+}