как объявить свойство значения даты для таблицы - PullRequest
0 голосов
/ 19 октября 2018

Мне нужно передать свойство date в setCellValueFactory, это код для seters и geters моего Persona class, что является правильным методом, чтобы сделать это, я думаю, у меня проблема с правильным объявлением, поэтомуМне нужно реальное направление здесь, мне нужно объявить некоторую дату в классе java.sql.date, есть ли ссылки?любая идея?.пожалуйста, небольшая помощь здесь.

   package application;


import java.time.LocalDate;

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

public class Persona {



    private StringProperty nombres;
    private StringProperty apellidos;
    private IntegerProperty id_cliente;
    private ObjectProperty <LocalDate>fechacliente;

public Persona (   String nombres, String apellidos, Integer id_cliente, Object fechacliente) {
    this.nombres=  new SimpleStringProperty (nombres);
    this.apellidos= new SimpleStringProperty ( apellidos);
    this.id_cliente=new SimpleIntegerProperty (id_cliente);
    this.fechacliente= new SimpleObjectProperty<LocalDate>();
}


public Object getFecha() {
    return fechacliente.get();
}

public void setFecha(Object fechacliente) {
    this.fechacliente=new SimpleObjectProperty<>();

}

public String getNombres() {
    return nombres.get();
}

public  void  setNombres(String nombres) {
    this.nombres=new SimpleStringProperty (nombres);
}


public String getApellidos() {
    return apellidos.get();
}

public  void  setApellidos(String apellidos) {
    this.apellidos=new SimpleStringProperty ( apellidos);
}


public Integer getId_cliente() {
    return id_cliente.get();
}

public  void  setid_cliente(Integer id_cliente) {
    this.id_cliente=new SimpleIntegerProperty (id_cliente);
}

}

Некоторые из Controller здесь, которые устанавливают значения для таблицы

public void initialize(URL arg0, ResourceBundle arg1) {
            clienteid.setCellValueFactory(new PropertyValueFactory <Persona, Integer>("id_cliente"));
            nombrescol.setCellValueFactory(new PropertyValueFactory <Persona, String>("nombres"));
             apellidoscol.setCellValueFactory(new PropertyValueFactory <Persona, String>("apellidos"));
             fechacli.setCellValueFactory(new PropertyValueFactory <Persona, LocalDate>("fechacliente"));

 seleccionaregistros();
     seleccionanombre();
     seleccionapellido();


}

, это метод, который я использую для извлечения данных втабличное представление, но дата не отображается

public void seleccionaregistros() {
    ObservableList <Persona> data =FXCollections.observableArrayList();
      Connection conn=null;{
          try {

             conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=prueba", "sa", "milkas87");
              Statement mostrar=conn.createStatement();
              ResultSet rs;
              rs= mostrar.executeQuery("select * from cliente");


              while ( rs.next() ) 
              {
                 data.add(new Persona(

                         rs.getString("nombre"),
                         rs.getString("apellido"),
                         rs.getInt("id"),
                         rs.getDate(4)
                         ));
                 tablacliente.setItems(data);
              }

          } catch (SQLException e) {
              e.printStackTrace();
          }

     }

}

Дата не отображается в табличном представлении, мне нужно отформатировать дату, чтобы передать это значение в табличное представление, я думаю.пожалуйста, некоторая ориентация здесь будет полезна.

это мой FXML код

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane prefHeight="497.0" prefWidth="943.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.ConexionController">
   <children>
      <Pane layoutY="-3.0" prefHeight="605.0" prefWidth="1084.0">
         <children>
            <Button fx:id="btn" layoutX="145.0" layoutY="109.0" mnemonicParsing="false" onAction="#cargarconexion" prefHeight="46.0" prefWidth="117.0" text="Prueba Conexion" />
            <Button fx:id="mtn" layoutX="15.0" layoutY="183.0" mnemonicParsing="false" onAction="#cargarregistro" prefHeight="46.0" prefWidth="117.0" text="Inserta Registro" />
            <Label layoutX="14.0" layoutY="279.0" prefHeight="17.0" prefWidth="105.0" text="NOMBRES" />
            <Label layoutX="15.0" layoutY="327.0" prefHeight="17.0" prefWidth="79.0" text="APELLIDOS" />
            <TextField fx:id="nm" layoutX="159.0" layoutY="275.0" prefHeight="25.0" prefWidth="149.0" />
            <TextField fx:id="ap" layoutX="159.0" layoutY="323.0" />
            <Button fx:id="lmp" layoutX="159.0" layoutY="484.0" mnemonicParsing="false" onAction="#borrarcasillatexto" prefHeight="25.0" prefWidth="150.0" text="Limpiar Texto" />
            <TableView fx:id="tablacliente" layoutX="355.0" layoutY="15.0" prefHeight="383.0" prefWidth="696.0">
              <columns>
                <TableColumn fx:id="clienteid" prefWidth="159.0" text="ID" />
                <TableColumn fx:id="nombrescol" prefWidth="159.0" text="NOMBRES" />
                  <TableColumn fx:id="apellidoscol" minWidth="0.0" prefWidth="169.0" text="APELLIDOS" />
                  <TableColumn fx:id="fechacli" prefWidth="235.0" text="FECHA DE NACIMIENTO" />
              </columns>
            </TableView>
            <Button fx:id="mts" layoutX="15.0" layoutY="109.0" mnemonicParsing="false" onAction="#mostrartodo" prefHeight="46.0" prefWidth="117.0" text="Mostrar" />
            <TextField fx:id="bq" layoutX="554.0" layoutY="417.0" prefHeight="25.0" prefWidth="149.0" />
            <Button fx:id="bqd" layoutX="758.0" layoutY="417.0" mnemonicParsing="false" onAction="#buscanm" prefHeight="25.0" prefWidth="155.0" text="BUSCAR NOMBRE" />
            <Button fx:id="bqape" layoutX="758.0" layoutY="458.0" mnemonicParsing="false" onAction="#buscaape" prefHeight="25.0" prefWidth="155.0" text="BUSCAR POR APELLIDO" />
            <TextField fx:id="bqa" layoutX="554.0" layoutY="458.0" />
            <ComboBox layoutX="159.0" layoutY="430.0" prefWidth="150.0" />
            <Label layoutX="15.0" layoutY="434.0" prefHeight="17.0" prefWidth="55.0" text="GENERO" />
            <MenuBar fx:id="menucombo" layoutY="3.0">
              <menus>
                <Menu mnemonicParsing="false" text="Agregar">
                  <items>
                    <MenuItem mnemonicParsing="false" onAction="#inicializacombo" text="Datos Cliente" />
                  </items>
                </Menu>
              </menus>
            </MenuBar>
            <Button fx:id="botonborrar" layoutX="758.0" layoutY="507.0" mnemonicParsing="false" onAction="#borraregistroid" prefHeight="25.0" prefWidth="155.0" text="BORRAR REGISTRO" />
            <TextField fx:id="borrar" layoutX="554.0" layoutY="507.0" />
            <DatePicker fx:id="mifecha" layoutX="158.0" layoutY="371.0" prefHeight="25.0" prefWidth="150.0" />
            <Label layoutX="15.0" layoutY="375.0" prefHeight="17.0" prefWidth="150.0" text="FECHA DE NACIMIENTO" />
         </children>
      </Pane>
   </children>
</AnchorPane>

1 Ответ

0 голосов
/ 19 октября 2018

Вы используете свойства JavaFX неправильно.Свойство для JavaFX Bean нуждается в геттере, сеттере (если доступно для записи) и свойстве геттера .Кроме того, сеттер не должен каждый раз создавать новое свойство;это должно быть значение существующего свойства.

Чтобы упростить ваш пример, если у нас есть Person с одним свойством, name, это будет выглядеть так:

public class Person {

    private final StringProperty name = new SimpleStringProperty(this, "name");

    public Person(String name) {
        setName(name);
    }

    public final void setName(String name) { // setter
        this.name.set(name);
    }

    public final String getName() { // getter
        return name.get();
    }

    public final StringProperty nameProperty() { // property getter
        return name;
    }

} 

Примечание: вы все равно можете инициализировать свойства в конструкторе, а не в объявлении поля, если хотите.

Использование свойства name в TableViewили TreeTableView вы просто вернете его в cellValueFactory.Пример использования TableView:

TableView<Person> table = new TableView<>();

TableColumn<Person, String> nameCol = new TableColumn<>("Name");
nameCol.setCellValueFactory(features -> features.getValue().nameProperty());
table.getColumns().add(nameCol);

Другая проблема с вашим кодом заключается в том, что вы используете raw ObjectProperty. Не используйте необработанные типы .Вместо этого вы должны использовать ObjectProperty<Date>, где Date равно java.sql.Date.Например:

public class Person {

    private final ObjectProperty<Date> clientDate = new SimpleObjectProperty<>(this, "clientDate");

    public final void setClientDate(Date clientDate) {
        this.clientDate.set(clientDate);
    }

    public final Date getClientDate() {
        return clientDate.get();
    }

    public final ObjectProperty<Date> clientDateProperty() {
        return clientDate;
    }

}

Примечание. Вероятно, было бы лучше использовать один из классов java.time (например, LocalDate, OffsetDateTime и т. Д.).

И снова, чтобы добавить его к TableView, он будет выглядеть так:

TableView<Person> table = new TableView<>();

TableColumn<Person, Date> clientDateCol= new TableColumn<>("Client Date");
clientDateCol.setCellValueFactory(features -> features.getValue().clientDateProperty());
table.getColumns().add(clientDateCol);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...