在我最近的一个项目中,我想实现一个隐藏的页面。我希望只需输入密码即可在屏幕上显示任何内容。我试图将PasswordField
设为visible(false)
。但是那没用。此外,我希望弹出隐藏的页面,而无需在输入密码后按Enter键。有一种方法可以让简单的javafx应用程序像这样表现吗?
答案 0 :(得分:2)
您可以使用KeyListener。虽然您需要按一次屏幕按键才能注册。并确保将keylistener添加到JFrame中,我总是忘记这一点。这将寻找键,但需要显示一个窗口,但这可能是空的。
如果您不想在>>所有的窗口,则可以使用外部库jnativehook全局查找按键。
答案 1 :(得分:1)
我相信你可以将JPasswordField的前景设置为与背景颜色相同,但不要引用我的话。类似的东西:
my_string = "abba"
for idx in range(len(my_string) - 1, 0, -1):
char = my_string[idx]
if char in my_string[:idx]:
print("Last duplicated character is: " + char)
break
答案 2 :(得分:1)
您可以向场景添加事件过滤器,以跟踪已键入的内容。
这是一个简单的例子(类型"秘密"主窗口聚焦显示弹出窗口;如果输入错误以清除隐藏文本,请按Enter键):
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);
}
}