2014-05-20 2 views
0

Я хочу сохранить изменения, которые сделаны в таблице, а затем, когда я хочу загрузить его. Я буду иметь возможность каждый раз, когда я перезапускаю программу. Вот мой код до сих пор (Обратите внимание, что я искал ответ на это, но я не лучший в Java):Как сохранить JTable после внесения изменений

import java.awt.Color; 
import java.awt.Component; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Vector; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableCellRenderer; 


public class Table2 extends JFrame implements ActionListener{ 


//String[] colomn = {"Name","Age","Gender"}; 
Object[][] data = {{"John","20","Male"}}; 
JTable table = new JTable(new DefaultTableModel(data, new Object[]{"Name", "Age","Gender"})){ 

    public Component prepareRenderer(TableCellRenderer r, int data, int col){ //gives a pattern to the table cells. 
     Component c = super.prepareRenderer(r, data, col); 

     if(data % 2 == 0){ 
      c.setBackground(Color.PINK); 
     } 
     else{ 
      c.setBackground(Color.LIGHT_GRAY); 
     } 
     return c; 
    } 

}; 


//JTable table = new JTable(data,colomn); 

public Table2(){ 

    table.setPreferredScrollableViewportSize(new Dimension(300,200)); 
    table.setFillsViewportHeight(true); 

    JScrollPane scrollpane = new JScrollPane(table); 
    add(scrollpane); 
} 

public static void main(String[] args) { 

    Table2 table = new Table2(); 
    table.setLayout(new FlowLayout()); 
    table.setVisible(true); 
    table.setSize(400,300); 
    table.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    table.setResizable(false); 
    table.setTitle("Table Prictice on JFrame"); 
    //table.pack(); 

    JButton button = new JButton("Add"); 
    table.add(button); 
    button.addActionListener(table); 
} 

public void actionPerformed(ActionEvent e) { 

    DefaultTableModel model = (DefaultTableModel) table.getModel(); 
    model.addRow(new Object[]{"", "", ""}); 
    System.out.println("Action Performed!"); 
} 

} 
+1

Вам нужно место для хранения изменения. Файл или база данных являются наиболее распространенными решениями. –

ответ

0

Вы можете сохранить массив данных с ObjectOutputStream в двоичный файл, и вы можете прочитайте его оттуда. Для сохранения вы можете использовать что-то вроде этого:

ObjectOutputStream outstream = new ObjectOutputStream(new FileOutputStream("filename")); 
     outstream.writeObject(data); 
     outstream.close(); 

Для чтения вы можете использовать:

ObjectInputStream instream = new ObjectInputStream(newFileInputStream("filename")); 
     Object[][] data = (Object[][]) instream.readObject(); 
     instream.close(); 

Чтобы принять измененные данные взглянуть на How to Retrieve JTable Data as an Array

+0

Возможно, стоит отметить, что для того, чтобы это сработало, объект, который вы пишете в потоке, должен реализовать интерфейс 'java.io.Serializable'. – JonK

Смежные вопросы