Wczytanie pliku przed narysowaniem tabelki?

0

Witam,
chciałbym na prosić o wyrozumiałość, ponieważ jestem w trakcie pisania swojej pierwszej aplikacji i wielu rzeczy jeszcze nie rozumiem, wielu muszę się nauczyć. Problem jest następujący - nie wyświetla mi się komponent JTable, ponieważ w jego konstruktorze użyłem łańcucha, który na początku nie ma przypisanej wartości. Wartość tę przypisuje dopiero JFileChooser po wybraniu odpowiedniego pliku przez użytkownika. Jak wywołać ponowne narysowanie tabeli? Próbowałem już repaint() i revalidate(), niestety bez skutku.
Kod jTable:
[code]
try {
FileReader fin = new FileReader(bazaCSV);
jTable1.setAutoCreateRowSorter(true);
jTable1.setModel(baza.createTableModel(fin,
new Vector<Object>(Arrays.asList(
new String[] { "Nazwa", "kcal", "białko", "węglowodany", "tłuszcze" }))));
jTable1.setColumnSelectionAllowed(true);
jScrollPane2.setViewportView(jTable1);
} catch (Exception e) {
e.printStackTrace();
}
[/code]
Metoda CreateTableModel
[code]
public static DefaultTableModel createTableModel(Reader in,
Vector<Object> headers) {
DefaultTableModel model = null;
Scanner s = null;

    try {
        Vector<Vector<Object>> rows = new Vector<Vector<Object>>();
        s = new Scanner(in);

        while (s.hasNextLine()) {
            rows.add(new Vector<Object>(Arrays.asList(s.nextLine()
                            .split("\\s*,\\s*", -1))));
        }

        if (headers == null) {
            headers = rows.remove(0);
            model = new DefaultTableModel(rows, headers);
        } else {
            model = new DefaultTableModel(rows, headers);
        }

        return model;
    } finally {
        s.close();
    }
}

[/code]
Akcja przycisku "otwórz"
[code]
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
otworz.setCurrentDirectory(new File("."));
int result = otworz.showOpenDialog(Main.this);
if (result == JFileChooser.APPROVE_OPTION) {
bazaCSV = otworz.getSelectedFile().getAbsolutePath();
}
}
[/code]

1

Może byś tak łaskawie napisał, który argument konstruktora ma wartość null. W rachubę wchodzą metody doLayout() dla JTable i fireTableDataChanged() dla modelu.

0

@up
Przepraszam, string bazaCSV ma początkowo wartość null, dopóki user nie wybierze konkretnego pliku. Metodom doLayout() i fireTableDataChanged() zaraz się przyjrzę

Edit:
Problem rozwiązany. Nie wiem czy zrobiłem to prawidłowo i zgodnie z konwencją Javy, ale przeniosłem cały blok try jako instrukcje dla warunku if result = APPROVE_OPTION

0

Ja się zastanawiałem, po jakie licho tworzysz JTable i Model zależne od pliku, przed wybraniem tego pliku.

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