我在JavaFX 8中有一个只读的TableView,我不希望'用户选择行。
他们仍然可以对列进行排序并滚动,而不是选择任何行
我怎样才能做到这一点?
答案 0 :(得分:11)
过了一会儿,我发现了如何解决它,所以在这里发布给未来的用户 解决方案基于这个答案: JavaFX8 - Remove highlighting of selected row
将以下行添加到css后,选定的行看起来与未选择的行完全相同,在同一个地方实现了我想要的效果:
.table-row-cell:filled:selected {
-fx-background: -fx-control-inner-background ;
-fx-background-color: -fx-table-cell-border-color, -fx-background ;
-fx-background-insets: 0, 0 0 1 0 ;
-fx-table-cell-border-color: derive(-fx-color, 5%);
}
.table-row-cell:odd:filled:selected {
-fx-background: -fx-control-inner-background-alt ;
}
答案 1 :(得分:11)
您可以将null
设置为table.setSelectionModel(null);
来禁用选择。
from bs4 import BeautifulSoup
import urllib.request
import win_unicode_console
win_unicode_console.enable()
link = ('https://pietroalbini.io/')
req = urllib.request.Request(link, headers={'User-Agent': 'Mozilla/5.0'})
url = urllib.request.urlopen(req).read()
soup = BeautifulSoup(url, "html.parser")
body = soup.find_all('div', {"class":"wrapper"})
print(body.text)
答案 2 :(得分:5)
我自己就是这个问题。我认为解决它的最佳方法是提供TableViewSelectionModel的空实现。
然后你可以简单地说tableView.setSelectionModel(new NullTableViewSelectionModel(tableView));
下面的示例null实现......
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TablePosition;
import javafx.scene.control.TableView;
public class NullTableViewSelectionModel extends TableView.TableViewSelectionModel {
public NullTableViewSelectionModel(TableView tableView) {
super(tableView);
}
@Override
public ObservableList<TablePosition> getSelectedCells() {
return FXCollections.emptyObservableList();
}
@Override
public void selectLeftCell() {
}
@Override
public void selectRightCell() {
}
@Override
public void selectAboveCell() {
}
@Override
public void selectBelowCell() {
}
@Override
public void clearSelection(int i, TableColumn tableColumn) {
}
@Override
public void clearAndSelect(int i, TableColumn tableColumn) {
}
@Override
public void select(int i, TableColumn tableColumn) {
}
@Override
public boolean isSelected(int i, TableColumn tableColumn) {
return false;
}
@Override
public ObservableList<Integer> getSelectedIndices() {
return FXCollections.emptyObservableList();
}
@Override
public ObservableList getSelectedItems() {
return FXCollections.emptyObservableList();
}
@Override
public void selectIndices(int i, int... ints) {
}
@Override
public void selectAll() {
}
@Override
public void clearAndSelect(int i) {
}
@Override
public void select(int i) {
}
@Override
public void select(Object o) {
}
@Override
public void clearSelection(int i) {
}
@Override
public void clearSelection() {
}
@Override
public boolean isSelected(int i) {
return false;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public void selectPrevious() {
}
@Override
public void selectNext() {
}
@Override
public void selectFirst() {
}
@Override
public void selectLast() {
}
}
答案 3 :(得分:4)
我找到here针对同一问题的另一种解决方案,但对于ListView。模式是:监听选择更改事件,然后清除选择。它也适用于TableView。 代码示例:
{{1}}