尝试使用JFileChooser
来允许编辑包含字符串的文件。在这样做时,我被迫使用try
语句来捕获任何IOException
错误。我有BufferedReader
扫描文件,我已经能够成功完成文件所需的一切(解析明智)。
当我试图让用户选择某个'项目时会出现问题。编辑。我忘了提到正在读取的文件有两个字段,一个项目名称和项目定价。每行代表一个新项目。我已经能够将每行的项目名称添加到JComboBox
,以允许用户选择要编辑的项目。
我似乎无法让我的JOptionPane.showConfirmDialog
显示在try语句中。我JOptionPane
唯一可以使用的变体是.showInputDialog
,但这会增加一个我不想要的字段。
到底是怎么回事?我知道我的语法对于JOptionPane
是正确的,因为如果我将它放在try语句之外它会显示正常(没有任何所需信息的albiet)。有没有办法传出我从try
语句中的文件中获取的itemList?我正在通过方法调用进行思考,但正如我试图解决这个问题一样。
public class editItem extends JPanel{
private Item item;
private String filePath;
private String[] itemList;
private final JFormattedTextField name, price;
private final FileNameExtensionFilter filter;
private JFileChooser choose;
private File file;
private JComboBox cb;
private findString findString;
public editItem() throws FileNotFoundException{
this.filter = new FileNameExtensionFilter("Item File", "ite");
name = new JFormattedTextField();
price = new JFormattedTextField();
cb = new JComboBox();
choose = new JFileChooser();
choose.setAcceptAllFileFilterUsed(false);
choose.setFileFilter(filter);
cb.setEditable(false);
startItemPanel();
}
private void startItemPanel() throws FileNotFoundException{
int choice = choose.showOpenDialog(this);
if (choice == JFileChooser.APPROVE_OPTION){
try{
BufferedReader br = new BufferedReader(new FileReader(choose.getSelectedFile()));
String line = br.readLine();
int i = 0;
while(line != null){
String[] parts = line.split(" ");
itemList[i]= line;
line = br.readLine();
item = new Item(parts[0], Double.parseDouble(parts[1]));
cb.addItem(item.getItemName());
i++;
Object[] message = { "Select Item to Edit", cb,};
int option= JOptionPane.showConfirmDialog(this, message, "Edit Item Information", JOptionPane.OK_CANCEL_OPTION);
if (option == JOptionPane.OK_OPTION){
String selection = (String)cb.getSelectedItem();
findString = new findString(itemList, selection);
edit();
}
}
}catch(Exception ex){}
}
}
private void edit() {
name.setValue(itemList[findString.find()]);
name.setValue(itemList[findString.find()+1]);
Object[] message = {
"Item Name", name,
"Item Price", price,
};
int option = JOptionPane.showConfirmDialog(this, message, "New Customer Information", JOptionPane.OK_CANCEL_OPTION);
if (option == JOptionPane.OK_OPTION){
item = new Item(name.getText(), Double.parseDouble(price.getText()));
try{
filePath = choose.getSelectedFile().getAbsolutePath();;
if (!filePath.matches(".*\\.ite$")){
filePath += ".ite";
}
file = new File(filePath);
try(FileWriter fw = new FileWriter(filePath, false)){
int length = itemList.length;
for (int i = 0; i < (length); i++){
fw.write(itemList[i]);
i++;
fw.write(" " + itemList[i]);
fw.write("\n");
}
}
}catch (IOException ex){
}
}
}
}
我尝试将第一个JOptionPane
放入我的edit()
方法,并从JComboBox
语句中传递itemList
和try
({{1}之外没有。
当我什么都不说时,我应该补充一下,我的意思是没有任何反应。我的while
课程在Driver
上调用了editItem
课程actionListener
,我发现这不是JButton
课程。
我的main
方法也没有完全完成,忘了将用户输入添加到已编辑的项目中!