Java中的JTable表模型问题
我可以在Java中的JTable表模型问题,java,swing,jtable,Java,Swing,Jtable,我可以在JTable中毫无问题地显示我的数据,但当我想在应用程序运行时进行筛选时,JTable不会显示数据更改。我搜索了它,找到了一个名为TableModel的类,但我无法编写我的AbstractTableModel。有人能告诉我怎么做吗 Java package deneme.persistence; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.i
JTable
中毫无问题地显示我的数据,但当我想在应用程序运行时进行筛选时,JTable
不会显示数据更改。我搜索了它,找到了一个名为TableModel的类,但我无法编写我的AbstractTableModel。有人能告诉我怎么做吗
Java
package deneme.persistence;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
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;
import javax.persistence.Transient;
/**
*
* @author İbrahim AKGÜN
*/
@Entity
@Table(name = "PERSONELZ", catalog = "tksDB", schema = "dbo")
@NamedQueries({@NamedQuery(name = "Personelz.findAll", query = "SELECT p FROM Personelz p"), @NamedQuery(name = "Personelz.findByPersonelıd", query = "SELECT p FROM Personelz p WHERE p.personelıd = :personelıd"), @NamedQuery(name = "Personelz.findByAd", query = "SELECT p FROM Personelz p WHERE p.ad = :ad"), @NamedQuery(name = "Personelz.findBySoyad", query = "SELECT p FROM Personelz p WHERE p.soyad = :soyad")})
public class Personelz implements Serializable {
@Transient
private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Basic(optional = false)
@Column(name = "PERSONELID", nullable = false )
private Integer personelıd;
@Column(name = "AD", length = 50)
private String ad;
@Column(name = "SOYAD", length = 50)
private String soyad;
@Column(name = "YAS")
private Integer yas;
public Personelz() {
}
public Personelz(Integer personelıd) {
this.personelıd = personelıd;
}
public Integer getPersonelıd() {
return personelıd;
}
public void setPersonelıd(Integer personelıd) {
this.personelıd = personelıd;
}
public String getAd() {
return ad;
}
public void setAd(String ad) {
String oldAd = this.ad;
this.ad = ad;
changeSupport.firePropertyChange("ad", oldAd, ad);
}
public String getSoyad() {
return soyad;
}
public void setSoyad(String soyad) {
String oldSoyad = this.soyad;
this.soyad = soyad;
changeSupport.firePropertyChange("soyad", oldSoyad, soyad);
}
public Integer getYas() {
return yas;
}
public void setYas(Integer yas){
this.yas = yas;
}
表格模型
public class TableModel extends AbstractTableModel {
String[] headers;
List<Personelz> personel;
int row;
int column;
Object[][] per;
/** Creates a new instance of TableModel */
@SuppressWarnings("empty-statement")
public TableModel(List<Personelz> p) {
this.personel = p;
column=2;
row=this.personel.size();
headers=new String[column];
headers[0]="AD";
headers[1]="SOYAD";
per={p.toArray(),p.toArray()};
}
public int getColumnCount()
{
return column;
}
public int getRowCount()
{
return row;
}
public Object getValueAt(int rowIndex, int kolonindex)
{
return per[rowIndex][kolonindex];
}
public String getColumnName(int i)
{
return headers[i];
}
公共类TableModel扩展了AbstractTableModel{
字符串[]头;
名单人员;
int行;
int列;
对象[][]每;
/**创建TableModel的新实例*/
@SuppressWarnings(“空语句”)
公共表格模型(列表p){
这个人=p;
列=2;
行=this.personel.size();
headers=新字符串[列];
标题[0]=“AD”;
标题[1]=“SOYAD”;
per={p.toArray(),p.toArray()};
}
public int getColumnCount()
{
返回列;
}
public int getRowCount()
{
返回行;
}
公共对象getValueAt(int rowIndex,int kolonindex)
{
按[rowIndex][kolonindex]返回;
}
公共字符串getColumnName(int i)
{
返回标题[i];
}
我建议阅读本文(来自使用Swing组件的Java教程)
基本上,TableModel必须通过触发适当的事件来通知表已更改的数据。请参见我建议阅读此内容(来自使用Swing组件的Java教程)
基本上,TableModel必须通过触发适当的事件来通知表中已更改的数据。请参见
TableModelListener
您应该使用JTable
实现的TableModelListener接口。将表添加到TableModel后,调用相应的fireTableChanged()
-键入AbstractTableModel
实现的事件。这将强制更新JTable
当筛选操作返回时,您仍然需要实现一个方法来重置模型中的数据。您应该在此方法中调用fireTableChanged()
事件。当您触发table changed事件时,您还应该确保您处于AWT线程中。您应该使用TableModelListener
接口,该接口是您的JTable
实现的。将表添加到TableModel后,调用相应的fireTableChanged()
-键入AbstractTableModel
实现的事件。这将强制更新JTable
当筛选操作返回时,您仍然需要实现一个方法来重置模型中的数据。您应该在此方法中调用fireTableChanged()
事件。您还应该确保在触发表更改事件时处于AWT线程中。有一个非常好的名为glazedList的库,它使处理列表和表(包括列排序和行筛选)变得更加简单
绝对值得一看
HTH有一个非常好的名为glazedList的库,它使处理列表和表格变得非常简单,包括列排序和行过滤
绝对值得一看
HTH抖动是正确的。JTable侦听TableModel。TableModel在其状态发生更改时向其侦听器触发TableModelEvent。您可以扩展AbstractTableModel或使用DefaultTableModel,后者对管理侦听器和触发事件具有一定的支持。抖动是正确的。JTable侦听TableModel。TableModel在其状态发生更改时向其侦听器激发TableModelEvent。您可以扩展AbstractTableModel或使用DefaultTableModel,它对管理侦听器和激发事件具有一定的支持。