[英]JTable TableModel problem in Java
I can show my data in a JTable
without a problem, but when I want to filter while my app is running, the JTable
is not showing me data changes.我可以毫无问题地在
JTable
中显示我的数据,但是当我想在我的应用程序运行时进行过滤时, JTable
没有显示数据更改。 I searched for it and found a class named TableModel but I can't write my AbstractTableModel.我搜索它并找到了一个名为 TableModel 的 class 但我无法编写我的 AbstractTableModel。 Can anyone show me how I can do this?
谁能告诉我该怎么做?
Personelz.Java Personelz.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;
}
TABLEMODEL表格模型
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];
}
I suggest reading this How to Use Tables (from the Java Tutorials Using Swing Components)我建议阅读如何使用表格(来自 Swing 组件的 Java 教程)
Basically the TableModel has to notify the Table of changed data by firing the appropriate Events.基本上,TableModel 必须通过触发适当的事件来通知表更改的数据。 See here
看这里
There is a very good library called GlazedLists that makes it a lot simpler to work with lists and tables, including column sorting and row filtering.有一个名为 GlazedLists 的非常好的库,它使处理列表和表格(包括列排序和行过滤)变得更加简单。
Its definitely worth taking a look.绝对值得一看。
http://publicobject.com/glazedlists/ http://publicobject.com/glazedlists/
HTH HTH
You should utilize the TableModelListener
interface, which your JTable
implements.您应该使用
JTable
实现的TableModelListener
接口。 Once you add your table to your TableModel, call the appropriate fireTableChanged()
-type event that AbstractTableModel
implements.将表添加到 TableModel 后,调用
AbstractTableModel
实现的适当的fireTableChanged()
类型事件。 This should force your JTable
to update.这应该会强制您的
JTable
进行更新。
You will still need to implement a method to reset your data in your model when your filter operation returns.当您的过滤操作返回时,您仍然需要实施一种方法来重置 model 中的数据。 it should be in this method that you call your
fireTableChanged()
event.您应该在这个方法中调用您的
fireTableChanged()
事件。 you also should ensure that you are in the AWT thread when you fire the table changed event.您还应该确保在触发表更改事件时处于 AWT 线程中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.