我是Java和Swing的新手,我无法找到解决问题的方法。我有一个GUI可以添加项目到组合框。在GUI关闭后,我试图在组合框中保留添加的项目,并在再次启动时添加新添加的项目。有没有简单的方法呢?
以下是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
}
}
编辑和工作的代码,在“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
}
}
答案 0 :(得分:1)
您可以使用文本文件从中读取和写入
String filePath = "t.txt";/////this text file have
1-创建文本文件并在其上写上分隔行的Vectot(A,B,C,D)
2 - 创建两个变量,一个用于阅读文本
BufferedReader input = new BufferedReader(new FileReader(filePath));
和第二个写入文件的值将添加:
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("t.txt", true)));
3-在comboBox
中阅读此文件,如下所示:
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-在btnAdd
按钮Actionlistner中添加:
out.println(textField_1.getText());////this will add the new value in the text file
5-在btnOk
按钮Actionlistner中添加:
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
}
}
答案 1 :(得分:0)
在您的情况下,最简单的方法是将它们写入文件。查看Commons IO,以便更轻松地进行文件读取和写入。最好的方法是使用一种初始化方法来读取文件,从文件内容中填充它,然后显示它。
然后,每当您向列表中添加内容时,也将其写入文件。那,或者您可以选择数据库或ComboBox模型的序列化,但文件读/写将是最简单的IMO。