Best way to implement a selection box from a large

2019-02-25 08:44发布

问题:

I have a large set of data from which the user has to select one. I'm thinking of a way to implement it (of course, in a GUI). I have a few ideas. But just thought of posting here as there may be better alternatives..

Say, user has to select a name from a large set of user base. If I simply put a text field for user to enter the name, then there can be issues like entering same name in different formats, misspelling etc...

I see two options here

  • Using a combo box
  • Using a list (Actually i'm thinking of something like a tool tip. As I cant show the whole list always due to space issues)

But combo box won't be much user friendly i guess. As the user will have to scroll around the whole list to select an entry. If the number of entries are too large, this will be

Which means, now I'm left only one option. A popping up list, which will change the content according the text user is entering in the text field. So he can type first few letters and the list will show all the entries starting from the entered text. Got my point, right?

Are there any other better to achieve this kind of need?

If I'm going to implement above, what will be the best way to follow. I'm thinking of extending the JTextField to add required functionality. Well, I'll put some method to set the popup list entries. And I'll add some actionListner to watch the text field, and control the popup list accordingly...

回答1:

Autocomplete is what you are probably looking for. Google for "java swing jcombobox autocomplete" and limit results for the last couple of years to get relevant results. There will be a lot of examples and ideas on how to implement this with custom code.

I believe there is also some custom libraries like "swingx" that provide at least partial or full implementations to save time.

http://swingx.java.net/

They have released code as recently as the beginning of this years so it appears active and might have what you need.



回答2:

You could take a look at SwingLab's autocomplete feature, it allows you to attach it to a JCombBox, JList or JTextComponent



回答3:

use AutoComplete JComboBox/JTextField

  • based on Standard Java Classes

  • no issue with larger sets of data

  • no issue with Focus, BackSpace Key, Caret

  • for better performance to required sort the array before use

  • simple workaround for setStrict(true/false), restrict input to array