2016-11-06 5 views
0

내 최근 프로젝트 중 하나에서 숨겨진 페이지를 구현하고 싶습니다. 화면에 아무 것도 표시하지 않고 암호를 입력하기 만하면 접근 할 수 있기를 원합니다. 나는 PasswordFieldvisible(false)으로 설정하려했습니다. 그러나 그것은 작동하지 않았다. 또한 암호를 입력 한 후 Enter 키를 누르지 않아도 숨겨진 페이지가 팝업되도록하고 싶습니다. 간단한 javafx 애플리케이션이 그렇게 동작 할 수있는 방법이 있습니까?보이지 않는 암호

+0

'JPasswordField'는 스윙 구성 요소입니다 JavaFX 구성 요소가 아닙니다. 어떤 툴킷을 사용하고 있습니까? –

+0

@ James_D 네가 맞아! 내가 잘못 입력 했어. 나는 보통의 PasswordField를 의미했다. – jobr97

+0

이것이 JavaFX인가? 너 왜 스윙 태그가 있니? 이것이 스윙 질문이 아니라면 제거 할 수 있습니까? –

답변

1

입력 된 내용을 추적하는 이벤트 필터를 장면에 추가 할 수 있습니다. 여기

는 (팝업 창을 보여주기 위해 초점을 맞춘 메인 창 유형 "비밀"당신은 숨겨진 텍스트를 취소 잘못 입력하는 경우를 눌러 입력) 간단한 예입니다 :

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.control.Tooltip; 
import javafx.scene.input.KeyEvent; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class OpenSecretWindow extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Label label = new Label("Type the secret password\nto open the secret window"); 
     label.setTooltip(new Tooltip("The secret password is \"secret\"")); 
     StackPane root = new StackPane(label); 
     Scene scene = new Scene(root, 400, 400); 

     StringBuilder typedText = new StringBuilder(); 
     scene.addEventFilter(KeyEvent.KEY_TYPED, e -> { 
      switch(e.getCharacter()) { 
      case "\n": 
      case "\r": 
       typedText.delete(0, typedText.length()); 
       break ; 
      default: 
       typedText.append(e.getCharacter()); 
      } 
      if ("secret".equals(typedText.toString())) { 
       openSecretWindow(primaryStage); 
       typedText.delete(0, typedText.length()); 
      } 
     }); 

     // handle backspace and delete: 
     scene.addEventFilter(KeyEvent.KEY_RELEASED, e -> { 
      if (e.getCode() == KeyCode.BACK_SPACE || e.getCode() == KeyCode.DELETE) { 
       if (typedText.length() > 0) { 
        typedText.delete(typedText.length()-1, typedText.length()); 
       } 
      } 
     }); 

     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    private void openSecretWindow(Stage owner) { 
     Stage stage = new Stage(); 
     StackPane root = new StackPane(new Label("You have found\nthe secret window!")); 
     Scene scene = new Scene(root, 300, 180); 
     stage.setScene(scene); 
     stage.initOwner(owner); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
2

KeyListener을 사용할 수 있습니다. 키를 눌러 등록하려면 화면을 한 번 눌러야합니다. 그리고 JFrame에 keylistener를 추가하십시오, 나는 항상 그것을 잊습니다. 이렇게하면 키를 찾을 수 있지만 창을 표시해야합니다. 그러나이 키는 비어있을 수 있습니다.

에 모두 표시하지 않으려면 외부 라이브러리 jnativehook을 사용하여 전체적으로 키 누르기를 찾습니다.

+0

나는 그것을 시도 할 것이다 .. – jobr97

1

JPasswordField의 전경을 배경색과 동일하게 설정할 수 있다고 생각하지만 저를 인용하지 마십시오. 예 :

JPasswordField.SetForeground(Color.RED); 
+0

당신은 커서를 볼 수 있기 때문에, 나는 keylistener로 그 방법을 시도 할 것이다. – jobr97