Mega Code Archive

 
Categories / Java / Swing JFC
 

List with textfield input

import java.awt.Dimension; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.sql.ResultSet; import java.sql.SQLException; import javax.accessibility.AccessibleContext; import javax.accessibility.AccessibleRole; import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.ListModel; import javax.swing.border.EmptyBorder; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; public class ListInput extends JPanel implements ListSelectionListener,     ActionListener {   protected JLabel label;   protected JTextField textfield;   protected JList list;   protected JScrollPane scrollPane;   public ListInput(String[] data, String title) {     setLayout(null);     setBorder(new EmptyBorder(5, 5, 5, 5));     label = new ListInputLabel(title, JLabel.LEFT);     add(label);     textfield = new ListInputText();     textfield.addActionListener(this);     label.setLabelFor(textfield); // NEW     add(textfield);     list = new ListInputList(data);     list.setVisibleRowCount(4);     list.addListSelectionListener(this);     scrollPane = new JScrollPane(list);     add(scrollPane);   }   public ListInput(String title, int numCols) {     setLayout(null);     setBorder(new EmptyBorder(5, 5, 5, 5));     label = new ListInputLabel(title, JLabel.LEFT);     add(label);     textfield = new ListInputText(numCols);     textfield.addActionListener(this);     label.setLabelFor(textfield); // NEW     add(textfield);     list = new ListInputList();     list.setVisibleRowCount(4);     list.addListSelectionListener(this);     scrollPane = new JScrollPane(list);     add(scrollPane);   }   public void setToolTipText(String text) {     super.setToolTipText(text);     label.setToolTipText(text);     textfield.setToolTipText(text);     list.setToolTipText(text);   }   public void setDisplayedMnemonic(char ch) {     label.setDisplayedMnemonic(ch);   }   public void setSelected(String sel) {     list.setSelectedValue(sel, true);     textfield.setText(sel);   }   public String getSelected() {     return textfield.getText();   }   public void setSelectedInt(int value) {     setSelected(Integer.toString(value));   }   public int getSelectedInt() {     try {       return Integer.parseInt(getSelected());     } catch (NumberFormatException ex) {       return -1;     }   }   public void valueChanged(ListSelectionEvent e) {     Object obj = list.getSelectedValue();     if (obj != null)       textfield.setText(obj.toString());   }   public void actionPerformed(ActionEvent e) {     ListModel model = list.getModel();     String key = textfield.getText().toLowerCase();     for (int i = 0; i < model.getSize(); i++) {       String data = (String) model.getElementAt(i);       if (data.toLowerCase().startsWith(key)) {         list.setSelectedValue(data, true);         break;       }     }   }   public void addListSelectionListener(ListSelectionListener lst) {     list.addListSelectionListener(lst);   }   public Dimension getPreferredSize() {     Insets ins = getInsets();     Dimension labelSize = label.getPreferredSize();     Dimension textfieldSize = textfield.getPreferredSize();     Dimension scrollPaneSize = scroll.getPreferredSize();     int w = Math.max(Math.max(labelSize.width, textfieldSize.width),         scrollPaneSize.width);     int h = labelSize.height + textfieldSize.height + scrollPaneSize.height;     return new Dimension(w + ins.left + ins.right, h + ins.top + ins.bottom);   }   public Dimension getMaximumSize() {     return getPreferredSize();   }   public Dimension getMinimumSize() {     return getPreferredSize();   }   public void doLayout() {     Insets ins = getInsets();     Dimension size = getSize();     int x = ins.left;     int y = ins.top;     int w = size.width - ins.left - ins.right;     int h = size.height - ins.top - ins.bottom;     Dimension labelSize = label.getPreferredSize();     label.setBounds(x, y, w, labelSize.height);     y += labelSize.height;     Dimension textfieldSize = textfield.getPreferredSize();     textfield.setBounds(x, y, w, textfieldSize.height);     y += textfieldSize.height;     scrollPane.setBounds(x, y, w, h - y);   }   public void appendResultSet(ResultSet results, int index,       boolean toTitleCase) {     textfield.setText("");     DefaultListModel model = new DefaultListModel();     try {       while (results.next()) {         String str = results.getString(index);         if (toTitleCase) {           str = Character.toUpperCase(str.charAt(0))               + str.substring(1);         }         model.addElement(str);       }     } catch (SQLException ex) {       System.err.println("appendResultSet: " + ex.toString());     }     list.setModel(model);     if (model.getSize() > 0)       list.setSelectedIndex(0);   }   class ListInputLabel extends JLabel {     public ListInputLabel(String text, int alignment) {       super(text, alignment);     }     public AccessibleContext getAccessibleContext() {       return ListInput.this.getAccessibleContext();     }   }   class ListInputText extends JTextField {     public ListInputText() {     }     public ListInputText(int numCols) {       super(numCols);     }     public AccessibleContext getAccessibleContext() {       return ListInput.this.getAccessibleContext();     }   }   class ListInputList extends JList {     public ListInputList() {     }     public ListInputList(String[] data) {       super(data);     }     public AccessibleContext getAccessibleContext() {       return ListInput.this.getAccessibleContext();     }   }   // Accessibility Support   public AccessibleContext getAccessibleContext() {     if (accessibleContext == null)       accessibleContext = new AccessibleOpenList();     return accessibleContext;   }   protected class AccessibleOpenList extends AccessibleJComponent {     public String getAccessibleName() {       System.out.println("getAccessibleName: " + accessibleName);       if (accessibleName != null)         return accessibleName;       return label.getText();     }     public AccessibleRole getAccessibleRole() {       return AccessibleRole.LIST;     }   }   public static void main(String[] a) {     String[] fontNames = new String[] { "Roman", "Times Roman" };     ListInput lstFontName = new ListInput(fontNames, "Name:");     lstFontName.setDisplayedMnemonic('n');     lstFontName.setToolTipText("Font name");     JFrame f = new JFrame();     f.addWindowListener(new WindowAdapter() {       public void windowClosing(WindowEvent e) {         System.exit(0);       }     });     f.getContentPane().add(lstFontName);     f.pack();     f.setSize(new Dimension(300, 200));     f.show();   } }