Onur Dogu
Onur Dogu

Reputation: 23

Saving the added String item to ComboBox

I am new to Java and Swing and I couldn't find a solution to the problem I have. I have a GUI which can add items to a combobox. I am trying to keep the added items in the combobox after the GUI is shut down and have the newly added items when it's launched again. Is there any easy way to do this?

Here is the code for the GUI:

package GUI1;

import java.awt.BorderLayout;

public class OnurComboBox extends JDialog implements 
ActionListener, ItemListener {

    private final JPanel contentPanel = new JPanel();
    private JComboBox comboBox = null;
    private int comnum;
    public String combo;
//    final String[] theOptions = {
//  "Option 1", "Option 2", 
//        "Option 3", "Option 4", 
//  "Option 5", "Option 6"
//    };
    private JTextField textField;
    private JTextField textField_1;
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        try {
            OnurComboBox dialog = new OnurComboBox();
            dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            dialog.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Create the dialog.
     */
    public OnurComboBox() {



        setTitle("Choose an Option");
        setSize(325, 300);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);

        JDesktopPane desktopPane = new JDesktopPane();
        getContentPane().add(desktopPane, BorderLayout.CENTER);

        JButton btnOk = new JButton("OK");
        btnOk.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {                
                System.out.println("The item selected is: " + combo);
                System.exit(0);
            }
        });
        btnOk.setBounds(66, 153, 89, 23);
        desktopPane.add(btnOk);

        JButton btnCancel = new JButton("Cancel");
        btnCancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        btnCancel.setBounds(165, 153, 89, 23);
        desktopPane.add(btnCancel);

//        final JComboBox comboBox = new JComboBox(theOptions);
        Vector comboBoxItems=new Vector();
        comboBoxItems.add("A");
        comboBoxItems.add("B");
        comboBoxItems.add("C");
        comboBoxItems.add("D");
        comboBoxItems.add("E");
        final DefaultComboBoxModel model = new DefaultComboBoxModel(comboBoxItems);
        final JComboBox comboBox = new JComboBox(model);
        comboBox.setBounds(10, 34, 187, 23);
        comboBox.setSelectedIndex(-1);
        comboBox.addItemListener(this);
        desktopPane.add(comboBox);
        comboBox.addItemListener(new ItemListener(){
          public void itemStateChanged(ItemEvent ie){
          combo = (String)comboBox.getSelectedItem();
          comnum = comboBox.getSelectedIndex();
          textField.setText(combo);
          }
          });

        textField = new JTextField();
        textField.setBounds(10, 228, 187, 23);
        desktopPane.add(textField);
        textField.setColumns(10);

        textField_1 = new JTextField();
        textField_1.setBounds(10, 103, 187, 23);
        desktopPane.add(textField_1);
        textField_1.setColumns(10);

        JTextPane txtpnSelected = new JTextPane();
        txtpnSelected.setEditable(false);
        txtpnSelected.setText("Item Selected:");
        txtpnSelected.setBounds(10, 202, 89, 23);
        desktopPane.add(txtpnSelected);

        JButton btnAdd = new JButton("Add");
        btnAdd.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (!textField_1.getText().equals("")){
                      int a = 0;
                      for(int i = 0; i < comboBox.getItemCount(); i++){
                      if(comboBox.getItemAt(i).equals(textField_1.getText())){
                      a = 1;
                      break;
                      }
                      }
                      if (a == 1)
                     JOptionPane.showMessageDialog(null,"Combobox already has this item.");
                      else
                     comboBox.addItem(textField_1.getText());
                     JOptionPane.showMessageDialog(null,"Item added to Combobox");
                      }
                      else{
                      JOptionPane.showMessageDialog(null,"Please enter text in the Text Box");
                      }
                      }
                      });

        btnAdd.setBounds(207, 103, 92, 23);
        desktopPane.add(btnAdd);

        JTextPane txtpnEnterTheOption = new JTextPane();
        txtpnEnterTheOption.setText("Enter the new option:");
        txtpnEnterTheOption.setEditable(false);
        txtpnEnterTheOption.setBounds(10, 80, 131, 23);
        desktopPane.add(txtpnEnterTheOption);

        JButton btnRemove = new JButton("Remove");
        btnRemove.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (comboBox.getItemCount() > 0){
                    comboBox.removeItemAt(comnum);
                    JOptionPane.showMessageDialog(null,"Item removed");}
                      else
                      JOptionPane.showMessageDialog(null,"Item not available");
            }
        });
        btnRemove.setBounds(207, 34, 92, 23);
        desktopPane.add(btnRemove);

        JTextPane txtpnSelectAnItem = new JTextPane();
        txtpnSelectAnItem.setText("Select an item from the list or add a new option");
        txtpnSelectAnItem.setBounds(10, 3, 289, 20);
        desktopPane.add(txtpnSelectAnItem);
        setVisible(true);


    }

    public void itemStateChanged(ItemEvent e) {

        if (e.getStateChange() == ItemEvent.SELECTED) {
            JComboBox combo = (JComboBox) e.getSource();
//            int index = combo.getSelectedIndex();
//            display.setIcon(new ImageIcon(
//                ClassLoader.getSystemResource(images[index])));
        }

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

    }
}

The edited and working code, which does the job, with the great help of "Alya'a Gamal":

package GUI1;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JDesktopPane;
import java.awt.event.ActionEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.JTextField;
import javax.swing.JTextPane;

public class OnurComboBox1 extends JDialog implements 
ActionListener, ItemListener {

    private final JPanel contentPanel = new JPanel();
    private JComboBox comboBox = null;
    private int comnum;
    public String combo;
    private JTextField textField;
    private JTextField textField_1;
    static String filePath = "t.txt";/////this text file have 
//    private PrintWriter out;
//    private BufferedReader input;


    /**
     * Launch the application.
     */
    public static void main(String[] args) {

        try {
            OnurComboBox1 dialog = new OnurComboBox1();
            dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            dialog.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Create the dialog.
     * @throws IOException 
     */
    public OnurComboBox1() throws IOException {

        BufferedReader input = new BufferedReader(new FileReader(filePath));  

        final PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("t.txt", true)));

        setTitle("Choose an Option");
        setSize(325, 300);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);

        JDesktopPane desktopPane = new JDesktopPane();
        getContentPane().add(desktopPane, BorderLayout.CENTER);

        JButton btnOk = new JButton("OK");
        btnOk.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {                
                System.out.println("The item selected is: " + combo);
                out.close();/////to close the text file
                System.exit(0);
            }
        });
        btnOk.setBounds(66, 153, 89, 23);
        desktopPane.add(btnOk);

        JButton btnCancel = new JButton("Cancel");
        btnCancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        btnCancel.setBounds(165, 153, 89, 23);
        desktopPane.add(btnCancel);

        List<String> strings = new ArrayList<String>();
        try {
            String line = null;
            try {
                while ((line = input.readLine()) != null) {
                    strings.add(line);
                }
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        } finally {
            try {
                input.close();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

        String[] lineArray = strings.toArray(new String[]{});
        final DefaultComboBoxModel model = new DefaultComboBoxModel(lineArray);
        final JComboBox comboBox = new JComboBox(model);

        comboBox.setBounds(10, 34, 187, 23);
        comboBox.setSelectedIndex(-1);
        comboBox.addItemListener(this);
        desktopPane.add(comboBox);
        comboBox.addItemListener(new ItemListener(){
          public void itemStateChanged(ItemEvent ie){
          combo = (String)comboBox.getSelectedItem();
          comnum = comboBox.getSelectedIndex();
          textField.setText(combo);
          }
          });

        textField = new JTextField();
        textField.setBounds(10, 228, 187, 23);
        desktopPane.add(textField);
        textField.setColumns(10);

        textField_1 = new JTextField();
        textField_1.setBounds(10, 103, 187, 23);
        desktopPane.add(textField_1);
        textField_1.setColumns(10);

        JTextPane txtpnSelected = new JTextPane();
        txtpnSelected.setEditable(false);
        txtpnSelected.setText("Item Selected:");
        txtpnSelected.setBounds(10, 202, 89, 23);
        desktopPane.add(txtpnSelected);

        JButton btnAdd = new JButton("Add");
        btnAdd.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (!textField_1.getText().equals("")){
                      int a = 0;
                      for(int i = 0; i < comboBox.getItemCount(); i++){
                      if(comboBox.getItemAt(i).equals(textField_1.getText())){
                      a = 1;
                      break;
                      }
                      }
                      if (a == 1)
                     JOptionPane.showMessageDialog(null,"Combobox already has this item.");
                      else
                     comboBox.addItem(textField_1.getText());
                     out.println(textField_1.getText());////this will add the new value in the text file
                     JOptionPane.showMessageDialog(null,"Item added to Combobox");
                      }
                      else{
                      JOptionPane.showMessageDialog(null,"Please enter text in the Text Box");
                      }
                      }
                      });

        btnAdd.setBounds(207, 103, 92, 23);
        desktopPane.add(btnAdd);

        JTextPane txtpnEnterTheOption = new JTextPane();
        txtpnEnterTheOption.setText("Enter the new option:");
        txtpnEnterTheOption.setEditable(false);
        txtpnEnterTheOption.setBounds(10, 80, 131, 23);
        desktopPane.add(txtpnEnterTheOption);

        JButton btnRemove = new JButton("Remove");
        btnRemove.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (comboBox.getItemCount() > 0){
                    comboBox.removeItemAt(comnum);
                    JOptionPane.showMessageDialog(null,"Item removed");}
                      else
                      JOptionPane.showMessageDialog(null,"Item not available");
            }
        });
        btnRemove.setBounds(207, 34, 92, 23);
        desktopPane.add(btnRemove);

        JTextPane txtpnSelectAnItem = new JTextPane();
        txtpnSelectAnItem.setText("Select an item from the list or add a new option");
        txtpnSelectAnItem.setBounds(10, 3, 289, 20);
        desktopPane.add(txtpnSelectAnItem);
        setVisible(true);


    }

    public void itemStateChanged(ItemEvent e) {

        if (e.getStateChange() == ItemEvent.SELECTED) {
            JComboBox combo = (JComboBox) e.getSource();
//            int index = combo.getSelectedIndex();
//            display.setIcon(new ImageIcon(
//                ClassLoader.getSystemResource(images[index])));
        }

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

    }
}

Upvotes: 0

Views: 3037

Answers (2)

Alya&#39;a Gamal
Alya&#39;a Gamal

Reputation: 5648

You can use text file to read and write from it

String filePath = "t.txt";/////this text file have 

1- create text file and write your Vectot (A,B,C,D) each one in separated line on it

2-create two variables, one to read the text

BufferedReader input = new BufferedReader(new FileReader(filePath));

and the second to write on the file the value will be add :

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("t.txt", true)));

3- read this file in your comboBox , like that :

 List<String> strings = new ArrayList<String>();
        try {
            String line = null;
            while ((line = input.readLine()) != null) {
                strings.add(line);
            }
        } catch (FileNotFoundException e) {
            System.err.println("Error, file " + filePath + " didn't exist.");
        } finally {
            input.close();
        }

        String[] lineArray = strings.toArray(new String[]{});
        final DefaultComboBoxModel model = new DefaultComboBoxModel(lineArray);
        final JComboBox comboBox = new JComboBox(model);

4- In btnAdd button Actionlistner add:

out.println(textField_1.getText());////this will add the new value in the text file

5- In btnOk button Actionlistner add:

out.close();/////to close the text file

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDesktopPane;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JTextPane;

class OnurComboBox extends JDialog implements
        ActionListener, ItemListener {

    private final JPanel contentPanel = new JPanel();
    private JComboBox comboBox = null;
    private int comnum;
    public String combo;
//    final String[] theOptions = {
//  "Option 1", "Option 2", 
//        "Option 3", "Option 4", 
//  "Option 5", "Option 6"
//    };
    private JTextField textField;
    private JTextField textField_1;
    String filePath = "t.txt";
     BufferedReader input = new BufferedReader(new FileReader(filePath));
public static PrintWriter out;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    try {
        out = new PrintWriter(new BufferedWriter(new FileWriter("t.txt", true)));
    } catch (Exception e) {
    }

    try {
        OnurComboBox dialog = new OnurComboBox();
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        dialog.setVisible(true);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
    /**
     * Create the dialog.
     */
    public OnurComboBox() throws FileNotFoundException, IOException {



        setTitle("Choose an Option");
        setSize(325, 300);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);

        JDesktopPane desktopPane = new JDesktopPane();
        getContentPane().add(desktopPane, BorderLayout.CENTER);

        JButton btnOk = new JButton("OK");
        btnOk.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                System.out.println("The item selected is: " + combo);

                out.close();


                System.exit(0);
            }
        });
        btnOk.setBounds(66, 153, 89, 23);
        desktopPane.add(btnOk);

        JButton btnCancel = new JButton("Cancel");
        btnCancel.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        btnCancel.setBounds(165, 153, 89, 23);
        desktopPane.add(btnCancel);

//        final JComboBox comboBox = new JComboBox(theOptions);

        List<String> strings = new ArrayList<String>();
        try {
            String line = null;
            while ((line = input.readLine()) != null) {
                strings.add(line);
            }
        } catch (FileNotFoundException e) {
            System.err.println("Error, file " + filePath + " didn't exist.");
        } finally {
            input.close();
        }

        String[] lineArray = strings.toArray(new String[]{});
        final DefaultComboBoxModel model = new DefaultComboBoxModel(lineArray);
        final JComboBox comboBox = new JComboBox(model);
        comboBox.setBounds(10, 34, 187, 23);
        comboBox.setSelectedIndex(-1);
        comboBox.addItemListener(this);
        desktopPane.add(comboBox);
        comboBox.addItemListener(new ItemListener() {

            public void itemStateChanged(ItemEvent ie) {
                combo = (String) comboBox.getSelectedItem();
                comnum = comboBox.getSelectedIndex();
                textField.setText(combo);
            }
        });

        textField = new JTextField();
        textField.setBounds(10, 228, 187, 23);
        desktopPane.add(textField);
        textField.setColumns(10);

        textField_1 = new JTextField();
        textField_1.setBounds(10, 103, 187, 23);
        desktopPane.add(textField_1);
        textField_1.setColumns(10);

        JTextPane txtpnSelected = new JTextPane();
        txtpnSelected.setEditable(false);
        txtpnSelected.setText("Item Selected:");
        txtpnSelected.setBounds(10, 202, 89, 23);
        desktopPane.add(txtpnSelected);

        JButton btnAdd = new JButton("Add");
        btnAdd.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if (!textField_1.getText().equals("")) {
                    int a = 0;
                    for (int i = 0; i < comboBox.getItemCount(); i++) {
                        if (comboBox.getItemAt(i).equals(textField_1.getText())) {
                            a = 1;
                            break;
                        }
                    }
                    if (a == 1) {
                        JOptionPane.showMessageDialog(null, "Combobox already has this item.");
                    } else {
                        comboBox.addItem(textField_1.getText());
                    }

                    out.println(textField_1.getText());


                    JOptionPane.showMessageDialog(null, "Item added to Combobox");
                } else {
                    JOptionPane.showMessageDialog(null, "Please enter text in the Text Box");
                }
            }
        });

        btnAdd.setBounds(207, 103, 92, 23);
        desktopPane.add(btnAdd);

        JTextPane txtpnEnterTheOption = new JTextPane();
        txtpnEnterTheOption.setText("Enter the new option:");
        txtpnEnterTheOption.setEditable(false);
        txtpnEnterTheOption.setBounds(10, 80, 131, 23);
        desktopPane.add(txtpnEnterTheOption);

        JButton btnRemove = new JButton("Remove");
        btnRemove.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if (comboBox.getItemCount() > 0) {
                    comboBox.removeItemAt(comnum);
                    JOptionPane.showMessageDialog(null, "Item removed");
                } else {
                    JOptionPane.showMessageDialog(null, "Item not available");
                }
            }
        });
        btnRemove.setBounds(207, 34, 92, 23);
        desktopPane.add(btnRemove);

        JTextPane txtpnSelectAnItem = new JTextPane();
        txtpnSelectAnItem.setText("Select an item from the list or add a new option");
        txtpnSelectAnItem.setBounds(10, 3, 289, 20);
        desktopPane.add(txtpnSelectAnItem);
        setVisible(true);


    }

    public void itemStateChanged(ItemEvent e) {

        if (e.getStateChange() == ItemEvent.SELECTED) {
            JComboBox combo = (JComboBox) e.getSource();
//            int index = combo.getSelectedIndex();
//            display.setIcon(new ImageIcon(
//                ClassLoader.getSystemResource(images[index])));
        }

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
    }
}

Upvotes: 1

Erik Pragt
Erik Pragt

Reputation: 14677

Probably the easiest in your case is to write them to a file. Have a look at Commons IO, to make file reading and writing easier. The best way is to have a sort of initialisation method which will read the file, populate it from the file contents, and then display it.

Then, whenever you add something to the list, also write it to the file. That, or you could go for a database, or serialization of the ComboBox model, but file reading/writing would be the easiest, IMO.

Upvotes: 0

Related Questions