当tableview必须显示一个类中的数据(例如Servicios)时,它就可以正常完成。当我必须从一个类访问另一个类时,问题出现了。在这种情况下,TableView显示来自第一个类的数据,但不显示来自第二个类的数据。我不知道为什么。这是我的代码。
package mrpuppy.entity;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="tarifa")
public class Tarifa
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@OneToMany(mappedBy = "tarifa")
private List<Servicio> servicios = new ArrayList<Servicio>();
@Column(name="precio")
private float precio;
@Column(name="descuento")
private float descuento;
@Column(name="fecha_inicio")
private Date fechaInicio;
@Column(name="fecha_fin")
private Date fechaFin;
public Long getId()
{
return id;
}
public List<Servicio> getServicios()
{
return servicios;
}
public void setServicios(List<Servicio> servicios)
{
this.servicios = servicios;
}
public float getPrecio()
{
return precio;
}
public void setPrecio(float precio)
{
this.precio = precio;
}
public float getDescuento()
{
return descuento;
}
public void setDescuento(float descuento)
{
this.descuento = descuento;
}
public Date getFechaInicio()
{
return fechaInicio;
}
public void setFechaInicio(Date fechaInicio)
{
this.fechaInicio = fechaInicio;
}
public Date getFechaFin()
{
return fechaFin;
}
public void setFechaFin(Date fechaFin)
{
this.fechaFin = fechaFin;
}
}
package mrpuppy.entity;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name="servicio")
public class Servicio
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name="id_tarifa")
private Tarifa tarifa;
@Column(name="nombre")
private String nombre;
@Column(name="raza")
private String raza;
@OneToOne(mappedBy="servicio", cascade = {CascadeType.ALL})
private CitaServicio citaServicio;
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public Tarifa getTarifa()
{
return tarifa;
}
public void setTarifa(Tarifa tarifa)
{
this.tarifa = tarifa;
}
public String getNombre()
{
return nombre;
}
public void setNombre(String nombre)
{
this.nombre = nombre;
}
public String getRaza()
{
return raza;
}
public void setRaza(String raza)
{
this.raza = raza;
}
public CitaServicio getCitaServicio()
{
return citaServicio;
}
public void setCitaServicio(CitaServicio citaServicio)
{
this.citaServicio = citaServicio;
}
}
package mrpuppy.controller.tarifas;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import mrpuppy.entity.Servicio;
import mrpuppy.entity.Tarifa;
import mrpuppy.service.TarifaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
@Controller
public class TarifasControllerImpl implements TarifasController
{
private Stage primaryStage;
private Scene scene;
private final String css = this.getClass().getResource("/css/tarifas.css").toExternalForm();
@Autowired
private AnadirTarifaController anadirTarifaController;
@Autowired
private TarifaService tarifaService;
@FXML
private TableView<Servicio> tablaServicios;
@FXML
private TableColumn<Servicio, String> columnServicio;
@FXML
private TableColumn<Tarifa, Float> columnTarifa;
@FXML
private TableColumn<Tarifa, Float> columnDescuento;
@FXML
private ComboBox<String> comboRaza;
@FXML
private Button buttonAnadir;
@FXML
private Button buttonMostrar;
@Override
public void openWindow()
{
try
{
primaryStage = new Stage();
primaryStage.setResizable(false);
FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/tarifas.fxml"));
loader.setController(this); //Establecemos esta clase como "controller"
scene = loader.load();
scene.getStylesheets().add(css);
primaryStage.setScene(scene);
primaryStage.show();
ObservableList<String> oListRazas;
oListRazas = tarifaService.obtenerRazas();
comboRaza.setItems(oListRazas);
buttonAnadir.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent event)
{
anadirTarifaController.openWindow();
}
});
buttonMostrar.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent event)
{
Collection<Servicio> lista = new ArrayList<Servicio>();
String raza = comboRaza.getValue();
lista = tarifaService.buscarServicios(raza);
mostrarDatos(lista);
}
});
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
}
private void mostrarDatos(Collection<Servicio> lista)
{
ObservableList<Servicio> servicioData = FXCollections.observableArrayList();
for(Servicio servicio : lista)
{
servicioData.add(servicio);
}
columnServicio.setCellValueFactory(new PropertyValueFactory<Servicio, String>("nombre"));
columnTarifa.setCellValueFactory(new PropertyValueFactory<Tarifa, Float>("precio"));
columnDescuento.setCellValueFactory(new PropertyValueFactory<Tarifa, Float>("descuento"));
tablaServicios.setItems(servicioData);
}
}
答案 0 :(得分:1)
通过
window.onload
你的tableview将呈现private TableView<Servicio> tablaServicios;
个对象,所以逻辑上tablecolumns应该呈现Servicio对象的一些字段/部分。例如
Servicio
等。但是,您尝试在该表中呈现private TableColumn<Servicio, String> columnNombre;
private TableColumn<Servicio, String> columnRaza;
对象。这是不可能的。而不是
Tarifa
将其定义为
private TableColumn<Tarifa, Float> columnDescuento;
...
columnDescuento.setCellValueFactory(new PropertyValueFactory<Tarifa, Float>("descuento"));
为他人做同样的事。