我的程序显示一个包含 3 列的表格。当我单击列的标题时,TableView 的内容没有被排序。
如果我从本教程中理解正确(请参阅按列排序数据),我不需要执行任何特殊实现即可使用表的排序机制。
FXML:
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="br.meuspila.javafx.ListarCorretorasController">
<children>
<TableView fx:id="tabelaCorretoras" prefHeight="400.0" prefWidth="600.0">
<columns>
<TableColumn prefWidth="150.0" text="Nome" fx:id="colunaNome" />
<TableColumn prefWidth="75.0" text="Código" fx:id="colunaCodigo" />
<TableColumn prefWidth="200.0" text="Descrição" fx:id="colunaDescricao" />
</columns>
</TableView>
</children>
</AnchorPane>
控制器:
package br.meuspila.javafx;
import br.meuspila.db.Corretora;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
/**
* FXML Controller class
*/
public class ListarCorretorasController implements Initializable {
@FXML // fx:id="tabelaCorretoras"
private TableView<Corretora> tabelaCorretoras; // Value injected by FXMLLoader
@FXML // fx:id="colunaNome"
private TableColumn<Corretora,String> colunaNome; // Value injected by FXMLLoader
@FXML // fx:id="colunaCodigo"
private TableColumn<Corretora,String> colunaCodigo; // Value injected by FXMLLoader
@FXML // fx:id="colunaDescricao"
private TableColumn<Corretora,String> colunaDescricao; // Value injected by FXMLLoader
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
colunaNome.setCellValueFactory(new PropertyValueFactory<Corretora,String>("nome"));
colunaCodigo.setCellValueFactory(new PropertyValueFactory<Corretora,String>("codigo"));
colunaDescricao.setCellValueFactory(new PropertyValueFactory<Corretora,String>("descricao"));
ObservableList<Corretora> list = FXCollections.observableArrayList();
Corretora c1 = new Corretora();
c1.setNome("RICO");
c1.setCodigo("1234");
c1.setDescricao("Testando, 123");
list.add(c1);
Corretora c2 = new Corretora();
c2.setNome("MIRAE");
c2.setCodigo("4321");
c2.setDescricao("Mirae 123 testando");
list.add(c2);
tabelaCorretoras.setItems(list);
}
}
实体/模型:
package br.meuspila.db;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
@Entity
@Table(name = "CORRETORA")
@NamedQueries({
@NamedQuery(name = "Corretora.findAll", query = "SELECT c FROM Corretora c"),
@NamedQuery(name = "Corretora.findById", query = "SELECT c FROM Corretora c WHERE c.id = :id"),
@NamedQuery(name = "Corretora.findByNome", query = "SELECT c FROM Corretora c WHERE c.nome = :nome"),
@NamedQuery(name = "Corretora.findByCodigo", query = "SELECT c FROM Corretora c WHERE c.codigo = :codigo"),
@NamedQuery(name = "Corretora.findByDescricao", query = "SELECT c FROM Corretora c WHERE c.descricao = :descricao")})
public class Corretora implements EntityInterface<Corretora>, Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "ID")
private Long id;
@Basic(optional = false)
@Column(name = "NOME")
private String nome;
@Column(name = "CODIGO")
private String codigo = "";
@Column(name = "DESCRICAO")
private String descricao = "";
public Corretora() {
}
public Corretora(Long id) {
this.id = id;
}
public Corretora(Long id, String nome) {
this.id = id;
this.nome = nome;
}
@Override
public Long getId() {
return id;
}
@Override
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Corretora)) {
return false;
}
Corretora other = (Corretora) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.meuspila.entity.Corretora[ id=" + id + " ]";
}
@Override
public Corretora clone() {
Corretora copy = new Corretora();
copy.setCodigo(this.getCodigo());
copy.setDescricao(this.getDescricao());
copy.setId(this.getId());
copy.setNome(this.getNome());
return copy;
}
}