JavaFX 2:如何通过程序将焦点集中在表格行上?

13

我正在尝试以编程方式选择/聚焦TableView的行。

我可以选择一行,但它没有被渲染为聚焦(未高亮显示)。我已经尝试了下面的代码的许多组合,但似乎没有什么作用。

table.getSelectionModel().select(0);
table.focusModelProperty().get().focus(new TablePosition(table, 0, column));
table.requestFocus();

是否可以通过编程方式高亮显示一行?

我正在使用JavaFX 2.2.21

4个回答

19

尝试先放置您的表格焦点请求,然后将整个内容包装在runLater中。

Platform.runLater(new Runnable()
{
    @Override
    public void run()
    {
        table.requestFocus();
        table.getSelectionModel().select(0);
        table.getFocusModel().focus(0);
    }
});

可以工作 :-) 为什么顺序很重要? - brnzn
这只是我的假设,因为我对FX焦点模型整体并没有进行过多的研究。似乎表格行焦点更像是由表格管理的伪焦点。当您在行后请求表格焦点时,表格会表现得好像默认焦点可能在您想要的行上,也可能不在。有趣的是,如果我没有先请求表格焦点,我也曾经遇到过行焦点失效的情况。很抱歉我不能给您一个明确的答案。 - OttPrime

2

table.getFocusModel().focus(0); 不是必需的,但我也会添加 scrollTo

Java 8:

Platform.runLater(() ->
  {
      table.requestFocus();
      table.getSelectionModel().select(0);
      table.scrollTo(0);
  });

Java 7:

Platform.runLater(new Runnable()
{
    @Override
    public void run()
    {
        table.requestFocus();
        table.getSelectionModel().select(0);
        table.scrollTo(0);
    }
});

1

我有两个组件:一个是 ListView,另一个是 TableView。当 ListView 中的项目被点击时,我希望焦点和选择移动到 TableView 并在 TableView 中呈现所选组件。为了实现这一目标,我使用了以下方法:

void listViewClickHandler(MouseEvent e){
    A a = listView.getSelectionModel().getSelectedItem();
    if(a != null){
        // some stuff

        // move focus & selection to TableView
        table.getSelectionModel().clearSelection(); // We don't want repeated selections
        table.requestFocus();                       // Get the focus
        table.getSelectionModel().selectFirst();    // select first item in TableView model
        table.getFocusModel().focus(0);             // set the focus on the first element
        tableClickHandler(null);                    // render the selected item in the TableView
}

void tableClickHandler(MouseEvent e){
    B b = table.getSelectionModel().getSelectedItem();
    render(b);
}

0

table.getSelectionModel().select(0); 对我来说是有效的。也许问题出在你的 CSS 上了?


我没有任何自定义的CSS。也许在我选择一行之后发生了其他事情。 - brnzn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接