package dk.itu.oop.lecture11; import java.awt.*; import java.awt.event.*; import java.text.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; import java.util.*; /** Selecting list is a GUI component with two parts, a filter and a list. * Only elements that contain the filter will be shown in the list. * The selecting list has a raw list, which are the elements which * are filtered. **/ class SelectingList extends JPanel{ final JList list; final SelectingListModel listModel; JTextField selText; public SelectingList(Object[] elements){ listModel = new SelectingListModel( elements ); list = new JList( listModel ); list.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); selText = new JTextField( 12 ); this.setLayout( new BorderLayout() ); this.add( selText,"North" ); this.add( new JScrollPane( list ) ,"Center" ); selText.addCaretListener( new CaretListener(){ public void caretUpdate(CaretEvent e){ listModel.updateFilter( selText.getText() ); if ( listModel.getSize() == 1 ) list.setSelectedIndex(0); else list.clearSelection(); } }); } } class SelectingListModel extends AbstractListModel { private final Object[] rawData; private java.util.List filteredData = new ArrayList(); private String filter; SelectingListModel(Object[] raw){ rawData = raw; updateFilter(""); } private boolean checkAgainstFilter(Object o){ String data = o.toString().toLowerCase(); String filter = this.filter.toLowerCase(); return data.indexOf(filter) >=0; } public void updateFilter(String newFilter){ filter = newFilter; filteredData.clear(); for (int i = 0; i