Reputation: 23
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
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
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