0

http://download.oracle.com/javase/tutorial/uiswing/components/passwordfield.htmlのデモに従って、非常に単純なログオン JPanel を作成しました。

それには3つのコンポーネントがあり、

  1. ユーザー名を取得する JTextField
  2. パスワードを取得する JPasswordField
  3. ログオンするための JButton

次に、アプリケーションの起動時に JPanel が JFrame に表示されます。問題は、最初にパスワードフィールドをクリックすると、問題なくパスワードを入力できることがわかりました。ただし、最初にユーザー名を入力すると、パスワード フィールドに何も入力できません。ここで何がうまくいかないのか誰にもわかりますか?

ログオン パネル用に作成したコードを次に示します。このコードはコンパイルして実行できますが、パスワードを入力することはできません。私が逃したものはありますか?

import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;

public class Logon extends javax.swing.JPanel implements ActionListener {

    private JTextField fldName;
    private JPasswordField fldPasswd;
    private JButton btnLogon;

    public Logon() {

        JLabel labTitle = new JLabel("title");
        labTitle.setText("EMT Monitor v.1.0");

        // username
        fldName = new JTextField(10);
        JLabel labName = new JLabel("Username");
        labName.setText("Username:");
        labName.setLabelFor(fldPasswd);

        // passwd
        fldPasswd = new JPasswordField(10);
        fldPasswd.setActionCommand("Logon");
        fldPasswd.addActionListener(this);
        fldPasswd.requestFocusInWindow();

        JLabel labPasswd = new JLabel("Password");
        labPasswd.setText("Password:");
        labPasswd.setLabelFor(fldPasswd);

        // botten
        btnLogon = new JButton("Logon");
        btnLogon.setActionCommand("Logon");
        btnLogon.addActionListener(this);


        JPanel mainPanel = new JPanel();


        btnLogon.setPreferredSize(new Dimension(200, 30));

        mainPanel.setPreferredSize(new Dimension(340, 190));

        mainPanel.add(labName);
        mainPanel.add(fldName);
        mainPanel.add(labPasswd);
        mainPanel.add(fldPasswd);
        mainPanel.add(btnLogon);

        JPanel outPanel = new JPanel();
        outPanel.setPreferredSize(new Dimension(400, 300));
        outPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));

        outPanel.add(mainPanel);
        add(outPanel);

        setAlignmentX(Component.CENTER_ALIGNMENT);
        setAlignmentY(Component.CENTER_ALIGNMENT);
        setVisible(true);
    }



public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand();

        if (cmd.equals("Logon")) { //Process the password.

            String user = fldName.getText();
            String passwd = new String(fldPasswd.getPassword());

            System.out.println(user + " " + passwd);


        }


    }

    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("Logon");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        final Logon newContentPane = new Logon();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event dispatch thread:
        //creating and showing this application's GUI.
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                //Turn off metal's use of bold fonts
        UIManager.put("swing.boldMetal", Boolean.FALSE);
        createAndShowGUI();
            }
        });
    }
}
4

1 に答える 1

0

質問にある通り問題ありません。これはうまくいきます。ユーザー名とパスワードを入力してログオンをクリックすると、指定されたユーザー名とパスワードが出力されます。

于 2011-12-08T17:05:36.467 に答える