0

私は正常に動作する次のコードを持っていますが、ユーザーがボタンをクリックしたときではなく、ロード時に人の名前を表示したいと考えています。これをどのように実装しますか?

public class NameSwing implements ActionListener {

    private JTextArea tf = new JTextArea(20, 20);
    private JFrame f = new JFrame("names");
    private JButton b = new JButton("view");
    static String fullName;

    public NameSwing() {
        f.add(new JLabel("Name"));
        tf.setEditable(true);
        f.add(tf);

        b.addActionListener(this);
        f.add(b);

        f.setLayout(new FlowLayout());
        f.setSize(600, 600);
        f.setVisible(true);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == b) {
            tf.setText(fullName);
        }
    }

    public static void main(String[] args) throws FileNotFoundException, IOException {
        NameSwing nameSwing = new NameSwing();

        Names t = new Names();
        t.OpenFile();
        t.ReadFile();
        t.CloseFile();

        fullName = Names.fullName;
    }

}

Namesクラス:

package names;

public class Names {

    Scanner scan;
    static String Firstname = null;
    static String Surname;
    static String Fullname;
    static String fullName;
    String myArray[];

    public void OpenFile() {
        try {
            scan = new Scanner(new File("/Users/nikhilpatel/NetBeansProjects/Names/src/names/test.txt"));
            System.out.println("File found!");
        } catch (Exception e) {
            System.out.println("File not found");
        }
    }

    public void ReadFile() {
        while (scan.hasNext()) {
            Firstname = scan.next();
            Surname = scan.next();
            Fullname += Firstname + " " + Surname + "\n";
            fullName = Fullname.replace("null", "");

            System.out.println(fullName);
        }

    }

    public void CloseFile() {
        scan.close();
    }
}
4

2 に答える 2

1

結果を達成する方法に応じて、いくつかの選択肢があります。actionPerformedメソッド本体を抽出してより独立したメソッドにコードをリファクタリングし、mainそのパブリック メソッドを呼び出すことができます。

@Override
public void actionPerformed(ActionEvent e) {
   fillTextArea();
}

public void fillTextArea() {
    // You can drop this line, this Listener is registered for 'b', so 'b' 
    // is the only one who fires the ActionEvent, not need to recheck 
    //
    // if (e.getSource() == b) {

    tf.setText(fullName);
}

public static void main(String[] args) throws FileNotFoundException, IOException {
    NameSwing nameSwing = new NameSwing();

    Names t = new Names();
    t.OpenFile();
    t.ReadFile();
    t.CloseFile();

    fullName = Names.fullName;

    // Invoke the new method
    nameSwing.fillTextArea();
}

別のアプローチ (そしてトリッキーなアプローチ) は、次のようにメソッドdoClickを単純に呼び出すことです。b

// Add a getter for 'b' 
public JButton getButton() { 
    return b;
}

public static void main(String[] args) throws FileNotFoundException, IOException {
    NameSwing nameSwing = new NameSwing();

    Names t = new Names();
    t.OpenFile();
    t.ReadFile();
    t.CloseFile();

    fullName = Names.fullName;

    // This will simulate a 'click' on the button, loading the names 
    nameSwing.getButton().doClick();
}

お役に立てれば

于 2012-12-13T03:59:04.263 に答える
1
public static void main(String[] args) throws FileNotFoundException, IOException {
    NameSwing nameSwing = new NameSwing();

    Names t = new Names();
    t.OpenFile();
    t.ReadFile();
    t.CloseFile();

    fullName = Names.fullName;
    tf.setText(fullName);
}

に何かを追加するだけactionPerformedです。または、新しいメソッド (buttonClick などと呼ばれます) を作成し、1.)actionPerformedと 2.) の最後に呼び出しますmain

于 2012-12-13T01:04:53.013 に答える