JavaFX:从TableView获取列数据 /* *要更改此模板,请选择工具|模板 *然后在编辑器中打开模板。 */ 包javafxdyntable; 导入java.util.Random; 导入javafx.application.application; 导入javafx.beans.property.SimpleBoleAnProperty; 导入javafx.beans.property.SimpleIntegerProperty; 导入javafx.beans.property.SimpleStringProperty; 导入javafx.beans.value.observeValue; 导入javafx.collections.FXCollections; 导入javafx.collections.ObservableList; 导入javafx.event.ActionEvent; 导入javafx.event.EventHandler; 导入javafx.geometry.Insets; 导入javafx.geometry.Pos; 导入javafx.scene.Group; 导入javafx.scene.scene; 导入javafx.scene.chart.XYChart; 导入javafx.scene.control.Button; 导入javafx.scene.control.ContentDisplay; 导入javafx.scene.control.TableCell; 导入javafx.scene.control.TableColumn; 导入javafx.scene.control.TableView; 导入javafx.scene.control.TextField; 导入javafx.scene.control.cell.PropertyValueFactory; 导入javafx.scene.input.KeyCode; 导入javafx.scene.input.KeyEvent; 导入javafx.scene.layout.HBox; 导入javafx.scene.layout.VBox; 导入javafx.scene.layout.VBoxBuilder; 导入javafx.stage.model; 导入javafx.stage.stage; 导入javafx.util.Callback; /** * *@作者reegan */ 公共类JavaFXDynTable扩展应用程序{ private TableView TableView=new TableView(); 私有按钮btnNew=新按钮(“新记录”); 静态随机=新随机(); 静态最终字符串日期[]={ “星期一”, “星期二”, “星期三”, “星期四”, “星期五”}; 公共静态类记录{ 私有最终SimpleIntegerProperty id; 私有最终SimpleIntegerProperty值\u 0; 私有最终SimpleIntegerProperty值_1; 私有最终SimpleIntegerProperty值_2; 私有最终SimpleIntegerProperty值_3; 私有最终SimpleIntegerProperty值_4; 记录(int i、int v0、int v1、int v2、int v3、, intv4){ this.id=新的SimpleIntegerProperty(i); this.value_0=新的SimpleIntegerProperty(v0); this.value_1=新的SimpleIntegerProperty(v1); this.value_2=新的SimpleIntegerProperty(v2); this.value_3=新的SimpleIntegerProperty(v3); this.value_4=新的SimpleIntegerProperty(v4); } 公共int getId(){ 返回id.get(); } 公共无效集合ID(int v){ id.set(v); } public int getValue_0(){ 返回值_0.get(); } 公共无效设置值_0(整数v){ 值0.set(v); } public int getValue_1(){ 返回值_1.get(); } 公共无效设置值_1(int v){ 值_1.set(v); } public int getValue_2(){ 返回值_2.get(); } 公共无效设置值_2(int v){ 值_2.set(v); } public int getValue_3(){ 返回值_3.get(); } 公共无效设置值_3(int v){ 值_3.set(v); } public int getValue_4(){ 返回值_4.get(); } 公共无效设置值_4(int v){ 值_4.设置(v); } }; ObservableList data=FXCollections.observableArrayList(); @凌驾 公共作废开始(最终阶段初级阶段){ setTitle(“java buddy.blogspot.com”); tableView.setEditable(true); 回叫手机工厂= 新回调函数(){ @凌驾 公共TableCell调用(TableP列){ 返回新的EditingCell(); } }; Btnew.setOnAction(Btnewandler); //初始表 //“id”的不可编辑列 TableColumn col_id=新的TableColumn(“id”); tableView.getColumns().add(col_id); col_id.setCellValueFactory( 新财产价值工厂(“id”); //可编辑列 对于(inti=0;i

JavaFX:从TableView获取列数据 /* *要更改此模板,请选择工具|模板 *然后在编辑器中打开模板。 */ 包javafxdyntable; 导入java.util.Random; 导入javafx.application.application; 导入javafx.beans.property.SimpleBoleAnProperty; 导入javafx.beans.property.SimpleIntegerProperty; 导入javafx.beans.property.SimpleStringProperty; 导入javafx.beans.value.observeValue; 导入javafx.collections.FXCollections; 导入javafx.collections.ObservableList; 导入javafx.event.ActionEvent; 导入javafx.event.EventHandler; 导入javafx.geometry.Insets; 导入javafx.geometry.Pos; 导入javafx.scene.Group; 导入javafx.scene.scene; 导入javafx.scene.chart.XYChart; 导入javafx.scene.control.Button; 导入javafx.scene.control.ContentDisplay; 导入javafx.scene.control.TableCell; 导入javafx.scene.control.TableColumn; 导入javafx.scene.control.TableView; 导入javafx.scene.control.TextField; 导入javafx.scene.control.cell.PropertyValueFactory; 导入javafx.scene.input.KeyCode; 导入javafx.scene.input.KeyEvent; 导入javafx.scene.layout.HBox; 导入javafx.scene.layout.VBox; 导入javafx.scene.layout.VBoxBuilder; 导入javafx.stage.model; 导入javafx.stage.stage; 导入javafx.util.Callback; /** * *@作者reegan */ 公共类JavaFXDynTable扩展应用程序{ private TableView TableView=new TableView(); 私有按钮btnNew=新按钮(“新记录”); 静态随机=新随机(); 静态最终字符串日期[]={ “星期一”, “星期二”, “星期三”, “星期四”, “星期五”}; 公共静态类记录{ 私有最终SimpleIntegerProperty id; 私有最终SimpleIntegerProperty值\u 0; 私有最终SimpleIntegerProperty值_1; 私有最终SimpleIntegerProperty值_2; 私有最终SimpleIntegerProperty值_3; 私有最终SimpleIntegerProperty值_4; 记录(int i、int v0、int v1、int v2、int v3、, intv4){ this.id=新的SimpleIntegerProperty(i); this.value_0=新的SimpleIntegerProperty(v0); this.value_1=新的SimpleIntegerProperty(v1); this.value_2=新的SimpleIntegerProperty(v2); this.value_3=新的SimpleIntegerProperty(v3); this.value_4=新的SimpleIntegerProperty(v4); } 公共int getId(){ 返回id.get(); } 公共无效集合ID(int v){ id.set(v); } public int getValue_0(){ 返回值_0.get(); } 公共无效设置值_0(整数v){ 值0.set(v); } public int getValue_1(){ 返回值_1.get(); } 公共无效设置值_1(int v){ 值_1.set(v); } public int getValue_2(){ 返回值_2.get(); } 公共无效设置值_2(int v){ 值_2.set(v); } public int getValue_3(){ 返回值_3.get(); } 公共无效设置值_3(int v){ 值_3.set(v); } public int getValue_4(){ 返回值_4.get(); } 公共无效设置值_4(int v){ 值_4.设置(v); } }; ObservableList data=FXCollections.observableArrayList(); @凌驾 公共作废开始(最终阶段初级阶段){ setTitle(“java buddy.blogspot.com”); tableView.setEditable(true); 回叫手机工厂= 新回调函数(){ @凌驾 公共TableCell调用(TableP列){ 返回新的EditingCell(); } }; Btnew.setOnAction(Btnewandler); //初始表 //“id”的不可编辑列 TableColumn col_id=新的TableColumn(“id”); tableView.getColumns().add(col_id); col_id.setCellValueFactory( 新财产价值工厂(“id”); //可编辑列 对于(inti=0;i,java,javafx-2,javafx,Java,Javafx 2,Javafx,我认为这对你有帮助 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package javafxdyntable; import java.util.Random; import javafx.application.Application; import javafx.beans.property.SimpleBooleanProperty;

我认为这对你有帮助

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javafxdyntable;

import java.util.Random;
import javafx.application.Application;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.layout.VBoxBuilder;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.util.Callback;

/**
 *
 * @author reegan
 */
public class JavaFXDynTable extends Application {
    private TableView tableView = new TableView();
    private Button btnNew = new Button("New Record");

    static Random random = new Random();

    static final String Day[] = {
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday"};

    public static class Record {
        private final SimpleIntegerProperty id;
        private final SimpleIntegerProperty value_0;
        private final SimpleIntegerProperty value_1;
        private final SimpleIntegerProperty value_2;
        private final SimpleIntegerProperty value_3;
        private final SimpleIntegerProperty value_4;

        Record(int i, int v0, int v1, int v2, int v3, 
                int v4) {
            this.id = new SimpleIntegerProperty(i);
            this.value_0 = new SimpleIntegerProperty(v0);
            this.value_1 = new SimpleIntegerProperty(v1);
            this.value_2 = new SimpleIntegerProperty(v2);
            this.value_3 = new SimpleIntegerProperty(v3);
            this.value_4 = new SimpleIntegerProperty(v4);
        }

        public int getId() {
            return id.get();
        }

        public void setId(int v) {
            id.set(v);
        }

        public int getValue_0() {
            return value_0.get();
        }

        public void setValue_0(int v) {
            value_0.set(v);
        }

        public int getValue_1() {
            return value_1.get();
        }

        public void setValue_1(int v) {
            value_1.set(v);
        }

        public int getValue_2() {
            return value_2.get();
        }

        public void setValue_2(int v) {
            value_2.set(v);
        }

        public int getValue_3() {
            return value_3.get();
        }

        public void setValue_3(int v) {
            value_3.set(v);
        }

        public int getValue_4() {
            return value_4.get();
        }

        public void setValue_4(int v) {
            value_4.set(v);
        }

    };

    ObservableList<Record> data = FXCollections.observableArrayList();

    @Override
    public void start(final Stage primaryStage) {
        primaryStage.setTitle("java-buddy.blogspot.com");
        tableView.setEditable(true);
        Callback<TableColumn, TableCell> cellFactory =
                new Callback<TableColumn, TableCell>() {

                    @Override
                    public TableCell call(TableColumn p) {
                        return new EditingCell();
                    }
                };

        btnNew.setOnAction(btnNewHandler);

        //init table
        //Un-editable column of "id"
        TableColumn col_id = new TableColumn("ID");
        tableView.getColumns().add(col_id);
        col_id.setCellValueFactory(
                    new PropertyValueFactory<Record, String>("id"));

        //Editable columns
        for(int i=0; i<Day.length; i++){
            TableColumn col = new TableColumn(Day[i]);
            col.setCellValueFactory(
                    new PropertyValueFactory<Record, String>(
                            "value_" + String.valueOf(i)));
            tableView.getColumns().add(col);
            col.setCellFactory(cellFactory);
        }

        //Insert Button
        TableColumn col_action = new TableColumn<>("Action");
        col_action.setSortable(false);

        col_action.setCellValueFactory(
                new Callback<TableColumn.CellDataFeatures<Record, Boolean>, 
                ObservableValue<Boolean>>() {

            @Override
            public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<Record, Boolean> p) {
                return new SimpleBooleanProperty(p.getValue() != null);
            }
        });

        col_action.setCellFactory(
                new Callback<TableColumn<Record, Boolean>, TableCell<Record, Boolean>>() {

            @Override
            public TableCell<Record, Boolean> call(TableColumn<Record, Boolean> p) {
                return new ButtonCell(tableView);
            }

        });
        tableView.getColumns().add(col_action);

        tableView.setItems(data);

        Group root = new Group();
        VBox vBox = new VBox();
        vBox.setSpacing(10);
        vBox.getChildren().addAll(btnNew, tableView,box());
        root.getChildren().add(vBox);
        primaryStage.setScene(new Scene(root, 800, 600));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

    public HBox box() {
        HBox box = new HBox(10);
        TextField field1 = new TextField("Total of Monday");
        TextField field2 = new TextField("Total of Tuesday");
        TextField field3 = new TextField("Total of Wednesday");
        TextField field4 = new TextField("Total of Thursday");
        TextField field5 = new TextField("Total of Friday");
        box.getChildren().addAll(field1,field2,field3,field4,field5);
        return box;
    }


    public class SubRecord{
        private SimpleStringProperty fieldSubRecordName;
        private SimpleIntegerProperty fieldSubRecordValue;

        SubRecord(String sn, int sv){
          this.fieldSubRecordName = new SimpleStringProperty(sn);
          this.fieldSubRecordValue = new SimpleIntegerProperty(sv);
      }

      public String getFieldSubRecordName() {
          return fieldSubRecordName.get();
      }

      public int getFieldSubRecordValue() {
          return fieldSubRecordValue.get();
      }

  }

    //Define the button cell
    private class ButtonCell extends TableCell<Record, Boolean> {
        final Button cellButton = new Button("Action");

        ButtonCell(final TableView tblView){

            cellButton.setOnAction(new EventHandler<ActionEvent>(){

                @Override
                public void handle(ActionEvent t) {
                    int selectdIndex = getTableRow().getIndex();


                    //Create a new table show details of the selected item
                    Record selectedRecord = (Record)tblView.getItems().get(selectdIndex);
                    ObservableList<SubRecord> subDataList =
                            FXCollections.observableArrayList(
                                new SubRecord("ID", selectedRecord.getId()),
                                new SubRecord("Monday", selectedRecord.getValue_0()),
                                new SubRecord("Tuesday", selectedRecord.getValue_1()),
                                new SubRecord("Wednesday", selectedRecord.getValue_2()),
                                new SubRecord("Thursday", selectedRecord.getValue_3()),
                                new SubRecord("Friday", selectedRecord.getValue_4()));

                    TableColumn columnfield = new TableColumn("Field");
                    columnfield.setCellValueFactory(
                            new PropertyValueFactory<Record,String>("fieldSubRecordName"));

                    TableColumn columnValue = new TableColumn("Value");
                    columnValue.setCellValueFactory(
                            new PropertyValueFactory<SubRecord,Integer>("fieldSubRecordValue"));

                    TableView<SubRecord> subTableView = new TableView<>();
                    subTableView.setItems(subDataList);
                    subTableView.getColumns().addAll(columnfield, columnValue);


                    Stage myDialog = new Stage();
                    myDialog.initModality(Modality.WINDOW_MODAL);

                    Scene myDialogScene = new Scene(VBoxBuilder.create()
                            .children(subTableView)
                            .alignment(Pos.CENTER)
                            .padding(new Insets(10))
                            .build());

                    myDialog.setScene(myDialogScene);
                    myDialog.show();
                }
            });
        }

        //Display button if the row is not empty
        @Override
        protected void updateItem(Boolean t, boolean empty) {
            super.updateItem(t, empty);
            if(!empty){
                setGraphic(cellButton);
            }
        }
    }

    EventHandler<ActionEvent> btnNewHandler = 
            new EventHandler<ActionEvent>(){

        @Override
        public void handle(ActionEvent t) {

            //generate new Record with random number
            int newId = data.size();
            Record newRec = new Record(
                    newId,
                    random.nextInt(100), 
                    random.nextInt(100), 
                    random.nextInt(100), 
                    random.nextInt(100), 
                    random.nextInt(100));
            data.add(newRec);

        }
    };

    class EditingCell extends TableCell<XYChart.Data, Number> {

        private TextField textField;

        public EditingCell() {}

        @Override
        public void startEdit() {

            super.startEdit();

            if (textField == null) {
                createTextField();
            }

            setGraphic(textField);
            setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
            textField.selectAll();
        }

        @Override
        public void cancelEdit() {
            super.cancelEdit();

            setText(String.valueOf(getItem()));
            setContentDisplay(ContentDisplay.TEXT_ONLY);
        }

        @Override
        public void updateItem(Number item, boolean empty) {
            super.updateItem(item, empty);

            if (empty) {
                setText(null);
                setGraphic(null);
            } else {
                if (isEditing()) {
                    if (textField != null) {
                        textField.setText(getString());
                    }
                    setGraphic(textField);
                    setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
                } else {
                    setText(getString());
                    setContentDisplay(ContentDisplay.TEXT_ONLY);
                }
            }
        }

        private void createTextField() {
            textField = new TextField(getString());
            textField.setMinWidth(this.getWidth() - this.getGraphicTextGap()*2);
            textField.setOnKeyPressed(new EventHandler<KeyEvent>() {

                @Override
                public void handle(KeyEvent t) {
                    if (t.getCode() == KeyCode.ENTER) {
                        commitEdit(Integer.parseInt(textField.getText()));
                    } else if (t.getCode() == KeyCode.ESCAPE) {
                        cancelEdit();
                    }
                }
            });
        }

        private String getString() {
            return getItem() == null ? "" : getItem().toString();
        }
    }

}
Tabcol.setCellFactory(新回调()
{
@凌驾
公共TableCell调用(TableP列)
{
返回新的TableCell()
{
@凌驾
public void updateItem(字符串项,布尔值为空)
{
super.updateItem(项,空);
如果(!isEmpty())
{
System.out.println(“单元格值=”+this.getText());
setText(项目);
}
}
};
}
});
我将这样使用:-for(int i=0;iTabcol.setCellFactory(new Callback<TableColumn<CheckDo, String>, TableCell<CheckDo, String>>() { @Override public TableCell<CheckDo, String> call(TableColumn<CheckDo, String> p) { return new TableCell<CheckDo,String>() { @Override public void updateItem(String item, boolean empty) { super.updateItem(item, empty); if (!isEmpty()) { System.out.println("Value of cell ="+this.getText()); setText(item); } } }; } });