如何在JavaFX中向组合框添加掩码?

如何在JavaFX中向组合框添加掩码?,java,javafx,javafx-8,Java,Javafx,Javafx 8,有没有办法在组合框中添加掩码?我想在我的组合框中添加电话格式,但我不知道怎么做 下面是文本字段中的掩码示例 我基本上想要这个,但是在组合框中。您必须使用组合框的CellFactory import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scen

有没有办法在组合框中添加掩码?我想在我的组合框中添加电话格式,但我不知道怎么做

下面是文本字段中的掩码示例


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

您必须使用组合框的
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();
        }       
    }
}
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.control.ComboBox;
导入javafx.scene.control.Label;
导入javafx.scene.control.ListCell;
导入javafx.scene.control.ListView;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.GridPane;
导入javafx.scene.layout.StackPane;
导入javafx.stage.stage;
/**
*JavaFX应用程序
*/
公共类应用程序扩展应用程序{
@凌驾
公众假期开始(阶段){
ComboBox ComboBox=新建ComboBox();
comboBox.setCellFactory((ListView l)->new ListCell(){
TextField tf1=新的TextField();
TextField tf2=新的TextField();
TextField tf3=新的TextField();
GridPane root=新的GridPane();
{
添加(新标签(“电话号码”)、0、0;
添加(新标签(“扩展名”)、0、1;
添加(新标签(“SSN:”),0,2);
root.add(tf1,1,0);
添加(tf2,1,1);
添加(tf3,1,2);
}
@凌驾
受保护的void updateItem(PhoneInfo项,布尔值为空){
super.updateItem(项,空);
如果(项==null | |空){
设置图形(空);
setText(空);
}否则{
tf1.setText(item.getNumber());
tf2.setText(item.getExtension());
setText(item.getSsn());
设定图形(根);
}
}
});
PhoneInfo PhoneInfo=新的PhoneInfo(“555-555-555”、“3333”、“444-44-4444”);
comboBox.getItems().add(phoneInfo);
stage.setScene(新场景(新堆栈窗格(组合框));
stage.show();
}
公共静态void main(字符串[]args){
发射();
}
私有静态类PhoneInfo{
私有字符串编号;
私有字符串扩展;
私有字符串ssn;
公共电话信息(字符串编号、字符串扩展名、字符串ssn){
这个数字=数字;
这个扩展=扩展;
这个.ssn=ssn;
}
公共字符串getSsn(){
返回ssn;
}
公共无效设置序列号(字符串序列号){
这个.ssn=ssn;
}
公共字符串getNumber(){
返回号码;
}
公共无效集合号(字符串号){
这个数字=数字;
}
公共字符串getExtension(){
返回扩展;
}
公共void集合扩展名(字符串扩展名){
这个扩展=扩展;
}
@凌驾
公共字符串toString(){
StringBuilder sb=新的StringBuilder();
sb.append(“PhoneInfo{number=”)。append(number);
sb.append(“,extension=”).append(extension);
sb.append(“,ssn=”).append(ssn);
某人附加('}');
使某人返回字符串();
}       
}
}

可编辑的
组合框
?哪部分?它实际上是您想要的某种自定义弹出窗口(类似于
日期选择器
颜色选择器
)?是否要显示弹出窗口中每个项目的所有这些信息?请在回答问题时提供此信息。