【问题标题】:Permanent text in a textfield in JavaJava中文本字段中的永久文本
【发布时间】:2014-03-08 01:23:15
【问题描述】:

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

[UserInput                (miles)]

**上面是我所说的一个例子。当 UserInput 发生变化时,“Miles”需要始终位于 TextField 中。

编辑:“实施”是一个错误的选择。让我换个说法,我可以自己设置字段,但我很难找到在文本字段中设置永久文本的方法。只是想知道是否有人知道一个简单的方法。

【问题讨论】:

  • "谁能给我一个好的实现?"这句话几乎完美地体现了提出 SO 问题的错误方式。我们不会为您编写代码。发布您尝试过的方法以及问题所在,我们将很乐意提供帮助。
  • 我的问题不是我尝试过的。我知道如何创建一个 TextField。我知道如何设置它以获取用户输入。我知道如何将文本设置为文本字段。我不知道如何设置永久文本的具体方法。我不需要所有内容都充实,只需要询问永久文本。
  • 为什么不简单地在TextField 旁边放一个带有永久文本的Label
  • @AlexisLeclerc 我通常会这样做,但我特别需要将值放在字段中。
  • stackoverflow.com/questions/7421337/… 看看这里,我想这和你需要的差不多。但是,如前所述,我认为您应该保持简单,只需在字段后添加标签即可。

标签: java javafx


【解决方案1】:

您可以在标签上放置一个透明文本字段,然后将两者绑定在一起。类似这样,但样式更好。

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 而不是堆栈窗格,但这是满足“英里”在 texfield 边界“内部”这一要求的一种方法。

【讨论】:

    【解决方案2】:

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

    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);
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      相关资源
      最近更新 更多