Witam,
mam problem z usuwaniem wierszy po posortowaniu tabeli. Pojedyncze wiersze usuwają się ok, ale gdy chcę wyczyścić całą zawartość tabeli, to usuwam tylko część z nich (trzeba klikać kilka razy). Pewnie problem leży w różnicy indeksowaniu modelu i widoku, ale jakoś nie mogę sam tego problemu rozwiązać. Poniżej przykładowy kod:
import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
class Przykałd
{
public static void main(String args[])
{
Okno ramka=new Okno();
ramka.setTitle("Przykład");
ramka.setResizable(false);
ramka.setDefaultCloseOperation(3);
ramka.setVisible(true);
}
}
class Okno extends JFrame implements ActionListener
{
DefaultTableModel model;
JTable tabela;
JScrollPane suwak;
JButton dodaj, usun, usun_all;
JTextField imie, nazwisko;
public Okno()
{
setSize(850,320);
setLayout(null);
String data[][]={};
String col[]={"Imię","Nazwisko"};
model=new DefaultTableModel(data,col);
tabela=new JTable(model)
{
public boolean isCellEditable(int wiersz, int kolumna){return false;}
};;
tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
suwak = new JScrollPane(tabela);
suwak.getViewport().setBackground(Color.white);
suwak.setBounds(25,25,800,200);
tabela.setAutoCreateRowSorter(true);
add(suwak);
imie=new JTextField();
imie.setBounds(25,240,100,25);
add(imie);
nazwisko=new JTextField();
nazwisko.setBounds(125,240,100,25);
add(nazwisko);
dodaj=new JButton("Dodaj");
dodaj.setBounds(225,240,100,25);
add(dodaj);
usun=new JButton("Usun");
usun.setBounds(425,240,100,25);
add(usun);
usun_all=new JButton("Usun_all");
usun_all.setBounds(725,240,100,25);
add(usun_all);
dodaj.addActionListener(this);
usun.addActionListener(this);
usun_all.addActionListener(this);
}
public void actionPerformed(ActionEvent akcja)
{
if(akcja.getSource().equals(dodaj))
{
model.insertRow(0,new Object[]{imie.getText(),nazwisko.getText()});
}
if(akcja.getSource().equals(usun))
{
if(tabela.getSelectedRow()>=0)
{
model.removeRow(tabela.convertRowIndexToModel(tabela.getSelectedRow()));
}
}
if(akcja.getSource().equals(usun_all))
{
int i=0;
while(i<tabela.getRowCount())
{
model.removeRow(tabela.convertRowIndexToModel(i));
i=i+1;
}
tabela.repaint();
}
}
}