0

私にとっての最初の投稿。私は計算機科学の学位を取得した1年生です。

割り当て用の基本的なGUIを作成していましたが、何らかの理由で、作成したJFrameの1つである、私が一生見ることができないため、登録ボタンから呼び出されたときに登録クラスのインスタンスが完全に空白で表示されます。ログインクラスのアクションリスナー...

また、Mainメソッドを含み、Loginクラスを呼び出す個別のメインクラスがあります。Login Class JFrameは正常に機能し、前述のように、問題は、LoginClassのRegisterボタンアクションリスナー内で呼び出された場合にのみRegistrationClassで発生します。プログラム内の他のすべてのJFrameも正常に動作します。

メインからRegisterClassを直接呼び出そうとしましたが、同じ問題がありますが、最も基本的な形式に縮小しようとしましたが、空白の色のないJFrame以外は何も表示されません。

これがコードです(未完成ですが、そのまま動作します)。ずさんなことをお詫びしますが、私は完全な初心者です。

誰かがそれの何が悪いのか見ることができますか?

前もって感謝します!

    package guitest;

    import java.awt.Color;
    import java.awt.Component;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;

    public class Register extends JFrame{

        JButton regSubmit = new JButton("Submit");

        JTextField email = new JTextField();
        JTextField name = new JTextField();
        JTextField Address1 = new JTextField();
        JTextField Address2 = new JTextField();

        JPasswordField password1 = new JPasswordField();
        JPasswordField password2 = new JPasswordField();

        String nameTxt = email.getText();
        String passTxt = password1.getText();
        String info = "";

        FlowLayout layout1 = new FlowLayout();    

        public void Reg(){
            this.setTitle("La Volpe Registration");
            this.setLayout(layout1);    
            this.add(Address1);
            this.add(Address2);
            this.add(email);
            this.add(password1);
            this.add(password2);
            this.add(name);
            this.add(regSubmit);
            this.getContentPane().setBackground(Color.green);
            this.setSize(370, 160);

            regSubmit.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    regSubmitActionPerformed(evt);
                }

                private void regSubmitActionPerformed(java.awt.event.ActionEvent evt) { 

                String name = email.getText();
                String pass = password1.getText();
                String info = "";

                System.out.println("registering...");

                boolean eof;

                try{
                    // Create file
                    FileWriter file = new FileWriter("\\regdata.txt");
                    BufferedWriter out = new BufferedWriter(file);
                    out.write("\n"+nameTxt+", "+passTxt);
                }

                catch (Exception e){
                }   
            }   
        });
        this.setVisible(true);
    }    
}

そしてそれにリンクするクラス...


package guitest;

    import java.awt.Color;
    import java.awt.Component;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;

    /**
    * @author david
    */

    public class Login {

    JFrame loginFrame = new JFrame();
    Register reg3 = new Register();

    JButton submit = new JButton("Submit");
    JButton clear = new JButton("Clear");
    JButton register = new JButton ("Register with Us");

    JPasswordField pass = new JPasswordField(20);
    JTextField email = new JTextField(20);
    JLabel em = new JLabel("Email Address: ");
    JLabel pw = new JLabel("Password: ");

    String pathname;
    String line;
    String [] records = new String [1000];
    int count = 0;

    FlowLayout layout1 = new FlowLayout();

        public Login(){

            //Adds Email label and text field
            loginFrame.add(em);
            loginFrame.add(email);

            //Adds password label and field
            loginFrame.add(pw);
            loginFrame.add(pass);

            //Adds buttons
            loginFrame.add(submit);
            loginFrame.add(clear);
            loginFrame.add(register);

            loginFrame.getContentPane().setBackground(Color.green);

            loginFrame.setLayout(layout1);

            loginFrame.setSize(370, 160);

            loginFrame.setTitle("La Volpe - Login");

            submit.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    submitActionPerformed(evt);    
                }            

                private void submitActionPerformed(java.awt.event.ActionEvent evt){                                         
                String emailadd = email.getText();
                String password = pass.getText();
                pathname = "\\regdata.txt";

                boolean eof;

                try{
                    FileReader file = new FileReader(pathname);
                    BufferedReader buff = new BufferedReader(file);

                    eof = false; // set the eof boolean to false

                        while (!eof){
                        line = buff.readLine();
                        if (line == null){ // test to see if the end of file has been reached
                        eof = true;  // if the end of file has been found set the eof Boolean to true
                        }
                        else{ 
                        // end of file not reached so move the contents of the line to the records
                        //array
                        records[count] = line;
                        count ++;
                        System.out.println(line);  // print out the new line input for error checking
                        }
                    }    
                    buff.close();
                }
                catch (IOException e){
                    System.out.println("Error --  "+ e.toString());
                }

                boolean notTrue = false;

                for (int i = 0; i < count; i++) {       
                    if ((!notTrue)&&((emailadd + "," + password).equals(records[i]))) {
                        FoodSelectionMain loggedIn = new FoodSelectionMain();
                        loggedIn.setVisible(true);
                    } 
                }
                if (!notTrue){
                    JOptionPane.showInputDialog("Please check your login "
                    + "and try again. If you are a new user, please "
                    + "register by pressing the 'REGISTER' button");
                }
            }   

        }); 

        // TODO add your handling code here:


        clear.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                clearActionPerformed(evt);
            }

            public void clearActionPerformed(java.awt.event.ActionEvent evt){
                email.setText(null);
                pass.setText(null);
            }

        }); 
        register.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                registerActionPerformed(evt);
            }

            public void registerActionPerformed(java.awt.event.ActionEvent evt){
                reg3.setVisible(true);
                    System.out.println("Register pressed");
            }
        });
        loginFrame.setVisible(true);
    }
}
4

1 に答える 1

1

これを試して、Register クラスで、コンストラクター名を Reg() から Register() に修正します。

GUI アプリを構築する前に、これらのいくつかのガイドラインを心に留めておいてください。

  1. container のサブクラスのオブジェクトを作成します。

  2. コンテナーに入るすべてのコンポーネントをインスタンス変数と見なします。

  3. これらのインスタンス変数とイベント処理をコンストラクターの外側でメソッド (つまり、setComponent()、setHandler().etc) に設定しますが、コンストラクターからこれらのメソッド呼び出しを行います。

  4. 今はこれをメインに使って...

.

EventQueue.invokeLater(new Runnable() {

    public void run() {
        Myframe f = new Myframe();
        f.setVisible(true);
    }
}
于 2012-05-22T04:22:35.887 に答える