문제

내 데이터를 a로 표시 할 수 있습니다 JTable 문제가 없지만 앱이 실행중인 동안 필터링하고 싶을 때 JTable 나에게 데이터 변경을 보여주지 않습니다. 나는 그것을 검색하고 TableModel이라는 클래스를 찾았지만 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;

}

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];
 }
도움이 되었습니까?

해결책

나는 이것을 읽는 것이 좋습니다 테이블 사용 방법 (스윙 구성 요소를 사용한 Java 튜토리얼에서)

기본적으로 Tablemodel은 적절한 이벤트를 발사하여 변경된 데이터 테이블에 알려야합니다. 보다 여기

다른 팁

GlazedLists라는 매우 좋은 라이브러리가있어 열 정렬 및 행 필터링을 포함하여 목록 및 테이블로 작업하기가 훨씬 간단합니다.

분명히 살펴볼 가치가 있습니다.

http://publicobject.com/glazedlists/

HTH

당신은 그것을 활용해야합니다 TableModelListener 인터페이스 JTable 구현. 테이블에 테이블을 추가하면 적절한 fireTableChanged()-유형 이벤트 AbstractTableModel 구현. 이것은 당신의 강제를 강요해야합니다 JTable 업데이트하려면.

필터 작동이 반환 될 때 모델에서 데이터를 재설정하는 메소드를 구현해야합니다. 이 방법으로는 당신이 당신을 호출해야합니다. fireTableChanged() 이벤트. 또한 테이블 변경 이벤트를 발사 할 때 AWT 스레드에 있는지 확인해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top