Java中文本字段中的永久文本

时间:2014-03-07 14:58:50

标签: java javafx

我的程序中有一个TextField,它将包含用户输入的数据,但是我还需要在我的TextField末尾永久显示的其他地方有一个变量值。当用户在TextField中输入任何数据时,它不会消失。谁能给我一个很好的实现?感谢。

[UserInput                (miles)]

**以上是我所说的一个例子。当用户输入发生变化时,“里程”必须始终位于TextField中。

编辑:“实施”是一个糟糕的选择。让我重新说一下,我可以自己设置这个字段,但是我找不到在文本字段中设置永久文本的方法。只是想知道是否有人知道一个简单的方法。

2 个答案:

答案 0 :(得分:0)

您可以在标签上放置透明文本字段并将2绑定在一起。这样的东西,但有更好的造型。

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Text extends Application {

    @Override
    public void start(Stage primaryStage) {
        TextField txtUser = new TextField();
        txtUser.setStyle("-fx-background-color: transparent;-fx-border-color:blue;");
        Label txtBG = new Label(" (miles)");
        Label labelUser = new Label();
        labelUser.textProperty().bind(txtUser.textProperty());
        Label labelAll = new Label();
        labelAll.textProperty().bind(Bindings.concat(
                labelUser.textProperty())
                .concat(txtBG.textProperty()));

        StackPane sp = new StackPane();
        sp.getChildren().addAll(txtBG, txtUser);
        sp.setPrefSize(100, 12);

        VBox root = new VBox();
        root.getChildren().addAll(sp,labelUser,labelAll);
        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("transparent text test");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

我会使用HBox而不是堆栈窗格,但它是满足" miles"的要求的一种方法。是在'里面' texfield的边界。

答案 1 :(得分:0)

这是做你想要的一个小例子!我使用focus property textfield来添加和删除里程数!

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TextBinding extends Application {

@Override
public void start(Stage primaryStage) {
    final TextField user = new TextField();
    TextField demo = new TextField();
    user.setStyle("-fx-background-color: transparent;-fx-border-color:blue;");
    user.focusedProperty().addListener(new ChangeListener<Boolean>()
            {
                @Override
                public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue)
                {
                    if (newPropertyValue)
                    {
                        user.setText(user.getText().replace(" miles", ""));
                    }
                    else
                    {
                        user.setText(user.getText().concat(" miles"));
                    }
                }
            });
    VBox root = new VBox();
    root.getChildren().addAll(user,demo);
    Scene scene = new Scene(root, 300, 250);

    primaryStage.setTitle("transparent text test");
    primaryStage.setScene(scene);
    primaryStage.show();
}

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