2017-02-13 6 views
0

私はデスクトップアプリケーションを開発中です。このアプリケーションでは、私はなど、ログイン操作のための仮想キーボード/ numberpadを使用する必要がJavaで仮想番号パッドを作成

私はこのようなJFrameの作成しました: enter image description here

をし、ボタンの作成コードが

numberButtons = new JButton[10]; 
    for(int i = 0; i < numberButtons.length; i++) { 
     numberButtons[i] = new JButton(String.valueOf(i)); 
    numberButtons[i].setFont(new java.awt.Font("Open Sans", 0, 14)); 
    numberButtons[i].setPreferredSize(new java.awt.Dimension(100, 50)); 

    numberButtons[i].addActionListener(new ActionListener() 
    { 
     public void actionPerformed(java.awt.event.ActionEvent evt) 
     { 
      numberButtonActionPerformed(evt); 
     } 
    }); 
     numberPanel.add(numberButtons[i]); 
    } 

とアクションですメソッドは:

private void numberButtonActionPerformed(ActionEvent evt) { 

    String currentPassword = ((JButton) evt.getSource()).getText(); 

    passwordField.requestFocus(); 
    passwordField.setText(passwordField.getText() + currentPassword); 
    if (Arrays.equals(pass, passwordField.getPassword())) { 
     System.out.println("Correct"); 
    } 
} 

ですが、jpasswordfieldのgettextメソッドが送出されます。使用することはお勧めしません。私は、すべてのボタンに対してactionperformedメソッドを記述し、各ボタンのアクションで "KeyEvent.VK_"を使用する別のアイディアを持っています。しかし、私はそれを行う適切な方法だとは思わない。あなたは何をお勧めします?

+0

各ボタンは配列またはリストにcharを追加する必要がありますが、これはパスワードの 'String'を生成しません。 'JPasswordField'の' Document'に直接コンテンツを挿入する必要があるかもしれません – MadProgrammer

+0

ボタンをクリックしたときにpasswordfieldにcharを追加したいので、文字列を使うのに必要な 'passwordfield.settext'メソッドを使う必要がありました。 あなたが言及したJPasswordFieldのドキュメントに直接挿入するもう1つの方法はありますか? – Emre

+0

いいえ、Document#insertStringを使用して、各文字(個々のStringとして)を文書 – MadProgrammer

答えて

0

すでにpasswordField.getPassword()を使用しています。これを行う正しい方法です。 https://docs.oracle.com/javase/7/docs/api/javax/swing/JPasswordField.html#getText()

を返さchar[]使用thisコンストラクタから文字列を構築するには、次のドキュメントはgetTextgetPasswordに置き換えられていることを言います。

+0

に挿入する必要があります。*「返されたchar []」*から文字列を作成する* - getTextを使用しない目的最初は – MadProgrammer

+0

@Selim のようにする必要があります。 'private void numberButtonActionPerformed(ActionEvent evt){ passwordField.requestFocus(); passwordField.setText(new String(passwordField.getPassword())+((JButton)evt.getSource())。getText()); if(Arrays.equals(pass、passwordField.getPassword())){ System.out.println( "Correct"); } } ' – Emre

+0

@はい。しかし、これは@MadProgrammerが指摘しているように、 'char []'があなたに与えようとしている "セキュリティ"の目的を打ち破ります。この場合、 'Arrays.equals'を' pass.equals(new String(passwordField.getPassword())) 'に置き換えることもできます。 – Selim

0

JButton、リスナーの作成、その他の便利な機能をカプセル化するボタンクラスを作成します。次に、そのクラスをボタン作成コードの代わりに使用します。

0

が、gettextの方法はJPasswordFieldのだテキスト全体をリセットするためのsetText(...)を使用しないでください

を派遣しています。

代わりに、入力された文字をテキストコンポーネントの末尾に追加するだけです。これを行う1つの方法は、テキストコンポーネントのreplaceSelection(...)メソッドを使用することです。

例:Attaching A Single Action Listener To All Buttonsを参照してください。この例では、文字を入力するか、ボタンをクリックすることができます。

関連する問題