3

私は持っていJTextFieldます。同じJTextFieldことがユーザーの名前とパスワードの両方を取得するために使用されます。したがって、ユーザー名を取得している場合は、ユーザーが入力している内容を[テキスト]フィールドに表示します。ただし、彼がパスワードを挿入している場合、フィールドにはパスワードを表示しないでください(代わりに*文字を表示してください)。

JTextFieldに入力した文字を非表示にするにはどうすればよいですか?

擬似コード:

If (usernameBool!=true) {
 // Display normal text - user is able to see the password
} else {
// This is going to be a password field, so i need to not show the password to the user instead show it as ******* instead.

}

JPasswordField注:これには使用したくない

4

4 に答える 4

6

繰り返しますが、考えられる解決策の1つは、CardLayoutを使用してコンポーネントを交換することです。

import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.*;

public class SwapFields {
   private static final String TEXT_FIELD = "text field";
   private static final String PASS_FIELD = "pass field";

   public SwapFields() {
      // TODO Auto-generated constructor stub
   }

   private static void createAndShowGui() {
      final JTextField textField = new JTextField(10);
      final JPasswordField passwordField = new JPasswordField(10);

      final CardLayout cardLayout = new CardLayout();
      final JPanel cardPanel = new JPanel(cardLayout);
      cardPanel.add(textField, TEXT_FIELD);
      cardPanel.add(passwordField, PASS_FIELD);

      JToggleButton toggleBtn = new JToggleButton("Entering Password");
      toggleBtn.addItemListener(new ItemListener() {

         @Override
         public void itemStateChanged(ItemEvent iEvt) {
            if (iEvt.getStateChange() == ItemEvent.SELECTED) {
               cardLayout.show(cardPanel, PASS_FIELD);
               passwordField.requestFocusInWindow();
            } else {
               cardLayout.show(cardPanel, TEXT_FIELD);
               textField.requestFocusInWindow();
            }
         }
      });

      JButton showNamePasswordBtn = new JButton("Show Results");
      showNamePasswordBtn.addActionListener(new ActionListener() {

         @Override
         public void actionPerformed(ActionEvent arg0) {
            System.out.println("Name: " + textField.getText());

            // never do this!
            System.out.println("Pass: " + new String(passwordField.getPassword()));
         }
      });

      JPanel mainPanel = new JPanel();
      mainPanel.add(cardPanel);
      mainPanel.add(toggleBtn);
      mainPanel.add(showNamePasswordBtn);

      JFrame frame = new JFrame("SwapFields");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
于 2012-12-15T15:51:17.263 に答える
5

JPasswordFieldは、というメソッドがありsetEchoChar()ます。ドキュメントに記載されているように:

このJPasswordFieldのエコー文字を設定します。...値0を設定すると、標準のJTextFieldの動作と同様に、入力時にテキストを表示することを示します。

次に、aだけを使用して、パスワードに対してのみJPasswordFieldエコー文字(例)を有効にすることができます。'*'

于 2012-12-15T15:42:14.503 に答える
2

を使用することをお勧めしますJPasswordField。次に、usernameBooltrueの場合は、文字を表示するように設定しますが、それ以外の場合は、次のように文字を非表示にします。

if (usernameBool) {
     password.setEchoChar((char) 0);
} else {
     password.setEchoChar('*');
}
于 2012-12-15T15:42:10.733 に答える
-1

あなたはあなた自身の戦略であるあなた自身のJTextFieldを作成することができます。たとえば、最後の文字を保持することも(覚えている場合はiOSのように)、何も表示しないこともできます(Linuxスタイル)。

于 2012-12-15T15:41:34.067 に答える