java - 如何向 JavaFX 中的 ComboBox 添加掩码?

标签 java javafx javafx-8

有没有办法在组合框中添加蒙版?我想在组合框中添加电话格式,但我不知道该怎么做。

这是文本字段中的掩码示例 enter image description here

我基本上想要这个,但是在一个组合框中。

最佳答案

您必须使用ComboBox的 CellFactory

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

/**
 * JavaFX App
 */
public class App extends Application {

    @Override
    public void start(Stage stage) {
        ComboBox<PhoneInfo> comboBox = new ComboBox();
        comboBox .setCellFactory((ListView<PhoneInfo> l) -> new ListCell<PhoneInfo>() {
            TextField tf1 = new TextField();
            TextField tf2 = new TextField();
            TextField tf3 = new TextField();
            GridPane root = new GridPane();
            {
                root.add(new Label("Phone Number: "), 0, 0);
                root.add(new Label("Extension: "), 0, 1);
                root.add(new Label("SSN: "), 0, 2);
                root.add(tf1, 1, 0);
                root.add(tf2, 1, 1);
                root.add(tf3, 1, 2);
            }

            @Override
            protected void updateItem(PhoneInfo item, boolean empty) {
                super.updateItem(item, empty);
                if (item == null || empty) {
                    setGraphic(null);
                    setText(null);
                } else {
                    tf1.setText(item.getNumber());
                    tf2.setText(item.getExtension());
                    tf3.setText(item.getSsn());

                    setGraphic(root);
                }
            }
        });

        PhoneInfo phoneInfo = new PhoneInfo("555-555-555", "3333", "444-44-4444");
        comboBox.getItems().add(phoneInfo);

        stage.setScene(new Scene(new StackPane(comboBox)));
        stage.show();
    }

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

    private static class PhoneInfo {

        private String number;
        private String extension;
        private String ssn;

        public PhoneInfo(String number, String extension, String ssn) {
            this.number = number;
            this.extension = extension;
            this.ssn = ssn;
        }

        public String getSsn() {
            return ssn;
        }

        public void setSsn(String ssn) {
            this.ssn = ssn;
        }

        public String getNumber() {
            return number;
        }

        public void setNumber(String number) {
            this.number = number;
        }

        public String getExtension() {
            return extension;
        }

        public void setExtension(String extension) {
            this.extension = extension;
        }

        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append("PhoneInfo{number=").append(number);
            sb.append(", extension=").append(extension);
            sb.append(", ssn=").append(ssn);
            sb.append('}');
            return sb.toString();
        }       
    }
}

enter image description here

关于java - 如何向 JavaFX 中的 ComboBox 添加掩码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58917180/

相关文章:

java - 静态方法和实例方法的区别

java - 在javaFX中绘制简单的90度三角形

macos - 无法执行没有JRE捆绑的JavaFX应用程序

java - Android ListView 适配器 - 隐藏项目

java - 为什么我的 Android SDK 源码不完整?

java - 如何使用 Jersey ContainerRequestFilter 和 ContainerResponseFilter 匹配 http 请求和响应

javafx - 如何访问 Controller 附加到的相应节点

JavaFX WebView 不在 Dialog<T> 上呈现可视内容

java - 我怎样才能改变我的数组列表?

multithreading - JavaFX 的 Swing 计时器替代方案和线程管理差异