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]