Mega Code Archive

 
Categories / Java / Swing JFC
 

ComoboBox loads and saves items automatically from a file

import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.net.URL; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ComboBoxModel; import javax.swing.JComboBox; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; public class MemComboBoxDemo extends JFrame {   protected MemComboBox urlComboBox = new MemComboBox();   public MemComboBoxDemo() {     super();     setSize(300, 100);     getContentPane().setLayout(new BorderLayout());     JPanel p = new JPanel();     p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));     p.add(new JLabel("Address"));     urlComboBox.load("addresses.dat");     ComboBoxListener lst = new ComboBoxListener();     urlComboBox.addActionListener(lst);     MemComboAgent agent = new MemComboAgent(urlComboBox);     p.add(urlComboBox);     getContentPane().add(p, BorderLayout.NORTH);     WindowListener wndCloser = new WindowAdapter() {       public void windowClosing(WindowEvent e) {         urlComboBox.save("addresses.dat");         System.exit(0);       }     };     addWindowListener(wndCloser);     setVisible(true);     urlComboBox.grabFocus();   }   class ComboBoxListener implements ActionListener{     public void actionPerformed(ActionEvent evt) {       System.out.println( urlComboBox.getSelectedItem());     }   }   public static void main(String argv[]) {     new MemComboBoxDemo();   } } class MemComboAgent extends KeyAdapter {   protected JComboBox comboBox;   protected JTextField editor;   public MemComboAgent(JComboBox c) {     comboBox = c;     editor = (JTextField) c.getEditor().getEditorComponent();     editor.addKeyListener(this);   }   public void keyReleased(KeyEvent e) {     char ch = e.getKeyChar();     if (ch == KeyEvent.CHAR_UNDEFINED || Character.isISOControl(ch))       return;     int pos = editor.getCaretPosition();     String str = editor.getText();     if (str.length() == 0)       return;     for (int k = 0; k < comboBox.getItemCount(); k++) {       String item = comboBox.getItemAt(k).toString();       if (item.startsWith(str)) {         editor.setText(item);         editor.setCaretPosition(item.length());         editor.moveCaretPosition(pos);         break;       }     }   } } class MemComboBox extends JComboBox {   public static final int MAX_MEM_LEN = 30;   public MemComboBox() {     super();     setEditable(true);   }   public void add(String item) {     removeItem(item);     insertItemAt(item, 0);     setSelectedItem(item);     if (getItemCount() > MAX_MEM_LEN)       removeItemAt(getItemCount() - 1);   }   public void load(String fName) {     try {       if (getItemCount() > 0)         removeAllItems();       File f = new File(fName);       if (!f.exists())         return;       FileInputStream fStream = new FileInputStream(f);       ObjectInput stream = new ObjectInputStream(fStream);       Object obj = stream.readObject();       if (obj instanceof ComboBoxModel)         setModel((ComboBoxModel) obj);       stream.close();       fStream.close();     } catch (Exception e) {       System.err.println("Serialization error: " + e.toString());     }   }   public void save(String fName) {     try {       FileOutputStream fStream = new FileOutputStream(fName);       ObjectOutput stream = new ObjectOutputStream(fStream);       stream.writeObject(getModel());       stream.flush();       stream.close();       fStream.close();     } catch (Exception e) {       System.err.println("Serialization error: " + e.toString());     }   } }