将一个 JTable 替换为另一个(导入)Java
Replace one JTable by other (Import) 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();
}
这里的问题是,当我进行导入和 select 包含 Jtable 数据的文件时,实际 Table 导入的文件没有变化,我如何进行转换?
这里是将 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);
}
}
}
}
data = new DefaultTableModel(vectorData, columNames);
table = new JTable(data);
您正在创建一个新的 TableModel 和一个新的 JTable。
问题是您从未将新的 table 添加到 GUI。您不能只更改对 "table" 变量的引用并期望将 table 添加到 GUI。
因此解决方案是不创建新的 JTable。相反,您只需重置现有 JTable 的 TableModel:
data = new DefaultTableModel(vectorData, columNames);
table.setModel( data );
基本上,当您想要更改数据时,您不应该创建新的 Swing 组件。换个型号就好了
编辑:
查看 Saving content of Interactive JTable to .txt file to read it upon next run 的解决方案,让您 save/restore 成为 table。
我正在尝试用存储在文件中的相同特征替换另一个已经用矢量数据的相应向量定义的 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();
}
这里的问题是,当我进行导入和 select 包含 Jtable 数据的文件时,实际 Table 导入的文件没有变化,我如何进行转换?
这里是将 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);
}
}
}
}
data = new DefaultTableModel(vectorData, columNames);
table = new JTable(data);
您正在创建一个新的 TableModel 和一个新的 JTable。
问题是您从未将新的 table 添加到 GUI。您不能只更改对 "table" 变量的引用并期望将 table 添加到 GUI。
因此解决方案是不创建新的 JTable。相反,您只需重置现有 JTable 的 TableModel:
data = new DefaultTableModel(vectorData, columNames);
table.setModel( data );
基本上,当您想要更改数据时,您不应该创建新的 Swing 组件。换个型号就好了
编辑:
查看 Saving content of Interactive JTable to .txt file to read it upon next run 的解决方案,让您 save/restore 成为 table。