使用DefaultTableModel向保存的JTable添加行

时间:2018-10-25 15:19:39

标签: jtable jbutton actionlistener objectinputstream objectoutputstream

public class testio
{

  public static void main(String[] args)
  {

   frame = new JFrame();
   frame.setSize(500 , 1500);

   panel = new JPanel();

   deftabmod = new DefaultTableModel();
   deftabmod.addColumn("Column1");
   deftabmod.addColumn("Column2");
   deftabmod.addColumn("Column3");

   table = new JTable(deftabmod);

   scrollpane = new JScrollPane(table);
   panel.add(scrollpane);

   deftabmod1 = new DefaultTableModel();
   deftabmod1.addColumn("Column1");
   deftabmod1.addColumn("Column2");
   deftabmod1.addColumn("Column3");

   table1 = new JTable(deftabmod1);

   scrollpane1 = new JScrollPane(table1);
   panel.add(scrollpane1);

   textfield = new JTextField(20);
   panel.add(textfield);

   button_add_row = new JButton("Add Row");
   button_add_row.setPreferredSize( new Dimension( 200 , 25 ) );
   panel.add(button_add_row);
   button_add_row.addActionListener( new button_add_row_actionListener() );

   button_save = new JButton("Save");
   button_save.setPreferredSize( new Dimension( 200 , 25 ) );
   panel.add(button_save);
   button_save.addActionListener( new button_save_actionListener() );

   button_append = new JButton("Append");
   button_append.setPreferredSize( new Dimension( 200 , 25 ) );
   panel.add(button_append);
   button_append.addActionListener( new button_append_actionlistener() );

   frame.add(panel);
   frame.setVisible(true);

  }

}

上面是带有主要方法的简单Java代码。此类包含一个JTextField 这需要用户输入。接下来是一个JButton“添加行”,它从文本字段中获取String并将其添加到JTable中。下一个Jbutton“保存”将JTable的所有数据保存到文件中,下一个JTable显示已保存的数据。

    public class button_add_row_actionListener implements ActionListener
{
    Vector<String> addrow;

    @Override
    public void actionPerformed(ActionEvent e)
    {

    addrow = new Vector<String>();
    addrow.addElement(testio.textfield.getText().toString() + " 1");
    addrow.addElement(testio.textfield.getText().toString() + " 2");
    addrow.addElement(testio.textfield.getText().toString() + " 3");
    testio.deftabmod.addRow(addrow);

    testio.textfield.setText(null);

    }

}
    }

此(上)addrow类成功将行添加到JTable。

    public class button_save_actionListener implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        try
        {

        file.createNewFile();
        ObjectOutputStream objectoutputstream = new ObjectOutputStream(new FileOutputStream(file)); 
        objectoutputstream.writeObject(testio.table.getModel());
        objectoutputstream.close();

        }

        catch(Exception esalessave1) 
        {}

        try
        {   

            file.createNewFile();

            ObjectInputStream ois = new ObjectInputStream( new FileInputStream( file ) );

            object = ois.readObject();

            testio.table1.setModel( ( DefaultTableModel ) object ); 

            ois.close();

         }


          catch( Exception exception )
          {}

    }

}

这个(上)button_save_actionListener类成功保存了添加到文件中的所有行,第二个JTable显示了保存的文件。

    public class button_append_actionlistener implements ActionListener
{

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        appendrow = new Vector<String>();
        appendrow.addElement(testio.textfield.getText().toString() + " 1");
        appendrow.addElement(testio.textfield.getText().toString() + " 2");
        appendrow.addElement(testio.textfield.getText().toString() + " 3");
        testio.deftabmod.addRow(appendrow);
        testio.deftabmod1.addRow(appendrow);

        testio.textfield.setText(null);

    }

这个(以上)类button_append_actionlistener尝试将JTextField中的行添加到两个JTable中,但是仅成功地将行添加到了第一个JTable中。

  

现在,如何将行添加到两个表中?强文本

0 个答案:

没有答案