Import danych (string, int) z txt do JTable

2013-09-27 10:22
0

Cześć,
robię taki mały programik, który pozwala na zapis i odczyt danych (string, int) z pliku txt do JTable. Chodzi o zapis danych, których potrzebuje często, a Excel już nie spisuje się za dobrze.
O ile udało mi się zapisywać z JTable do txt, to z odczytem mam problem. dane zapisane na liście na pewno są odczytywane (pojawiają się w konsoli jak mam System.out.print). Nie wiem, co z tym mogę zrobić.

Nowe dane do JTable zapisuje najpierw do List<string>, potem mam taką metodę addrow (poniżej) i w ten sposób dodaje mi się nowy wiersz w JTable:

public void addRow(List rowData)
    {
        data.add(rowData);
        fireTableRowsInserted(data.size() - 1, data.size() - 1);
    }

Tak wygląda funkcja eksportująca dane do pliku txt (zapisują się wszystkie dane, łącznie z nagłówkami):

private void toExcel(JTable table, File file){
    try{
        BufferedWriter bfw = new BufferedWriter(new FileWriter(file));
        for(int i = 0 ; i < table.getColumnCount() ; i++)
        {
            bfw.write(table.getColumnName(i));
            bfw.write("\t");
        }

        for (int i = 0 ; i < table.getRowCount(); i++)
        {
        bfw.newLine();
        for(int j = 0 ; j < table.getColumnCount();j++)
            {
            bfw.write((String)(table.getValueAt(i,j)));
            bfw.write("\t");;
            }
        }
        bfw.close();

        }catch (Exception e1) { 
            System.out.println("Błąd!"+ e1.getMessage()); 
        }
    }

Tak wygląda funkcja odczytująca przy starcie programu dane :

public void importData(File file) {
    TableClass model = new TableClass();
    List<String> newdata = new ArrayList<String>();

    try{
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String line = null;

        while ((line = reader.readLine()) != null) 
        {
            newdata.add(line);
        }

        model.addRow(newdata);
        reader.close();
        } catch (IOException ex) {
            System.out.println("Błąd!"+ ex.getMessage()); 
        }
     }

A tak wywołuję odczyt danych z pliku:

public Table() {
    File fileimp = new File("results.txt");
    importData(fileimp);
    initialize();
}

Dziękuję za pomoc.

Nie stosuj prefiksów w tytułach wątków - od takich informacji są tagi; - furious programming 2013-09-27 13:33

Pozostało 580 znaków

2013-09-27 13:50
0

w funkcji importującej nie dzielisz linii na wartości. Chodzi o odpowiednik linii:

bfw.write("\t");

Który powinien wyglądać tak:

List<String[]> newdata = new ArrayList<String[]>();
//...
 newdata.add(line.split("\t"));

Pozostało 580 znaków

2013-09-30 16:23
0

Dziękuję za odpowiedź i zainteresowanie.

Niestety coś nie działa, w konsoli mam taki komunikat:

 [Ljava.lang.String;@4a65e0[Ljava.lang.String;@665753[Ljava.lang.String;@ef22f8

Jest to pewne związane z dodaniem przez Ciebie:

List<String[]> datalist = new ArrayList<String[]>();

Jak zapisuję do txt z JTable to zapisuję dane do:

 List<String> datalist = new ArrayList<String>(); 
trochę krotki ten komunikat.. - Koziołek 2013-09-30 18:28

Pozostało 580 znaków

2013-09-30 19:03
garai_nz
0

Pokaż jak wypisujesz dane... prawdopodobnie masz tam błąd

Sorki, czytałem od końca :)
Dobrze kombinujesz. Jest to związane z tym, że próbujesz wyświetlić całą tablicę a nie jej elementy. W tym momencie masz w liście obiekty(tablice Stringów) a nie Stringi

Pozostało 580 znaków

2013-10-08 11:35
0

Zmieniłam funkcję importującą do JTable i tabela wyswietla się poprawnie w konsoli, w JTable nadal pusto.

public void importData(File file) {
        TableClass model = new TableClass();
        List<String[]> newdata = new ArrayList<String[]>();

        try{
            BufferedReader in = new BufferedReader(new FileReader(file));
            String line = null;
            while ((line = in.readLine()) != null) 
            {
                String cells[] = line.split("\t");                          
                System.out.println(line);
                newdata.add(cells);
                model.addRow(newdata);
            }
            in.close();

            } catch (IOException ex) {
                    System.out.println("Błąd!"+ ex.getMessage()); 
        }
     }

Pozostało 580 znaków

2013-10-08 13:54
garai_nz
0

Twój kod jest trochę zbyt cząstkowy. Szukałbym odpowiedzi na Twoje pytanie w metodzie addRow. Proponuję skorzystać z konstruktora JTable np, który przyjmuje dwa Vectory. Jeden już masz z danymi z metody importData(zmień aby zwracała typ), drugi stwórz z nagłówków.

Pozostało 580 znaków

2013-10-08 15:23
gel
0

a nie chodzi przypadkiem jeszcze o repaint /redraw?

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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