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