代码之家  ›  专栏  ›  技术社区  ›  Mārtiņš Ciekurs

javafx:如何为javafx文本字段添加venthandler以验证时间

  •  -1
  • Mārtiņš Ciekurs  · 技术社区  · 8 年前

    我很难找到任何关于如何 addEventHandler 对于 textfield hh:mm 时间格式。我找到了这个表达式 ^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$ eventHandler . 我还试着用 simpleDateFormat 但没有成功。

    编辑:我正在尝试制作这样的东西(这是用JFrame制作的):

    JTextField iegadesVerTesksts = new JTextField();
    panel.add(iegadesVerTesksts);
    iegadesVerTesksts.addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent evt) {
                char c = evt.getKeyChar();
                if ((!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || c == KeyEvent.VK_DELETE))
                        &&evt.getKeyChar()!='.') {
                    evt.consume();
                }
                if(evt.getKeyChar()=='.'&&iegadesVerTesksts.getText().contains(".")){
                    evt.consume();
                }
            }
        });
    

    public class Piezimes {
    private LocalDate datums;
    private String laiks;
    private String piezime;
    
    public Piezimes(){
        this.datums = null;
        this.laiks = "";
        this.piezime = "";
    }
    
    public Piezimes (LocalDate datums, String laiks, String piezime ){
        this.datums = datums;
        this.laiks = laiks;
        this.piezime = piezime;
    }
    
    public LocalDate getDatums() {
    
        return datums;
    }
    
    public void setDatums(LocalDate datums) {
    
        this.datums = datums;
    }
    
    public String getLaiks() {
    
        return laiks;
    }
    
    public void setLaiks(String laiks) {
        this.laiks = laiks;
    }
    
    public String getPiezime() {
    
        return piezime;
    }
    
    public void setPiezime(String piezime) {
    
        this.piezime = piezime;
    }
    

    }

    总的来说。java我创建了tableView,在最后添加了我调用的按钮 .getText 我现在调用的向表中添加用户输入的方法是: piezimes.setLaiks(laiksIevade.getText());

    1 回复  |  直到 8 年前
        1
  •  -1
  •   JKostikiadis    8 年前

    class CustomField extends TextField {
    
            public CustomField() {
                super();
                textProperty().addListener(new ChangeListener<String>() {
                    @Override
                    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                        if (newValue.isEmpty())
                            return;
    
                        if (newValue.matches("\\d{1,2}|\\d{1,2}:|\\d{1,2}:[0-5]?[0-9]")) {
                            setText(newValue);
                        } else {
                            setText(oldValue);
                        }
                    }
                });
    
                setOnAction(e -> {
                    if (!getText().matches("\\d{2}:\\d{2}")) {
                        setText("");
                    }
                });
    
                focusedProperty().addListener(new ChangeListener<Boolean>() {
                    @Override
                    public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue,
                            Boolean newPropertyValue) {
                        if (!newPropertyValue) {
                            if (!getText().matches("\\d{2}:\\d{2}")) {
                                setText("");
                            }
                        }
                    }
                });
            }
        }
    

    当用户向文本字段写入内容时,您需要做的就是检查它是否匹配NN:XN(N=数字0-9&X=数字0-5)或只是其中的一部分。输入完成后,您将检查它是否与您的格式匹配,然后才允许输入,否则将textfield内容设置为“”。

    推荐文章