2017-02-13 1 views
0

데스크톱 응용 프로그램을 개발 중입니다. 이 응용 프로그램에서 내가 로그인 작업 등을 위해 가상 키보드/numberpad를 사용할 필요가자바에서 가상 번호 패드 만들기

나는이 같은 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의 문서에 직접 삽입하는 다른 방법은 무엇입니까? – Emre

+0

아니요, Document # insertString을 사용하여 각 문자 (개별 String)를 – MadProgrammer

답변

0

이미 passwordField.getPassword()을 (를) 사용했습니다. 이것이 올바른 방법입니다. 워드 프로세서 getTextgetPassword로 대체되었습니다 말 : https://docs.oracle.com/javase/7/docs/api/javax/swing/JPasswordField.html#getText()

반환 된 char[] 사용 this 생성자에서 문자열을 구성하십시오.

+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

만의 JPasswordField의 gettext의 방법은 전체 텍스트를 재설정의 setText (...)를 사용하지 마십시오

을 전달됩니다.

대신 텍스트 구성 요소의 끝에 입력 한 문자를 추가하십시오. 이 작업을 수행하는 한 가지 방법은 텍스트 구성 요소의 replaceSelection(...) 메서드를 사용하는 것입니다.

실용 예제는 Attaching A Single Action Listener To All Buttons입니다. 이 예에서는 문자를 입력하거나 버튼을 클릭 할 수 있습니다.