JTable, zamiast odswiezyc dodaje ponizej

0

Witam, próbowałem już na różne sposoby - problem polega na tym, że zamiast odświeżyć zawartość JTable, zaktualizowane dane z MyTable ( która opiera się na AbstractTableModel, dane są po modyfikacji odświeżane fireTable~ - do tego momentu wszystko dziala idealnie) dodaje po poprzedniej zawartości. Problem pewnie leży gdzieś w repaincie, lecz nie mam pojęcia gdzie. Ogólny zarys jest taki, że dane wyświetlane są w klasie Magazyn extends JInternalFrame- JTable na scollPane , oddzielna klasa MagazynDzialania extends JInternalFrame zawiera guziki itp do usuwania/dodawania/modyfikowania tabeli. Także byłbym wdzięczny za wskazówkę, jak i gdzie umieścić coś, żeby odświeżało a nie dodawało dodatkowo do JTable...

0

Pokaż kod swojego modelu tabeli i sposób w jaki go podpinasz do tej tabeli.

0
 package nowa_wersja;

import java.sql.*;
import java.util.ArrayList;

import javax.swing.RepaintManager;
import javax.swing.table.AbstractTableModel;

public class MyTable extends AbstractTableModel{
	String[] nazwyKolumn = {"ID","Nazwa","Ilosc","Jed m.","Cena netto","Cena brutto","Sprzedawca"};
	int iloscKolumn = 7;
	Baza baza = new Baza();
	private Object[][] objekt(){
		ArrayList dane = null;
		try {
			dane = baza.Odczyt(iloscKolumn);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		Object[][] ob = new Object[dane.size()/iloscKolumn][iloscKolumn];
		int indeks = 0;
		for(int i = 0; i<dane.size()/iloscKolumn; i++){
			for(int j = 0; j<iloscKolumn; j++)
			{
				ob[i][j] = dane.get(indeks);
				indeks++;
			}
		}
		return ob;
	}
	private Object[][] data = objekt();
	@Override
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return nazwyKolumn.length;
	}

	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return data.length;
	}
	public String getColumnName(int col) {
        return nazwyKolumn[col];
    }
	@Override
	public Object getValueAt(int arg0, int arg1) {
		// TODO Auto-generated method stub
		return data[arg0][arg1];
	}
	@Override
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        return true;
    }

    @Override
    public void setValueAt(Object value, int row, int col) {
        data[row][col] = value;
        fireTableCellUpdated(row, col);
    }
    
    public void addRow(){
    	Object[][] newdata = new Object[data.length+1][iloscKolumn];	
    }
    
    public void deleteRow(int ID){
    	//Object[][] newdata = new Object[data.length-1][iloscKolumn];
    	ArrayList dane = null;
		try {
			baza.Usun(ID);
			dane = baza.Odczyt(iloscKolumn);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		Object[][] newdata = new Object[dane.size()/iloscKolumn][iloscKolumn];
		int indeks = 0;
		for(int i = 0; i<dane.size()/iloscKolumn; i++){
			for(int j = 0; j<iloscKolumn; j++)
			{
				newdata[i][j] = dane.get(indeks);
				indeks++;
			}
		}
		this.data = newdata;
		//fireTableDataChanged();
		fireTableRowsDeleted(0, dane.size());
    }
}

Podpinam go tu:

 package nowa_wersja;

import java.awt.BorderLayout;

import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class Magazyn extends JInternalFrame{
	JTable tabelka;
	MyTable myTable;
	JScrollPane scrollPane;
	Magazyn(){
		super("Magazyn", true, false, true, true);
		setSize(600,400);
		setLocation(30, 30);
		setLayout(new BorderLayout());
		setVisible(true);
		
		myTable = new MyTable();
		tabelka = new JTable(myTable);
		scrollPane = new JScrollPane(tabelka);
		add(scrollPane);
	}
	public MyTable setMytable(){
		return myTable;
	}
	public JTable setJTable(){
		return tabelka;
	}

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1