Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javafx如何使用复选框在表视图中获取选定行数据_Java_Javafx_Javafx 2_Javafx 8 - Fatal编程技术网

javafx如何使用复选框在表视图中获取选定行数据

javafx如何使用复选框在表视图中获取选定行数据,java,javafx,javafx-2,javafx-8,Java,Javafx,Javafx 2,Javafx 8,在这个项目中,我无法得到控制台输出中是否选中了复选框数据 我的代码: import java.util.Arrays; import java.util.Iterator; import java.util.List; import javafx.application.Application; import javafx.beans.Observable; import javafx.beans.property.BooleanProperty; import javafx.beans.pr

在这个项目中,我无法得到控制台输出中是否选中了复选框数据

我的代码:

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import javafx.application.Application;
import javafx.beans.Observable;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellEditEvent;
import javafx.scene.control.TablePosition;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.CheckBoxTableCell;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import javafx.util.Callback;

public class TableWithCheckbox extends Application {
   final TableView<Player> table = new TableView<Player>();
    ObservableList<Player> data ;
  @Override
  public void start(Stage primaryStage) {
    final BorderPane root = new BorderPane();

    table.setItems(createData());
    final TableColumn<Player, String> firstNameColumn = new TableColumn<>("First Name");
    final TableColumn<Player, String> lastNameColumn = new TableColumn<>("Last Name");
    final TableColumn<Player, Boolean> injuredColumn = new TableColumn<>("Injured");
    firstNameColumn.setCellValueFactory(new PropertyValueFactory<Player, String>("firstName"));
    lastNameColumn.setCellValueFactory(new PropertyValueFactory<Player, String>("lastName"));
    injuredColumn.setCellValueFactory(new PropertyValueFactory<Player, Boolean>("injured"));
    final Callback<TableColumn<Player, Boolean>, TableCell<Player, Boolean>> cellFactory = CheckBoxTableCell.forTableColumn(injuredColumn);
    injuredColumn.setCellFactory(new Callback<TableColumn<Player, Boolean>, TableCell<Player, Boolean>>() {
      @Override
      public TableCell<Player, Boolean> call(TableColumn<Player, Boolean> column) {
        TableCell<Player, Boolean> cell = cellFactory.call(column);
        cell.setAlignment(Pos.CENTER);
        return cell ;
      }
    });
    injuredColumn.setCellFactory(cellFactory);
    injuredColumn.setEditable(true);

    // This appears not to get invoked:
    injuredColumn.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<Player,Boolean>>() {
      @Override
      public void handle(CellEditEvent<Player, Boolean> event) {
        System.out.println("Edit commit");
      }
    });

    table.setEditable(true);
    table.getColumns().addAll(firstNameColumn, lastNameColumn, injuredColumn);

    root.setCenter(table);

    Button button = new Button("Dump info");
    button.setOnAction(new EventHandler<ActionEvent>() {
      @Override
      public void handle(ActionEvent event) {
        for (Player p : table.getItems()) {
          System.out.println(p);
        }
        System.out.println();
      }
    }); Button button1 = new Button("add");
    button1.setOnAction(new EventHandler<ActionEvent>() {
      @Override
      public void handle(ActionEvent event) {
  data.add(new Player("hbghj", "hjhbbccc77", true));
      }
    });
    root.setBottom(button); 
    root.setTop(button1);
    primaryStage.setScene(new Scene(root, 400, 600));
    primaryStage.show();    
  }

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

  private ObservableList<Player> createData() {
    List<Player> players = Arrays.asList(
        new Player("Hugo" ,"Lloris", false),
        new Player("Brad", "Friedel", false),
        new Player("Kyle", "Naughton", false),
        new Player("Younes", "Kaboul", true),
        new Player("Benoit", "Assou-Ekotto", false),
        new Player("Jan", "Vertonghen", false),
        new Player("Michael", "Dawson", false),
        new Player("William", "Gallas", true),
        new Player("Kyle", "Walker", false),
        new Player("Scott", "Parker", false),
        new Player("Mousa", "Dembele", false),
        new Player("Sandro", "Cordeiro", true),
        new Player("Tom", "Huddlestone", false),
        new Player("Gylfi","Sigurdsson", false),
        new Player("Gareth", "Bale", false),
        new Player("Aaron", "Lennon", false),
        new Player("Jermane", "Defoe", false),
        new Player("Emmanuel", "Adebayor", true)
    );
  data =  FXCollections.<Player>observableArrayList( 
        new Callback<Player, Observable[]>() {
          @Override
          public Observable[] call(Player player) {
            return new Observable[]{player.injuredProperty()};
          }
        }
    );
    data.addAll(players);
    data.addListener(new ListChangeListener<Player>() {
      @Override
      public void onChanged(
          javafx.collections.ListChangeListener.Change<? extends Player> change) {
        System.out.println("List changed");
        while (change.next()) {
          if (change.wasUpdated()) {
              System.out.println("What code a do here");
        System.out.println();  }
        }
      }
    });
     table.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 (table.getSelectionModel().getSelectedItem() != null) {
                    TableView.TableViewSelectionModel selectionModel = table.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);
       }
            }
        });
    return data ;
  }

  public static class Player {
    private final StringProperty firstName ;
    private final StringProperty lastName ;
    private final BooleanProperty injured ;
    Player(String firstName, String lastName, boolean international) {
      this.firstName = new SimpleStringProperty(this, "firstName", firstName);
      this.lastName = new SimpleStringProperty(this, "lastName", lastName);
      this.injured = new SimpleBooleanProperty(this, "injured", international);
    }
    public String getFirstName() { return firstName.get(); }
    public void setFirstName(String firstName) { this.firstName.set(firstName);}
    public StringProperty firstNameProperty() { return firstName ; }
    public String getLastName() { return lastName.get(); }
    public void setLastName(String lastName) { this.lastName.set(lastName); }
    public StringProperty lastNameProperty() { return lastName ; }    
    public boolean isInjuredl() { return injured.get(); }
    public void setInjured(boolean international) { this.injured.set(international); }
    public BooleanProperty injuredProperty() { return injured ; }
    @Override
    public String toString() {
      return firstName.get() + " " + lastName.get() + (injured.get()?" (injured)":"");
    }
  }
}
但它不会告诉天气复选框是否选中:

public void onChanged
我需要这样的输出:

 Selected row: Gareth    Bale   true

如果出现以下情况,请在您的手机上试用此功能:

  if (change.wasUpdated()) {
      String inj = (data.get(change.getFrom()).injured.getValue())?"injuried":"no longer injuried";
      System.out.println(data.get(change.getFrom()).lastName.getValue() + ", " + 
              data.get(change.getFrom()).firstName.getValue() + "  "
              + "changed his status to " + inj);
      System.out.println();  
  }
注意仅当玩家受伤时,输出才会显示,否则将为空:

所选行:Gareth捆(受伤)

所选行:Gareth Bale

将其替换为:

所选行:Gareth Bale true

所选行:Gareth Bale false

您还必须在player类中更改此函数:

public String toString() {
  return firstName.get() + " " + lastName.get() + (injured.get()?" true":" false");
}

Dump info
的点击功能中还有一个问题,它提供了完整的数据,但它不是插入mysql数据库的格式
insert-into-mysqltable value(“此处的所有数据,data1,data2,true此格式”)
或者如果您可以帮助我使用for循环逐行获取
转储信息,例如:
for(row=0;row此问题与您的原始问题无关。什么?我想知道转储信息背后的概念并更改其输出格式,请提供帮助。可能是因为您的问题要求在基本主题上提供帮助,并且您仍在这里要求更多帮助,而大多数用户通常会投反对票。
  if (change.wasUpdated()) {
      String inj = (data.get(change.getFrom()).injured.getValue())?"injuried":"no longer injuried";
      System.out.println(data.get(change.getFrom()).lastName.getValue() + ", " + 
              data.get(change.getFrom()).firstName.getValue() + "  "
              + "changed his status to " + inj);
      System.out.println();  
  }
public String toString() {
  return firstName.get() + " " + lastName.get() + (injured.get()?" true":" false");
}