0

あなたのファーストネームとセカンドネームを尋ねるプログラムがあります。OutputStream を使用して、ワークスペースに保存されているファイルに名前を保存しました。私は BufferedReader を使用してファイルを読み取りますが、それを取得しようとしているので、JOptionPane.YES_NO_DIALOG で [はい] をクリックすると、ファイル内の名前が使用されます! if JOptionPane... then text.setText(savedName) と言った if ステートメントを試してみましたが、「Welcome 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

したがって、 using の代わりにJOptionPane.NO_OPTIONuse が必要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 に答える