import javax.swing.JFrame;
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.util.Vector;
import javax.swing.table.*;
import java.awt.event.*;
public class WorkTable extends JFrame {
private String[] columnName={"date","work","study at home","the state of complication"};
private Object[][] rowData={};
private DefaultTableModel tm=new DefaultTableModel(rowData,columnName);
private JTable jt=new JTable(tm);
private JButton jbar=new JButton("add new row");
private JButton jbac=new JButton("add new column");
private JButton jbdr=new JButton("delete selected row");
private JButton jbdc=new JButton("delete selected column");
private JButton jbs=new JButton("save");
private JButton jbc=new JButton("clear");
private JButton jbr=new JButton("restore");
private JComboBox jcb=new JComboBox(new String[]
{"SINGLE_SELECTION","SINGLE_INTERVAL_SELECTION",
"MULTIPLE_INTERVAL_SELECTION"});
private JCheckBox jcbr=new JCheckBox("RowSelectionAllowed",true);
private JCheckBox jcbc=new JCheckBox("ColumnSectionAllowed",false);
public WorkTable(){
setTitle("work table");
setSize(800,400);
JPanel jp1=new JPanel();
jp1.setLayout(new GridLayout(2,2));
jp1.add(jbar);
jp1.add(jbac);
jp1.add(jbdr);
jp1.add(jbdc);
JPanel jp2=new JPanel();
jp2.add(jbs);
jp2.add(jbc);
jp2.add(jbr);
JPanel jp3=new JPanel();
jp3.setLayout(new BorderLayout(5,0));
jp3.add(new JLabel("Selection Mode"),BorderLayout.WEST);
jp3.add(jcb,BorderLayout.CENTER);
JPanel jp4=new JPanel();
jp4.setLayout(new FlowLayout(FlowLayout.LEFT));
jp4.add(jcbr);
jp4.add(jcbc);
JPanel jp5=new JPanel();
jp5.setLayout(new GridLayout(2,1));
jp5.add(jp3);
jp5.add(jp4);
JPanel jp6=new JPanel();
jp6.setLayout(new BorderLayout());
jp6.add(jp1,BorderLayout.SOUTH);
jp6.add(jp2,BorderLayout.CENTER);
getContentPane().add(jp5,BorderLayout.NORTH);
getContentPane().add(new JScrollPane(jt),BorderLayout.CENTER);
getContentPane().add(jp6,BorderLayout.SOUTH);
jt.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jbar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
tm.addRow(new java.util.Vector());
}
});
jbac.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String name=JOptionPane.showInputDialog("new column name");
tm.addColumn(name,new java.util.Vector());
}
});
jbdr.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(jt.getSelectedRow()>0)
tm.removeRow(jt.getSelectedRow());
}
});
jbdc.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(jt.getSelectedColumn()>0){
TableColumnModel cm=jt.getColumnModel();
TableColumn tc=cm.getColumn(jt.getSelectedColumn());
cm.removeColumn(tc);
}
}
});
jbs.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
ObjectOutputStream out=
new ObjectOutputStream(new FileOutputStream("tm.dat"));
out.writeObject(tm.getDataVector());
out.writeObject(getColumnNames());
out.close();
}
catch(IOException ex){
ex.printStackTrace();
}
}
});
jbc.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
tm.setRowCount(0);
}
});
jbr.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
ObjectInputStream in=
new ObjectInputStream(new FileInputStream("tm.dat"));
Vector rowData=(Vector)in.readObject();
Vector columnNames=(Vector)in.readObject();
tm.setDataVector(rowData, columnNames);
in.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
});
jcbr.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
jt.setRowSelectionAllowed(jcbr.isSelected());
}
});
jcbc.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
jt.setColumnSelectionAllowed(jcbc.isSelected());
}
});
jcb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String si=(String)jcb.getSelectedItem();
if(si.equals("SINGLE_SELECTION"))
jt.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
else if(si.equals("SINGLE_INTERVAL_SELECTION"))
jt.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
else if(si.equals("MULTIPLE_INTERVAL_SELECTION"))
jt.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private Vector getColumnNames(){
Vector columnNames=new Vector();
for(int i=0;i<jt.getColumnCount();i++)
columnNames.add(tm.getColumnName(i));
return columnNames;
}
public static void main(String arg[]){
WorkTable wt=new WorkTable();
wt.setVisible(true);
}
}