如何在JavaFX中单击TableView中的记录后填充文本字段

时间:2013-07-02 11:01:44

标签: javafx

有没有办法根据在JavaFX中的tableView中单击的记录来填充文本字段?
我想将在tableview中单击的记录显示到文本字段。
有任何建议可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

以下是您的代码示例

yourTable.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<T>() {
   @Override
   public void changed(ObservableValue<? extends T> ov, T t, T t1) {
      System.out.println(table.getSelectionModel().getSelectedItem());
      //Code to populate your popup/window.
   }
});

答案 1 :(得分:0)

您需要向表视图添加一个活动侦听器,以及一个控制它应该做什么的方法。

因此,在您的 FXML 文件中,您将让 tableview 使用方法名称“clickMe”分配鼠标单击事件:

<TableView fx:id="someTable" layoutX="322.0" layoutY="73.0" onMouseClicked="#clickMe">
        <columns>
        <TableColumn fx:id="someColumn1" text="someValue1" />
        <TableColumn fx:id="someColumn2" text="someValue2" />
        <TableColumn fx:id="someColumn3" text="someValue3" />
        </columns>
</TableView>

接下来在您的控制器中,您需要添加 tableview 和顶部的字段,然后是 clickMe 方法。我假设您已经添加了列并且正在使用单元工厂来填充它们:

package YourPackage;

public class YourFXMLController{
@FXML private TableView<objectTheTableIsPopulatedWith> someTable; //make sure the name 
// on the tableview and columns match your fx:id
@FXML private TableColumn someColumn1;
@FXML private TableColumn someColumn2;
@FXML private TableColumn someColumn3;
@FXML private TextField someField1;
@FXML private TextField someField2;
@FXML private TextField someField3;

//next add the clickMe method
public void clickMe(MouseEvent event) {
if (event.getClickCount() == 1) //Check for a click, change to 2 for double click
    {
someField1.setText(someTable.getSelectionModel().getSelectedItem().getSomeString1());
someField2.setText(someTable.getSelectionModel().getSelectedItem().getSomeString2());
someField3.setText(someTable.getSelectionModel().getSelectedItem().getSomeString3());
    }
}
}

只要您已经制作了一个由具有构造函数、setter 和 getter 的对象类构建的可观察列表。因此 getSomeString1() 方法将是您用来填充表视图值的任何 getter。