JTable, problem z sortowaniem

Odpowiedz Nowy wątek
2011-08-12 13:29
0

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();
        }
    }
}
edytowany 1x, ostatnio: pemo84, 2011-08-12 13:32

Pozostało 580 znaków

2011-08-12 15:27
0

Ok, udało mi się rozwiązać problem w następujący sposób:

 
if(akcja.getSource().equals(usun_all))
        {
            int i=0;
            int j=tabela.getRowCount();
            while(i<j)
            {
                model.removeRow(tabela.convertRowIndexToModel(tabela.getRowCount()-1));
                i=i+1;
            }
        }

Ale mam jeszcze jedno pytanie, jak nie stosuję sortowania w tabeli, to do usunięcia wszystkich wierszy wystarczy:

model.getDataVector().removeAllElements();

czy opisany problem można rozwiązać w podobny sposób?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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