- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法阻止用户调整TableView
中的任何或至少所有JavaFX TableColumn
的大小,同时仍然允许调整大小策略起作用?
存在 TableColumn::setResizing
,但在阻止用户调整 TableColumn
大小的同时,它还阻止调整大小策略调整 TableColumn
大小>。
最佳答案
一个快速的解决方案可能是添加事件过滤器,以便在表标题行上拖动鼠标。创建自定义 tableView 并在标题行上添加事件过滤器,如下所示:
class CustomTableView<S> extends TableView<S>{
private Node headerRow;
@Override
protected void layoutChildren() {
super.layoutChildren();
if(headerRow ==null){
headerRow = (Region) lookup("TableHeaderRow");
headerRow.addEventFilter(MouseEvent.MOUSE_DRAGGED, MouseEvent::consume);
}
}
}
显然,副作用是您现在无法重新对齐列。如果您非常具体地只调整大小,则查找负责调整大小的节点并在它们上而不是在整个标题行上添加过滤器。
下面是一个快速工作演示,其中禁用列调整大小和重新对齐,同时仍然允许调整大小策略。
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Region;
import javafx.stage.Stage;
public class TableResizeRestrictionDemo extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
ObservableList<Person> persons = FXCollections.observableArrayList();
persons.add(new Person("Harry","John","LS"));
persons.add(new Person("Mary","King","MS"));
persons.add(new Person("Don","Bon","CAT"));
persons.add(new Person("Pink","Wink","IND"));
CustomTableView<Person> tableView = new CustomTableView<>();
TableColumn<Person, String> fnCol = new TableColumn<>("First Name");
fnCol.setCellValueFactory(param -> param.getValue().firstNameProperty());
TableColumn<Person, String> lnCol = new TableColumn<>("Last Name");
lnCol.setCellValueFactory(param -> param.getValue().lastNameProperty());
TableColumn<Person, String> cityCol = new TableColumn<>("City");
cityCol.setCellValueFactory(param -> param.getValue().cityProperty());
tableView.getColumns().addAll(fnCol, lnCol, cityCol);
tableView.setItems(persons);
tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
Scene sc = new Scene(tableView);
primaryStage.setScene(sc);
primaryStage.show();
}
class Person{
private StringProperty firstName = new SimpleStringProperty();
private StringProperty lastName = new SimpleStringProperty();
private StringProperty city = new SimpleStringProperty();
public Person(String fn, String ln, String cty){
setFirstName(fn);
setLastName(ln);
setCity(cty);
}
public String getFirstName() {
return firstName.get();
}
public StringProperty firstNameProperty() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName.set(firstName);
}
public String getLastName() {
return lastName.get();
}
public StringProperty lastNameProperty() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName.set(lastName);
}
public String getCity() {
return city.get();
}
public StringProperty cityProperty() {
return city;
}
public void setCity(String city) {
this.city.set(city);
}
}
class CustomTableView<S> extends TableView<S>{
private Node headerRow;
@Override
protected void layoutChildren() {
super.layoutChildren();
if(headerRow ==null){
headerRow = (Region) lookup("TableHeaderRow");
headerRow.addEventFilter(MouseEvent.MOUSE_DRAGGED, MouseEvent::consume);
}
}
}
}
更新::检查NestedTableColumnHeader类的源代码后,负责调整大小的节点确实是矩形。不幸的是,没有为此矩形设置样式类。因此,假设 HeaderRow 中的所有矩形都是用于调整大小的目的,我们查找所有 Rectangle 节点并设置事件过滤器。
内部 PRESSED-DRAGGED-RELEASED 处理程序设置用于调整大小,ENTER-EXIT 处理程序设置用于更改光标。因此,与其为 5 种类型的事件设置过滤器,不如为一种 super 事件 MouseEvent.ANY 设置。这也将解决更改光标的问题。
class CustomTableView<S> extends TableView<S> {
private final EventHandler<MouseEvent> consumeEvent = MouseEvent::consume;
@Override
protected void layoutChildren() {
super.layoutChildren();
final Set<Node> dragRects = lookup("TableHeaderRow").lookupAll("Rectangle");
for (Node dragRect : dragRects) {
dragRect.removeEventFilter(MouseEvent.ANY, consumeEvent);
dragRect.addEventFilter(MouseEvent.ANY, consumeEvent);
}
}
}
不保留矩形引用(如演示中的 HeaderRow)的原因是,每次重新对齐列时都会生成一组新的矩形。所以你不能依赖任何 Rectangle 引用。为了避免重复的过滤器,我们创建一个处理程序引用,首先删除然后添加处理程序。
关于java - 防止仅由用户调整 TableColumn 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52415358/
在为 Web 应用程序用例图建模时,为用户可以拥有的每个角色创建一个角色是否更好?或拥有一个角色、用户和一个具有特权的矩阵? guest < 用户 < 版主 < 管理员 1: guest 、用户、版主
我无法使用 Elixir 连接到 Postgres: ** (Mix) The database for PhoenixChat.Repo couldn't be created: FATAL 28P
这个问题已经有答案了: Group by field name in Java (7 个回答) 已关闭 7 年前。 我必须编写一个需要 List 的方法并返回 Map> . User包含 Person
感谢您的帮助,首先我将显示代码: $dotaz = "Select * from customers JOIN contracts where customers.user_id ='".$_SESS
我只想向所有用户中的一个用户显示一个按钮。我尝试了 orderByKey() 但没有成功! 用户模型有 id 成员,我尝试使用 orderByChild("id") 但结果相同! 我什至尝试了以下技巧
我们在工作中从 MongoDB 切换到 Postgres,我正在建立一个 BDR 组。 在这一步,我正在考虑安全性并尽可能锁定。因此,我希望设置一个 replication 用户(角色)并让 BDR
export class UserListComponent implements OnInit{ users; constructor(private userService: UserS
我可以使用 Sonata User Bundle 将 FOS 包集成到 sonata Admin 包中。我的登录功能正常。现在我想添加 FOSUserBundle 中的更改密码等功能到 sonata
在 LinkedIn 中创建新应用程序时,我得到 4 个单独的代码: API key 秘钥 OAuth 用户 token OAuth 用户密码 我在 OAuth 流程中使用前两个。 的目的是什么?最后
所以..我几乎解决了所有问题。但现在我要处理另一个问题。我使用了这个连接字符串: SqlConnection con = new SqlConnection(@"Data Source=.\SQLEX
我有一组“用户”和一组“订单”。我想列出每个 user_id 的所有 order_id。 var users = { 0: { user_id: 111, us
我已经为我的Django应用创建了一个用户模型 class User(Model): """ The Authentication model. This contains the u
我被这个问题困住了,找不到解决方案。寻找一些方向。我正在用 laravel 开发一个新的项目,目前正致力于用户认证。我正在使用 Laravels 5.8 身份验证模块。 对密码恢复 View 做了一些
安装后我正在使用ansible配置几台计算机。 为此,我在机器上本地运行 ansible。安装中的“主要”用户通常具有不同的名称。我想将该用户用于诸如 become_user 之类的变量. “主要”用
我正在尝试制作一个运行 syncdb 的批处理文件来创建一个数据库文件,然后使用用户名“admin”和密码“admin”创建一个 super 用户。 到目前为止我的代码: python manage.
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
我已在 Azure 数据库服务器上设置异地复制。 服务器上运行的数据库之一具有我通过 SSMS 创建的登录名和用户: https://learn.microsoft.com/en-us/azure/s
我有一个 ionic 2 应用程序,正在使用 native FB Login 来检索名称/图片并将其保存到 NativeStorage。流程是我打开WelcomePage、登录并保存数据。从那里,na
这是我的用户身份验证方法: def user_login(request): if request.method == 'POST': username = request.P
我试图获取来自特定用户的所有推文,但是当我迭代在模板中抛出推文时,我得到“User”对象不可迭代 观看次数 tweets = User.objects.get(username__iexact='us
我是一名优秀的程序员,十分优秀!