簡體   English   中英

JTable Java中的TableModel問題

[英]JTable TableModel problem in Java

我可以毫無問題地在JTable中顯示我的數據,但是當我想在我的應用程序運行時進行過濾時, JTable沒有顯示數據更改。 我搜索它並找到了一個名為 TableModel 的 class 但我無法編寫我的 AbstractTableModel。 誰能告訴我該怎么做?

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;

}

表格模型

 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];
 }

我建議閱讀如何使用表格(來自 Swing 組件的 Java 教程)

基本上,TableModel 必須通過觸發適當的事件來通知表更改的數據。 這里

有一個名為 GlazedLists 的非常好的庫,它使處理列表和表格(包括列排序和行過濾)變得更加簡單。

絕對值得一看。

http://publicobject.com/glazedlists/

HTH

您應該使用JTable實現的TableModelListener接口。 將表添加到 TableModel 后,調用AbstractTableModel實現的適當的fireTableChanged()類型事件。 這應該會強制您的JTable進行更新。

當您的過濾操作返回時,您仍然需要實施一種方法來重置 model 中的數據。 您應該在這個方法中調用您的fireTableChanged()事件。 您還應該確保在觸發表更改事件時處於 AWT 線程中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM