行内のテキストがユーザーが指定したテキストと一致する場合、リストボックス内の行を強調表示する機能が必要です。ユーザーは、「警告」という単語を含むすべての行を強調表示すると言います...ここで Alex がスタイル シートの使い方を教えてくれました。
上記のソリューションを実装しました。しかし今、ユーザーが複数の文字列値(最初に指定されたものが最も優先度が高い)の前景色と背景色を選択できるように、それを強化したいと思います。私はCSSをいじって、もう1つのスタイルを追加しましたテキストが見つかったかどうかに基づいて、CSS スタイル シートを削除して追加し、以下のような効果を与えます。
ハイライター.css
/** Highlighting for list-view search result cells */
.list-cell.search-highlight {
-fx-background-color: tomato;
-fx-accent: firebrick;
}
.list-cell:filled:hover.search-highlight {
-fx-background-color: derive(tomato, -20%);
}
.list-cell.search-highlight2 {
-fx-background-color: yellow;
-fx-accent: firebrick;
}
.list-cell:filled:hover.search-highlight2 {
-fx-background-color: derive(yellow, -20%);
}
css SearchHighlightedTextCell.java を削除/追加する Java コード
public class SearchHighlightedTextCell extends ListCell<String> {
private static final String HIGHLIGHT_CLASS = "search-highlight";
private static final String HIGHLIGHT_CLASS2 = "search-highlight2";
private StringProperty searchText = new SimpleStringProperty("");
private StringProperty searchText2 = new SimpleStringProperty("");
SearchHighlightedTextCell(StringProperty searchText, StringProperty searchText2) {
this.searchText = searchText;
this.searchText2 = searchText2;
}
@Override
protected void updateItem(String text, boolean empty) {
super.updateItem(text, empty);
setText(text == null ? "" : text);
updateStyleClass();
searchText.addListener(new InvalidationListener() {
@Override
public void invalidated(Observable observable) {
updateStyleClass();
}
});
searchText2.addListener(new InvalidationListener() {
@Override
public void invalidated(Observable observable) {
updateStyleClass();
}
});
}
private void updateStyleClass() {
try {
if (!isEmptyString(searchText.get()) && !isEmptyString(getText()) && getText().toUpperCase().contains(searchText.get().toUpperCase())) {
getStyleClass().remove(HIGHLIGHT_CLASS2);
getStyleClass().add(HIGHLIGHT_CLASS);
} else if (!isEmptyString(searchText2.get()) && !isEmptyString(getText()) && getText().toUpperCase().contains(searchText2.get().toUpperCase())) {
getStyleClass().remove(HIGHLIGHT_CLASS);
getStyleClass().add(HIGHLIGHT_CLASS2);
} else {
getStyleClass().remove(HIGHLIGHT_CLASS2);
getStyleClass().remove(HIGHLIGHT_CLASS);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private boolean isEmptyString(String text) {
return text == null || text.equals("");
}
これは、このようなものを生成します
しかし、問題は、スタイル シートで前景色と背景色のすべての組み合わせを定義することはおそらくできないということです。ユーザーの好みに基づいて、スタイル シートをプログラムで手動で追加する方法はありますか。または、それを行う別の方法があります。これは、ユーザーが何を強調表示する必要があるかを示すために設計した画面です