0

我有一个程序会询问你的名字和名字。我使用 OutputStream 将名字保存在工作区中存储的文件中。我使用 BufferedReader 读取文件,但我正在尝试获取它,因此如果该人在 JOptionPane.YES_NO_DIALOG 上单击“是”,它将使用文件中的名称!我试过做 if 语句,如果 JOptionPane ... 然后是 text.setText(savedName),但它只是显示为“欢迎 null null”

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class BingoHelper extends JFrame implements WindowListener, ActionListener{
JTextField text = new JTextField();

//JLabel bg = new JLabel("helo");

private JButton b; {
        b = new JButton("Click to enter name");
        }

JPanel pnlButton = new JPanel();

public static String fn;
public static String sn;

public static int n;

File f = new File("test.txt");

public void actionPerformed (ActionEvent e){

    Object[] yesNo = {"Yes",
                      "No",};
    n = JOptionPane.showOptionDialog(null,"Would you like to use previously entered data?","Welcome Back?",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,  null, yesNo,yesNo[1]);

    if (n == JOptionPane.NO_OPTION){    
        for(fn=JOptionPane.showInputDialog("What is your first name?");!fn.matches("[a-zA-Z]+");fn.isEmpty()){
            JOptionPane.showMessageDialog(null, "Alphabet characters only.");
            fn=JOptionPane.showInputDialog("What is your first name?");
        }
        for(sn=JOptionPane.showInputDialog("What is your second name?");!sn.matches("[a-zA-Z]+");sn.isEmpty()){
            JOptionPane.showMessageDialog(null, "Alphabet characters only.");
            sn=JOptionPane.showInputDialog("What is your second name?");
        }

    }
    //JOptionPane.showMessageDialog(null, "Welcome " + fn + " " + sn + ".", "", JOptionPane.INFORMATION_MESSAGE);
    text.setText("Welcome " + fn + " " + sn + ".");
    b.setVisible(false);
    b.setEnabled(false);
    text.setVisible(true);
    text.setBounds(140,0,220,20);
    text.setHorizontalAlignment(JLabel.CENTER);
    text.setEditable(false);
    text.setBackground(Color.YELLOW);
    pnlButton.setBackground(Color.DARK_GRAY);
    writeToFile();
    //bg.setVisible(true);
}

private void writeToFile() {

    String nameToWrite = fn;
    OutputStream outStream = null;
    try {
        outStream = new FileOutputStream(f);
        outStream.write(nameToWrite.getBytes());
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
        String savedName = br.readLine();

        //System.out.println(savedName);
        br.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();

    } finally {
        if (null != outStream) {
            try {
                outStream.close();
            } catch (IOException e) {
                // do nothing
            }
        }
    }
}
4

1 回答 1

0

当您使用JOptionPane自己的选项JOptionPane时,将返回用户选择的选项的索引...

也就是说,在您的情况下,如果用户选择“是”,那么JOptionPane将返回0,或者如果用户选择“否”,它将返回1

所以,而不是使用JOptionPane.NO_OPTION你需要使用1,例如......

Object[] yesNo = {"Yes",
                  "No",};
n = JOptionPane.showOptionDialog(null,"Would you like to use previously entered data?","Welcome Back?",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,  null, yesNo,yesNo[1]);

if (n == 1){    
    //...
}

我还强烈建议您避免static在这种情况下使用字段引用,因为如果您运行的类实例不止一个,它可能会导致意外行为;)

于 2013-10-18T00:08:29.583 回答