在JavaFX中没有TableView.GetSelectionModel().SetCellSelectionEnabled(true);
的情况下,有没有方法在TableView中为TableCell设置样式?
我尝试了此解决方案https://community.oracle.com/thread/3528543?start=0&tstart=0,但它随机无法突出显示行
tableView.getSelectionModel().setCellSelectionEnabled(true);
final ObservableSet<Integer> selectedRowIndexes = FXCollections.observableSet();
final PseudoClass selectedRowPseudoClass = PseudoClass.getPseudoClass("selected-row");
tableView.getSelectionModel().getSelectedCells().addListener((Change<? extends TablePosition> change) -> {
selectedRowIndexes.clear();
tableView.getSelectionModel().getSelectedCells().stream().map(TablePosition::getRow).forEach(row -> {
selectedRowIndexes.add(row);
});
});
tableView.setRowFactory(tableView -> {
final TableRow<List<StringProperty>> row = new TableRow<>();
BooleanBinding selectedRow = Bindings.createBooleanBinding(() ->
selectedRowIndexes.contains(row.getIndex()), row.indexProperty(), selectedRowIndexes);
selectedRow.addListener((observable, oldValue, newValue) -> {
row.pseudoClassStateChanged(selectedRowPseudoClass, newValue);
}
);
return row;
});
好吧。因此,只要您的单元格实际获得焦点,向您想要不同样式的列的单元格工厂提供自定义的TableCell
将允许您监听TableCell
的任何属性,因为您正在自己定义那个TableCell
。下面是一个示例,说明如何侦听TableCell
的focusedProperty并在发生这种情况时更改样式。
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class MCVE3 extends Application {
@Override
public void start(Stage stage) {
TableView<ObservableList<String>> table = new TableView<ObservableList<String>>();
// I have no idea how to get focus on a cell unless you enable cell selection. It does not seem to be possible at all.
table.getSelectionModel().setCellSelectionEnabled(true);
// Initializes a column and adds it to the table.
TableColumn<ObservableList<String>, String> col = new TableColumn<ObservableList<String>, String>("Column");
col.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().get(0)));
// Initializes a column and adds it to the table.
TableColumn<ObservableList<String>, String> col2 = new TableColumn<ObservableList<String>, String>("Column 2");
col2.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().get(1)));
// We add a custom cell factory to second column. This enables us to customize the behaviour of the cell.
col2.setCellFactory(e -> new FocusStyleCell());
table.getColumns().addAll(col, col2);
// Add data to the table.
table.getItems().add(FXCollections.observableArrayList("One", "OneTwo"));
table.getItems().add(FXCollections.observableArrayList("Two", "TwoTwo"));
table.getItems().add(FXCollections.observableArrayList("Three", "ThreeTwo"));
table.getItems().add(FXCollections.observableArrayList("Four", "FourTwo"));
BorderPane view = new BorderPane();
view.setCenter(table);
stage.setScene(new Scene(view));
stage.show();
}
/**
* A custom TableCell that will change style on focus.
*/
class FocusStyleCell extends TableCell<ObservableList<String>, String> {
// You always need to override updateItem. It's very important that you don't forget to call super.updateItem when you do this.
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
} else {
setText(item);
}
}
public FocusStyleCell() {
// We add a listener to the focusedProperty. newValue will be true when the cell gets focused.
focusedProperty().addListener((obs, oldValue, newValue) -> {
if (newValue) {
setStyle("-fx-background-color: black;");
// // Or add some custom style class:
// if (getStyleClass().contains("focused-cell")) {
// getStyleClass().add("focused-cell");
// }
} else {
// If you instead wish to use style classes you need to
// remove that style class once focus is lost.
// getStyleClass().remove("focused-cell");
setStyle("-fx-background-color: -fx-background");
}
});
}
}
public static void main(String[] args) {
launch();
}
}
问题:我想更改输入元素焦点上按钮的样式。 下面是模板代码: 以下是css代码: 预期输出:在输入框 1的焦点上。将1倍宽度的边框应用于输入框 2。更改按钮的背景颜色 实际输出: 1。边框应用于输入框 2。按钮的背景色没有变化 http://jsfiddle.net/6Y8GL/7/
我有一个音乐播放器活动来控制歌曲的播放。我已经阅读了有关管理音频焦点的文档,并在
我第一次学习材料界面。我想自定义材质UI的文本字段。当文本字段未被选中时,我可以更改其样式;当文本字段聚焦时,我无法更改其样式。我正在使用将样式注入组件。我试过这个密码 问题: 如何更改焦点文本字段的样式?我们将不胜感激
当将html输入与样式化组件一起使用并将值保存为react state with onChange时,组件似乎会在每次状态更改时重新呈现,并导致输入失去焦点。有没有办法防止输入失去焦点?为什么会发生这种情况?这里有一个例子。
问题内容: 聚焦输入字段时如何更改占位符的颜色?我使用此CSS设置默认颜色,但是如何更改焦点? 问题答案: 试试这个,这应该工作:
问题内容: 可以更改按钮功能吗? 例如 点击,再点击一次 我已经尝试过类似,但没有结果。 我设法使叠加工作并在其中插入所需的数据。但是没有找到任何可以帮助我的帖子。我正在使用react-bootstrap。这是我的代码。 问题答案: 您可以尝试使用状态来存储颜色。也许这会让您想到解决问题的方法: 这是一个小提琴。