2013-02-19 32 views
1

我有兩個tableViews在我的應用程序,我希望只有一個保持啓用每次。兩個tableView和只有一個選擇與JavaFx

例如,我有tableView1和tableView2

如果tableView2被選擇(或聚焦)然後tableView1明確的選擇。

我試了一些代碼,但他們似乎並沒有工作。

mainTableView2.focusModelProperty().addListener(new ChangeListener() { 

      @Override 
      public void changed(ObservableValue ov, Object t, Object t1) { 
       mainTableView1.getSelectionModel().clearSelection(); 
      } 
     }); 

回答

4

在本示例中,您錯誤地分配了偵聽器。你寫道:

mainTableView2.focusModelProperty().addListener(new ChangeListener() { 

     @Override 
     public void changed(ObservableValue ov, Object t, Object t1) { 
      mainTableView1.getSelectionModel().clearSelection(); 
     } 
    }); 

這意味着,TableView中具有改變重點項目或細胞,它允許programmaticaly改變焦點的策略,跟蹤關注項目,等等......你在添加監聽器改變該策略,實際上通常不會改變。如果您想跟蹤焦點的表格項,您應該在該焦點模型的屬性上添加偵聽器。

你想應該是這樣的內容:

mainTableView2.focusedProperty().addListener(new ChangeListener() { 

     @Override 
     public void changed(ObservableValue ov, Object t, Object t1) { 
      mainTableView1.getSelectionModel().clearSelection(); 
     } 
    }); 

此屬性(focused屬性)來控制的聚焦狀態響應(藍色邊框 - 裏海風格,紅色邊框爲深紫色的風格)。

,但評估過程中,我發現了,這有一個bug(見註釋),所以我建議該問題的解決方法:

scene.focusOwnerProperty().addListener(new ChangeListener<Node>() { 
     @Override 
     public void changed(ObservableValue<? extends Node> ov, Node t, Node t1) { 

      if (t1 == table2) { 
       table1.getSelectionModel().clearSelection(); 
      } 
      if (t1 == table1) { 
       table2.getSelectionModel().clearSelection(); 
      } 
     } 
    }); 

粘貼有任何類似的邏輯..

+0

該解決方案在理論上是正確的,但看起來像是有一個錯誤 – 2013-02-19 20:20:27

+0

這就是爲什麼這個想法不起作用:http://javafx-jira.kenai.com/browse/RT-28491 – 2013-02-19 20:25:56