Java 如果我以两种不同的方式实例化这两个组件,为什么这两个组件具有相同的行为?

Java 如果我以两种不同的方式实例化这两个组件,为什么这两个组件具有相同的行为?,java,javafx,fxml,controlsfx,Java,Javafx,Fxml,Controlsfx,声明如下: @FXML private CustomTextField txtFieldUsuario; @FXML private CustomPasswordField txtFieldPassword; 以下是初始化: @Override public void initialize(URL location, ResourceBundle resources) { new TextFieldUtil(txtFieldUsuario).clearable(); new

声明如下:

@FXML
private CustomTextField txtFieldUsuario;

@FXML
private CustomPasswordField txtFieldPassword;
以下是初始化:

@Override
public void initialize(URL location, ResourceBundle resources) {
    new TextFieldUtil(txtFieldUsuario).clearable();

    new PasswordFieldUtil(txtFieldPassword).clearable();

    adminLogin();

    imageView.setImage(new Image("/foto/logo_fix.png"));

    Icono.agregarImagenBoton(btnIniciarSesion, Icono.INICIAR_SESION);

    enterKeyPressed();
}
以下是TextFieldUtil类:

public class TextFieldUtil extends CustomTextField{
    private static final Logger LOGGER = LogManager.getLogger();

    private CustomTextField[] textFields;

    public TextFieldUtil(CustomTextField... textFields) {
        this.textFields = textFields;
    }

    public void propiedades() {

    }

    public void clearable() {
        for (CustomTextField customTextField : textFields) {
            customTextField.setRight(Icono.BORRAR_TEXTFIELDS);

            customTextField.getRight().autosize();

            customTextField.getRight().setCursor(Cursor.HAND);

            customTextField.textProperty().addListener((observable, oldValue, newValue) -> {
                if (customTextField.getText().isEmpty()) {

                    customTextField.getRight().setVisible(false);

                } else {

                    customTextField.getRight().setVisible(true);

                    customTextField.getRight().addEventFilter(MouseEvent.MOUSE_PRESSED, event -> {
                        if (event.isPrimaryButtonDown() && !customTextField.getText().isEmpty() && customTextField.getRight().isVisible()) {
                            customTextField.setText("");
                        }
                    });
                }
            });
        }
    }

    public void mascara(TextFieldMascara textFieldMascara) {
        switch (textFieldMascara) {
            case TELEFONO:
                break;
            case RNC:
                break;
            case PRECIO:
                break;
        }
    }
}
public class PasswordFieldUtil extends CustomPasswordField{
    private static final Logger LOGGER = LogManager.getLogger();

    private CustomPasswordField[] passwordFields;

    public PasswordFieldUtil(CustomPasswordField... passwordFields) {
        this.passwordFields = passwordFields;
    }

    public void propiedades() {

    }

    public void clearable() {
        for (CustomPasswordField customPasswordField : passwordFields) {
            customPasswordField.setRight(Icono.BORRAR_TEXTFIELDS);

            customPasswordField.getRight().autosize();

            customPasswordField.getRight().setCursor(Cursor.HAND);

            customPasswordField.textProperty().addListener((observable, oldValue, newValue) -> {
                if (customPasswordField.getText().isEmpty()) {

                    customPasswordField.getRight().setVisible(false);

                } else {

                    customPasswordField.getRight().setVisible(true);

                    customPasswordField.getRight().addEventFilter(MouseEvent.MOUSE_PRESSED, event -> {
                        if (event.isPrimaryButtonDown() && !customPasswordField.getText().isEmpty() && customPasswordField.getRight().isVisible()) {

                            customPasswordField.setText("");

                        }
                    });
                }
            });
        }
    }
}
下面是PasswordUtil类:

public class TextFieldUtil extends CustomTextField{
    private static final Logger LOGGER = LogManager.getLogger();

    private CustomTextField[] textFields;

    public TextFieldUtil(CustomTextField... textFields) {
        this.textFields = textFields;
    }

    public void propiedades() {

    }

    public void clearable() {
        for (CustomTextField customTextField : textFields) {
            customTextField.setRight(Icono.BORRAR_TEXTFIELDS);

            customTextField.getRight().autosize();

            customTextField.getRight().setCursor(Cursor.HAND);

            customTextField.textProperty().addListener((observable, oldValue, newValue) -> {
                if (customTextField.getText().isEmpty()) {

                    customTextField.getRight().setVisible(false);

                } else {

                    customTextField.getRight().setVisible(true);

                    customTextField.getRight().addEventFilter(MouseEvent.MOUSE_PRESSED, event -> {
                        if (event.isPrimaryButtonDown() && !customTextField.getText().isEmpty() && customTextField.getRight().isVisible()) {
                            customTextField.setText("");
                        }
                    });
                }
            });
        }
    }

    public void mascara(TextFieldMascara textFieldMascara) {
        switch (textFieldMascara) {
            case TELEFONO:
                break;
            case RNC:
                break;
            case PRECIO:
                break;
        }
    }
}
public class PasswordFieldUtil extends CustomPasswordField{
    private static final Logger LOGGER = LogManager.getLogger();

    private CustomPasswordField[] passwordFields;

    public PasswordFieldUtil(CustomPasswordField... passwordFields) {
        this.passwordFields = passwordFields;
    }

    public void propiedades() {

    }

    public void clearable() {
        for (CustomPasswordField customPasswordField : passwordFields) {
            customPasswordField.setRight(Icono.BORRAR_TEXTFIELDS);

            customPasswordField.getRight().autosize();

            customPasswordField.getRight().setCursor(Cursor.HAND);

            customPasswordField.textProperty().addListener((observable, oldValue, newValue) -> {
                if (customPasswordField.getText().isEmpty()) {

                    customPasswordField.getRight().setVisible(false);

                } else {

                    customPasswordField.getRight().setVisible(true);

                    customPasswordField.getRight().addEventFilter(MouseEvent.MOUSE_PRESSED, event -> {
                        if (event.isPrimaryButtonDown() && !customPasswordField.getText().isEmpty() && customPasswordField.getRight().isVisible()) {

                            customPasswordField.setText("");

                        }
                    });
                }
            });
        }
    }
}
这是带有结果的图像,仅包含图像的第二个组件。当我在第二个组件中单击它时,被擦除的组件是第一个(CustomTextField)


如果有人能告诉我为什么会发生这种情况,我将提前感谢。

您在这段代码中的场景图中设置了相同的
节点
实例。因此,
MouseEvent.MOUSE\u PRESSED
的事件过滤器设置为相同的图标

customTextField.setRight(Icono.BORRAR_TEXTFIELDS);

customPasswordField.setRight(Icono.BORRAR_TEXTFIELDS);
尝试更改代码,例如:

customTextField.setRight(new ImageView( yourImage ));

customPasswordField.setRight(new ImageView( yourImage ));

newtextfieldutil(txtfieldusario).clearable()-你在哪里分配这个?我在同一个变量上分配它,这就是为什么它无效。我有一个用于combobox,另一个用于spinner,它们都工作得很好,没有问题。问题在于这两个方面@你真是个天才!谢谢你,伙计。我很感激。我不知道它会这样。谢谢你,伙计。非常感谢。