Поиск и замена одного слова в javafx TableView - PullRequest
0 голосов
/ 04 июня 2018

Код ниже предназначен для поиска и замены слова в TableView, но он заменяет все слова за раз, и я не хочу этого, поэтому я хочу заменить только одно слово, а не это словобудет заменен везде, я не хочу заменять все функции для запуска, просто хочу запустить одно слово.

public void onClickRep(ActionEvent event) {
    searchText.set(srep.getText());
    String replace;
    replace=rrep.getText();
    tc_source.setCellFactory(column ->  new TableCell<File, String>() {
        private final ChangeListener<String> listener = (o, oldValue, replace) -> {
              updateContents(getItem(), replace);
        };

        @Override
        protected void updateItem(String item, boolean empty) {

            super.updateItem(item, empty);
            searchText.removeListener(listener);

            if (item == null || empty) {
                setGraphic(null);
                setText(null);
            } else {
                updateContents(item, searchText.get());
                searchText.addListener(listener);
            }

        }

        private void updateContents(String item, String search) {
            if (search == null || search.isEmpty() || !item.toLowerCase().contains(search.toLowerCase())) {
                setText(item);
                setTextFill(javafx.scene.paint.Color.BLACK);
                setContentDisplay(ContentDisplay.TEXT_ONLY);
            } else {
                double rowHeight = this.getTableRow().getHeight();
                setGraphic(buildTextFlow(item, search));
                setHeight(rowHeight);
                setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
            }
        }

        private TextFlow buildTextFlow(String text, String filter) {
            int filterLength = filter.length();
            if (filterLength == 0) {
                return new TextFlow(createNormalText(text));
            }                   Font font = Font.font("Italic", 12);

            java.awt.Color color= java.awt.Color.BLUE ;

            TextFlow t = new TextFlow();
            String lowerText = text.toLowerCase();
            filter = filter.toLowerCase();
            int index1 = 0;
            int matchIndex=0;
            while ((matchIndex = lowerText.indexOf(filter, index1)) != -1) {
                if (index1 != matchIndex) {
                    t.getChildren().add(createNormText(text.substring(index1, matchIndex)));
                }
                index1 = matchIndex + filterLength;
                t.getChildren().add(createReplace(text.substring(matchIndex, index1), replace));


            }
            if (index1 != text.length()) {
                t.getChildren().add(createNormText(text.substring(index1)));
            }
            return t;
        }
    });

}

public static Text createReplace(String text, String replace) {
    Text result = new Text(text);
    result.setText(replace);
    System.out.println(result);
    return result;
}

public static Text createNormText(String text) {
    Text result = new Text(text);

    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...