1

最初に何をしようとしているのかを説明する必要があると思います。名前とパスワードを受け入れるための From テキスト フィールドを作成しました。入力は、UID のユーザー名とパスのパスワードの 2 つの文字列に格納する必要があります。

プログラムが終了するまで値を文字列に保存し、それを印刷するにはどうすればよいでしょうか? printステートメントをどこmain()に置いても、フォームが開く前でもnull値が出力されます。

これが、Netbeans によって生成された私のコードです。メインメソッドを確認してください。

package mypackage;

public class test extends javax.swing.JFrame {
    public test() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    private void initComponents() {

        username = new javax.swing.JTextField();
        password = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("LOGIN");

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

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

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(107, 107, 107)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                .addComponent(username, javax.swing.GroupLayout.DEFAULT_SIZE, 183, Short.MAX_VALUE)
                .addComponent(password))
                .addContainerGap(110, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(117, 117, 117)
                .addComponent(username, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(28, 28, 28)
                .addComponent(password, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(111, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void usernameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_usernameActionPerformed
        uid=username.getText(); 
    }//GEN-LAST:event_usernameActionPerformed

    private void passwordActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_passwordActionPerformed
        pass=password.getText();
    }//GEN-LAST:event_passwordActionPerformed

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new test().setVisible(true);
            }
        });
        System.out.println(uid+" "+pass);
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextField password;
    private javax.swing.JTextField username;
    // End of variables declaration//GEN-END:variables
    static String uid,pass;
}
4

3 に答える 3

4

この用途にはモーダルJDialogまたは aJOptionPaneを使用します。

詳細については、ダイアログでモダリティを使用する方法を参照してください。それらを使用してアプリの進行をブロックする方法について。閉まるまで。

その他のヒント

1)

username = new javax.swing.JTextField();

次のようにする必要があります。

// suggest a size in letters..
username = new javax.swing.JTextField(12);

2)

password = new javax.swing.JTextField();

次のようにする必要があります。

// use a field specialized for this purpose
password = new javax.swing.JPasswordField();

3)

フレームまたは他の最上位のコンテナーを拡張しないでください。代わりに、1 つのインスタンスを作成して使用します。

于 2013-07-06T06:55:09.047 に答える
1

ActionListenerfrom aは、 フィールドにフォーカスがあるときにJTextFieldを押した場合にのみ実行されます。Enter

もちろん、getText()いつでも呼び出して、現時点でテキストフィールドに含まれているものを取得できます。

たとえば、Tab入力フィールドを切り替えるために使用すると、リスナーが起動しません。

ユーザーがEnterキーを押さずにウィンドウを閉じたときにパスワードを確実に取得したい場合は、 a を追加してWindowListener、ウィンドウが閉じたときに値を読み取ることができます。または、FocusListenerをテキストフィールドに追加して、ユーザーがそこを離れた場合にも通知されるようにすることもできます。

于 2013-07-06T06:38:38.093 に答える
0

フレームにを追加しwindowListenerて をオーバーライドする必要がありますwindowClosing

これは、動作する init の修正版です。

private void initComponents() {
    this.addWindowListener(new java.awt.event.WindowAdapter() {
        public void windowClosing(java.awt.event.WindowEvent windowEvent) {
                    uid=username.getText();
                    pass=password.getText();


                System.out.println(uid+" "+pass);

        }
    });

    username = new javax.swing.JTextField();
    password = new javax.swing.JTextField();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("LOGIN");

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

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

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(107, 107, 107)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                .addComponent(username, javax.swing.GroupLayout.DEFAULT_SIZE, 183, Short.MAX_VALUE)
                .addComponent(password))
            .addContainerGap(110, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(117, 117, 117)
            .addComponent(username, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(28, 28, 28)
            .addComponent(password, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(111, Short.MAX_VALUE))
    );

    pack();
}
于 2013-07-06T06:55:42.800 に答える