在按钮上单击获取选中的行值以在Javafx中字符串

在按钮上单击获取选中的行值以在Javafx中字符串,java,javafx,Java,Javafx,我需要选择行值并将它们保存到字符串中。下面是我如何将所有数据填充到TabeView的。然而,我不知道如何通过点击按钮获得所选的值。我知道如何获取行ID和单击的值,但不知道如何获取原始数据 初始值设定项类 public class controller implements Initializable { @FXML private TableView<TableRow> PasswordTabel; @FXML private TableColum

我需要选择行值并将它们保存到字符串中。下面是我如何将所有数据填充到TabeView的。然而,我不知道如何通过点击按钮获得所选的值。我知道如何获取行ID和单击的值,但不知道如何获取原始数据

初始值设定项类

public class controller implements Initializable {

    @FXML
    private TableView<TableRow> PasswordTabel;

    @FXML
    private TableColumn<TableRow, Object> ComName;

    @FXML
    private TableColumn<TableRow, Object> RepName;

    @FXML
    private TableColumn<TableRow, Object> RepDate;

    @FXML
    private TableColumn<TableRow, Object> RepPass;

    List<String> urls = new ArrayList<String>();

    public void initialize(URL location, ResourceBundle resources) {

        ComName.setCellValueFactory(new PropertyValueFactory<TableRow, Object>(
                "C_Name"));
        RepName.setCellValueFactory(new PropertyValueFactory<TableRow, Object>(
                "R_Name"));
        RepDate.setCellValueFactory(new PropertyValueFactory<TableRow, Object>(
                "R_Date"));
        RepPass.setCellValueFactory(new PropertyValueFactory<TableRow, Object>(
                "R_Pass"));

        ObservableList data = FXCollections.observableArrayList();
        try {
            File uxml = new File("Key.xml");
            DocumentBuilderFactory docFactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
            Document doc = docBuilder.parse(uxml);

            doc.getDocumentElement().normalize();
            NodeList nodeList = doc.getElementsByTagName("ReportDetails");
            for (int temp = 0; temp < nodeList.getLength(); temp++) {
                Node node = nodeList.item(temp);

                if (node.getNodeType() == Node.ELEMENT_NODE) {

                    Element student = (Element) node;

                    String C_nam = student.getAttribute("Cname");
                    String R_nam = student.getAttribute("Rname");
                    String R_dat = student.getAttribute("Rdate");
                    String R_pas = student.getAttribute("Rpw");
                    data.add(new Record(C_nam, R_nam, R_dat, R_pas));
                }
            }
            PasswordTabel.getItems().setAll(data);

        } catch (Exception e) {

        }

PasswordTabel.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
            @Override
            public void changed(ObservableValue observableValue, Object oldValue, Object newValue) {
                //Check whether item is selected and set value of selected item to Label
                if (PasswordTabel.getSelectionModel().getSelectedItem() != null) {
                    TableViewSelectionModel selectionModel = PasswordTabel.getSelectionModel();
                    ObservableList selectedCells = selectionModel.getSelectedCells();
                    TablePosition tablePosition = (TablePosition) selectedCells.get(0);
                    Object val = tablePosition.getTableColumn().getCellData(newValue);
                    System.out.println("Selected Value " + val);
                    System.out.println("Selected row " + newValue);
                }
            }
        });
    }
}
尝试:

        PasswordTabel.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

        PasswordTabel.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<Record>() {
            public void onChanged(ListChangeListener.Change<? extends Record> c) {

                for (Record p : c.getList()) {
                    System.out.println(p.getR_Pass());
                }

            }
        });
PasswordTabel.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
PasswordTabel.getSelectionModel().getSelectedItems().addListener(新ListChangeListener()){
public void onChanged(ListChangeListener.Change如果表处于单选模式,则可以使用

table.getSelectionModel().getSelectedItem()
table.getSelectionModel().getSelectedItems()
如果表格处于多选模式,则可以使用

table.getSelectionModel().getSelectedItem()
table.getSelectionModel().getSelectedItems()
编辑-添加带有Listener的完整示例

导入javafx.application.application;
导入javafx.beans.property.SimpleStringProperty;
导入javafx.collections.FXCollections;
导入javafx.collections.ListChangeListener;
导入javafx.collections.ObservableList;
导入javafx.geometry.Insets;
导入javafx.scene.Group;
导入javafx.scene.scene;
导入javafx.scene.control.Label;
导入javafx.scene.control.SelectionMode;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.control.cell.PropertyValueFactory;
导入javafx.scene.layout.VBox;
导入javafx.scene.text.Font;
导入javafx.stage.stage;
公共类TableViewSampleListener扩展了应用程序{
private TableView table=new TableView();
私有最终可观测列表数据=
FXCollections.observableArrayList(
新人(“雅各布”、“史密斯”、“雅各布”。smith@example.com"),
新人(“伊莎贝拉”、“约翰逊”、“伊莎贝拉”。johnson@example.com"),
新人(“伊桑”、“威廉姆斯”、“伊桑”。williams@example.com"),
新人(“艾玛”、“琼斯”、“艾玛”。jones@example.com"),
新人(“迈克尔”、“布朗”、“迈克尔”。brown@example.com")
);
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
公众假期开始(阶段){
场景=新场景(新组());
stage.setTitle(“表格视图示例”);
舞台布景宽度(450);
舞台设置高度(500);
最终标签=新标签(“地址簿”);
label.setFont(新字体(“Arial”,20));
table.setEditable(true);
TableColumn firstNameCol=新的TableColumn(“名字”);
firstNameCol.setMinWidth(100);
firstNameCol.setCellValueFactory(
新财产价值工厂(“名字”);
TableColumn lastNameCol=新的TableColumn(“姓氏”);
lastNameCol.setMinWidth(100);
lastNameCol.setCellValueFactory(
新财产价值工厂(“姓氏”);
TableColumn emailCol=新的TableColumn(“电子邮件”);
设置最小宽度(200);
emailCol.setCellValueFactory(
新物业价值工厂(“电子邮件”);
表2.设置项目(数据);
table.getColumns().addAll(firstNameCol、lastNameCol、emailCol);
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
table.getSelectionModel().getSelectedItems().addListener(新ListChangeListener()){
public void onChanged(ListChangeListener.Change如果表处于单选模式,则可以使用

table.getSelectionModel().getSelectedItem()
table.getSelectionModel().getSelectedItems()
如果表格处于多选模式,则可以使用

table.getSelectionModel().getSelectedItem()
table.getSelectionModel().getSelectedItems()
编辑-添加带有Listener的完整示例

导入javafx.application.application;
导入javafx.beans.property.SimpleStringProperty;
导入javafx.collections.FXCollections;
导入javafx.collections.ListChangeListener;
导入javafx.collections.ObservableList;
导入javafx.geometry.Insets;
导入javafx.scene.Group;
导入javafx.scene.scene;
导入javafx.scene.control.Label;
导入javafx.scene.control.SelectionMode;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.control.cell.PropertyValueFactory;
导入javafx.scene.layout.VBox;
导入javafx.scene.text.Font;
导入javafx.stage.stage;
公共类TableViewSampleListener扩展了应用程序{
private TableView table=new TableView();
私有最终可观测列表数据=
FXCollections.observableArrayList(
新人(“雅各布”、“史密斯”、“雅各布”。smith@example.com"),
新人(“伊莎贝拉”、“约翰逊”、“伊莎贝拉”。johnson@example.com"),
新人(“伊桑”、“威廉姆斯”、“伊桑”。williams@example.com"),
新人(“艾玛”、“琼斯”、“艾玛”。jones@example.com"),
新人(“迈克尔”、“布朗”、“迈克尔”。brown@example.com")
);
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
公众假期开始(阶段){
场景=新场景(新组());
stage.setTitle(“表格视图示例”);
舞台布景宽度(450);
舞台设置高度(500);
最终标签=新标签(“地址簿”);
label.setFont(新字体(“Arial”,20));
table.setEditable(true);
TableColumn firstNameCol=新的TableColumn(“名字”);
firstNameCol.setMinWidth(100);
firstNameCol.setCellValueFactory(
新财产价值工厂(“名字”);
TableColumn lastNameCol=新的TableColumn(“姓氏”);
lastNameCol.setMinWidth(100);
lastNameCol.setCellValueFactory(
新财产价值工厂(“姓氏”);
TableColumn emailCol=新的TableColumn(“电子邮件”);
设置最小宽度(200);
emailCol.setCellValueFactory(
新物业价值工厂(“电子邮件”);
表2.设置项目(数据);
table.getColumns().addAll(firstNameCol、lastNameCol、emailCol);
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
table.getSelectionModel().getSelectedItems().addListener(新ListChangeListener()){
更改后的公众假期(Lis)