Заменить одну JTable другой (импорт) Java
Я пытаюсь заменить одну Jtable, уже определенную этим соответствующим вектором векторных данных, на другие с теми же характеристиками, которые хранятся в файле. Вот мой код:
else if (e.getActionCommand().equals("import"))
{
JFileChooser file = new JFileChooser();
int i = file.showOpenDialog(this);
if(i == JFileChooser.APPROVE_OPTION)
{
File f = file.getSelectedFile();
String filePath = f.getPath();
try
{
ObjectInputStream input = new ObjectInputStream(new FileInputStream(filePath));
Vector vectorData = (Vector)input.readObject();
data = new DefaultTableModel(vectorData, columNames);
table = new JTable(data);
labelStatus.setText("Archivo exitosamente importado.");
} catch (FileNotFoundException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
Проблема здесь в том, что когда я делаю импорт и выбираю файл, который содержит данные Jtable, фактическую таблицу не изменяет импортируемая, как я могу сделать Switch?
Вот код, где Jtable добавляется в ContentPane(Jpanel):
//data & columnNames are the data tha i used originally with the old Jtable
DefaultTableModel model = new DefaultTableModel(data, columnNames);
table = new JTable(model);
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); //Sorter Descending or Ascending the data.
table.setRowSorter(sorter);
JScrollPane scrollTable = new JScrollPane(table);
scrollTable.setBounds(22, 78, 764, 177);
scrollTable.setViewportView(table);
contentPane.add(scrollTable);
Примечание: я использую одну Jtable, DefaaultTableModel, использую ее как глобальную переменную и ссылаюсь на метод Import, чтобы изменить odl на новый, но использую тот же.
Новое обновление, весь функциональный код:
public class Demo extends JFrame implements ActionListener
{
private JPanel contentPane;
DefaultTableModel data;
JTable table;
Vector<String> dataRow;
Vector<String> columnNames;
JScrollPane scrollTable;
public Demo() throws FileNotFoundException, IOException, ClassNotFoundException
{
columnNames = new Vector<>();
columnNames.addElement("Name");
columnNames.addElement("Cc");
columnNames.addElement("Age");
columnNames.addElement("Phone");
columnNames.addElement("Date");
columnNames.addElement("Amount");
ObjectInputStream in = new ObjectInputStream(new FileInputStream("C:/Users/Harry/Desktop/AA gym Database.txt"));
Vector data = (Vector)in.readObject(); //Add try catch instead of THROWS DECLARATION.
//rowData
DefaultTableModel model = new DefaultTableModel(data, columnNames);
table = new JTable(model);
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); //Sorter Descending or Ascending the data.
table.setRowSorter(sorter);
scrollTable = new JScrollPane(table);
scrollTable.setBounds(22, 78, 764, 177);
scrollTable.setViewportView(table);
contentPane.add(scrollTable);
public void actionPerformed(ActionEvent e)
{
else if (e.getActionCommand().equals("import"))
{
JFileChooser file = new JFileChooser();
int i = file.showOpenDialog(this);
if(i == JFileChooser.APPROVE_OPTION)
{
File f = file.getSelectedFile();
String filePath = f.getPath();
try
{
ObjectInputStream input = new ObjectInputStream(new FileInputStream(filePath));
Vector vectorData = (Vector)input.readObject();
data = new DefaultTableModel(vectorData, columnNames);
table.setModel(data);
}
}
}
}
1 ответ
data = new DefaultTableModel(vectorData, columNames);
table = new JTable(data);
Вы создаете новую TableModel и новый JTable.
Проблема в том, что вы никогда не добавляете новую таблицу в графический интерфейс. Вы не можете просто изменить ссылку на переменную table и ожидать, что таблица будет добавлена в GUI.
Таким образом, решение состоит в том, чтобы НЕ создавать новый JTable. Вместо этого вы просто сбрасываете TableModel существующей JTable:
data = new DefaultTableModel(vectorData, columNames);
table.setModel( data );
По сути, вам не следует создавать новые компоненты Swing, когда вы хотите изменить данные. Просто поменяй модель.
Редактировать:
Проверьте Сохранение содержимого Interactive JTable в файл.txt, чтобы прочитать его при следующем запуске, чтобы найти решение, которое позволит вам сохранить / восстановить таблицу.