如何加载数据到Jtable
How to load data into Jtable
我一直在做一个小程序来测试java中jtable的保存和加载数据。
保存没有问题但无法加载数据。当我加载数据时 table 显示为空,里面什么也没有。请问我有什么建议吗!
这是代码:
public class NewOne extends JFrame {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
NewOne frame = new NewOne();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public NewOne() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JButton Button = new JButton("save");
Button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
saveTable();
}
});
Button.setBounds(10, 11, 89, 23);
contentPane.add(Button);
JButton Button1 = new JButton("load");
Button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loadTable();
}
});
Button1.setBounds(150, 11, 89, 23);
contentPane.add(Button1);
table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][] {
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
},
new String[] {
"New column", "New column", "New column", "New column", "New column"
}
));
table.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
table.setBounds(20, 45, 372, 80);
contentPane.add(table);
}
private JFileChooser myJFileChooser = new JFileChooser(new File("."));
private DefaultTableModel tableModel = new DefaultTableModel();
private JTable myJTable = new JTable(tableModel);
private JTable table;
private void saveTable() {
if (myJFileChooser.showSaveDialog(this) ==
JFileChooser.APPROVE_OPTION ) {
saveTable(myJFileChooser.getSelectedFile());
}
}
private void saveTable(File file) {
try {
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(file));
out.writeObject(tableModel.getDataVector());
out.writeObject(getColumnNames());
out.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
private Vector<String> getColumnNames() {
Vector<String> columnNames = new Vector<String>();
for (int i = 0; i < myJTable.getColumnCount(); i++)
columnNames.add(myJTable.getColumnName(i) );
return columnNames;
}
private void loadTable() {
if (myJFileChooser.showOpenDialog(this) ==
JFileChooser.APPROVE_OPTION )
loadTable(myJFileChooser.getSelectedFile());
}
private void loadTable(File file) {
try {
ObjectInputStream in = new ObjectInputStream(
new FileInputStream(file));
Vector rowData = (Vector)in.readObject();
Vector columnNames = (Vector)in.readObject();
tableModel.setDataVector(rowData, columnNames);
in.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
我猜你的问题出在这里:
private void saveTable(File file) {
try {
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(file));
out.writeObject(tableModel.getDataVector());
out.writeObject(getColumnNames());
out.close();
}
如果我没有看错你的代码,你的 tableModel
就是 new DefaultTableModel();
。根据文档:“DefaultTableModel()
构造一个默认的 DefaultTableModel,它是一个零列零行的 table。"
因此,您将一个空文件放入您的 OutputSream。
也许你只是用错了 table 毕竟你想得到你的 myJTable
的内容吗?如果这是真的,解决方案应该如下所示:
private void saveTable(File file) {
try {
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(file));
out.writeObject(myJTable.getDataVector());
out.writeObject(getColumnNames());
out.close();
}
如果我错了请纠正我。看国外代码好难 :P
我一直在做一个小程序来测试java中jtable的保存和加载数据。 保存没有问题但无法加载数据。当我加载数据时 table 显示为空,里面什么也没有。请问我有什么建议吗! 这是代码:
public class NewOne extends JFrame {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
NewOne frame = new NewOne();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public NewOne() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JButton Button = new JButton("save");
Button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
saveTable();
}
});
Button.setBounds(10, 11, 89, 23);
contentPane.add(Button);
JButton Button1 = new JButton("load");
Button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loadTable();
}
});
Button1.setBounds(150, 11, 89, 23);
contentPane.add(Button1);
table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][] {
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
},
new String[] {
"New column", "New column", "New column", "New column", "New column"
}
));
table.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
table.setBounds(20, 45, 372, 80);
contentPane.add(table);
}
private JFileChooser myJFileChooser = new JFileChooser(new File("."));
private DefaultTableModel tableModel = new DefaultTableModel();
private JTable myJTable = new JTable(tableModel);
private JTable table;
private void saveTable() {
if (myJFileChooser.showSaveDialog(this) ==
JFileChooser.APPROVE_OPTION ) {
saveTable(myJFileChooser.getSelectedFile());
}
}
private void saveTable(File file) {
try {
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(file));
out.writeObject(tableModel.getDataVector());
out.writeObject(getColumnNames());
out.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
private Vector<String> getColumnNames() {
Vector<String> columnNames = new Vector<String>();
for (int i = 0; i < myJTable.getColumnCount(); i++)
columnNames.add(myJTable.getColumnName(i) );
return columnNames;
}
private void loadTable() {
if (myJFileChooser.showOpenDialog(this) ==
JFileChooser.APPROVE_OPTION )
loadTable(myJFileChooser.getSelectedFile());
}
private void loadTable(File file) {
try {
ObjectInputStream in = new ObjectInputStream(
new FileInputStream(file));
Vector rowData = (Vector)in.readObject();
Vector columnNames = (Vector)in.readObject();
tableModel.setDataVector(rowData, columnNames);
in.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
我猜你的问题出在这里:
private void saveTable(File file) {
try {
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(file));
out.writeObject(tableModel.getDataVector());
out.writeObject(getColumnNames());
out.close();
}
如果我没有看错你的代码,你的 tableModel
就是 new DefaultTableModel();
。根据文档:“DefaultTableModel()
构造一个默认的 DefaultTableModel,它是一个零列零行的 table。"
因此,您将一个空文件放入您的 OutputSream。
也许你只是用错了 table 毕竟你想得到你的 myJTable
的内容吗?如果这是真的,解决方案应该如下所示:
private void saveTable(File file) {
try {
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(file));
out.writeObject(myJTable.getDataVector());
out.writeObject(getColumnNames());
out.close();
}
如果我错了请纠正我。看国外代码好难 :P