【问题标题】:change tableview cell color to click更改表格视图单元格颜色以单击
【发布时间】:2018-10-04 04:12:01
【问题描述】:

我有一个代表日历的 TableView。每个细胞是一天。我想向单元格添加一个事件。单击单元格时,必须将背景更改为红色...应该可以选择多个单元格

【问题讨论】:

  • 请展示您迄今为止尝试过的内容,以便我们了解如何提供帮助。
  • drive.google.com/open?id=1YhlIuQySsPeYn4O7aOmC2kU5kod7sSZm 这是我项目的链接……你必须执行 MainRank 类并选择一个非常高的等级(1 年就可以了)。然后您将看到带有日期的日历,如果您单击一个单元格,背景颜色将正确更改。但是,如果您通过滚动来降低和提高,则选择会失真。

标签: java tableview javafx-8 listener


【解决方案1】:

如果您只需要选择,则可以使用具有多选的选择模型和单元格选择模式。

table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
table.getSelectionModel().setCellSelectionEnabled(true);

CSS 样式表

.table-cell {
    -fx-selection-bar: red;
    -fx-selection-bar-non-focused: red;
}

如果您不想使用选择模型,则需要将数据存储在您的项目中并使用自定义TableCell

public class DayCell extends TableCell<Week, Boolean> {

    {
        setOnMouseClicked(evt -> {
            if (!isEmpty() && getItem() != null && evt.getButton() == MouseButton.PRIMARY) {
                WritableValue<Boolean> property = (WritableValue<Boolean>) getTableColumn().getCellObservableValue((Week) getTableRow().getItem());
                property.setValue(!getItem());
            }
        });
    }


    @Override
    protected void updateItem(Boolean item, boolean empty) {
        super.updateItem(item, empty);

        if (empty || item == null) {
            setStyle(null);
        } else {
            setStyle(item ? "-fx-background-color: red;" : null);
        }
    }
}
column.setCellFactory(c -> new DayCell());

这需要cellValueFactory返回的ObservableValues以将数据存储在表项类中的方式实现WritableValue&lt;Boolean&gt;。使用存储在此类中的BooleanProperty 就可以了。


我认为在这种情况下使用TableView 不是一个好主意。它不是为显示固定大小的不可调整大小的网格而设计的。

【讨论】:

  • 您好,我听从了您的建议。但是当 column.setCellFactory (c -> new DayCell ()); 时出现错误你认为你可以查看我的项目链接并翻译你的想法
  • @MichaelSalinasRios 您需要将Week 更改为TableView 的项目类型。我只是使用了这个名称,因为这是一个合理的假设,即您使用星期几作为列。
  • 是的,我愿意。在列语句中。使用我的 WeekDates 类,但是当您加载日历时,它会绘制整个列
猜你喜欢
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 2015-01-24
  • 2019-11-16
  • 1970-01-01
相关资源
最近更新 更多