I have seen many questions on autocompeletion for java text components like JTextField
JTextArea
JTextEditorPane
etc.
There are not many options either:
1) 3rd party library (like SwingX)
2) DIY (i.e using DocumentListener
, JWindow
with JLabel
etc and a few requestFocusInWindow calls)
I chose number 2 and put the code up here for others to have a working foundation that can be improved to your needs.
Basically you would just make sure the AutoSuggestor
class is within package hierarchy than you would do something like:
//create JTextComponent that we want to make as AutoSuggestor
//JTextField f = new JTextField(10);
JTextArea f = new JTextArea(10, 10);
//JEditorPane f = new JEditorPane();
//create words for dictionary could also use null as parameter for AutoSuggestor(..,..,null,..,..,..,..) and than call AutoSuggestor#setDictionary after AutoSuggestr insatnce has been created
ArrayList<String> words = new ArrayList<>();
words.add("hello");
words.add("heritage");
words.add("happiness");
words.add("goodbye");
words.add("cruel");
words.add("car");
words.add("war");
words.add("will");
words.add("world");
words.add("wall");
AutoSuggestor autoSuggestor = new AutoSuggestor(f, frame, words, Color.WHITE.brighter(), Color.BLUE, Color.RED, 0.75f);
A suggestion cna be clicked with the mouse or alternatively the down key can be use to traverse suggestions and the textcomponent
JTextField
pop up window will be shown under the component:
while JTextArea
and any other JTextComponent
s will have it visible under the Carets current position:
Hope it helps others.