How to Add/Remove Rows From JTable

Here we will see how to add/remove rows from JTable. JTable is a most commonly used component in Java user interface (Swing).And this post will be most useful while handling JTable component in your swing applications.
Check below example

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

/**
 * @author mohan.jayapalan
 *
 */
class JTableExample implements TableModelListener, ActionListener {
    private static JTableExample instance = null;
    static JTable table = null;
    static Vector> rows = new Vector>();
    static Vector columns;
    static Date currentdate;
    static SimpleDateFormat simpledate;
    static DefaultTableModel defaulttablemodel;
    JDialog frame = null;
    FileWriter filewriter = null;
    File selectedFile = null;
    static Vector rowstring = null;
    BufferedWriter bufwriter = null;
    private JButton addbutton;
    private JButton delbutton;

    JTableExample() {
        buildTable();
    }

    /**
     * @throws ClassNotFoundException
     * @throws InstantiationException
     * @throws IllegalAccessException
     * @throws UnsupportedLookAndFeelException
     */
    public void buildTable() {
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        frame = new JDialog();
        frame.setTitle(“JTableExample”);
        frame.setBackground(Color.WHITE);

        frame.setLayout(new BorderLayout());
        JFrame.setDefaultLookAndFeelDecorated(false);
        columns = new Vector();
        String[] columnNames = { “Time”, “Status”, “Save”, “Clear” };
        addColumns(columnNames);
        defaulttablemodel = new DefaultTableModel();
      
        defaulttablemodel.removeTableModelListener(this);
        defaulttablemodel.setDataVector(rows, columns);
        table = new JTable(defaulttablemodel) {
            @Override
            public boolean isCellEditable(int rowIndex, int colIndex) {
                return true; // Disallow the editing of any cell
            }
        };

        table.setShowGrid(false);
       
        currentdate = new Date();
        simpledate = new SimpleDateFormat(“MM/dd/yyyy HH:mm:ss”);
        table.setEditingColumn(0);

        table.setCellSelectionEnabled(true);
        table.setBackground(Color.WHITE);
        table.removeNotify();
        ButtonHeaderRenderer renderer = new ButtonHeaderRenderer();
        TableColumnModel model = table.getColumnModel();
        TableColumn firstcol = table.getColumn(“Time”);
        firstcol.setPreferredWidth(200);
        TableColumn secondcol = table.getColumn(“Status”);

        secondcol.setPreferredWidth(400);
        model.setColumnSelectionAllowed(false);

        int n = columnNames.length;
        for (int i = 2; i < n; i++) {
            model.getColumn(i).setHeaderRenderer(renderer);
        }

        JTableHeader header = table.getTableHeader();
        table.setBackground(Color.WHITE);
        header.setResizingAllowed(true);
        header.setReorderingAllowed(false);
        header.addMouseListener(new HeaderListener(header, renderer));
        JScrollPane pane = new JScrollPane(table);
        pane.setHorizontalScrollBar(new JScrollBar());
        pane.setBackground(Color.WHITE);
        panel.add(pane, BorderLayout.CENTER);
        JPanel buttonPanel = new JPanel(new FlowLayout());
        addbutton = new JButton(“AddRow”);
        addbutton.addActionListener(this);
        buttonPanel.add(addbutton);
        delbutton = new JButton(“DeleteRow”);
        delbutton.addActionListener(this);
        buttonPanel.add(delbutton);

       
        panel.setBackground(Color.WHITE);
        frame.add(panel, BorderLayout.CENTER);
        frame.add(buttonPanel,BorderLayout.SOUTH);
        // frame.setBounds(350, 350, 575, 300);
        frame.setBackground(Color.WHITE);
        frame.setModal(true);
        frame.setSize(575, 300);
        frame.setResizable(false);
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension sizes = kit.getScreenSize();
        frame.setLocation((sizes.width – 480) / 2, (sizes.height – 420) / 2);
        frame.setLocationRelativeTo(frame);
        frame.setVisible(true);
    }
    public void actionPerformed(ActionEvent ae)
    {
        String command = ae.getActionCommand();
        if(command.equals(addbutton));
        {
            System.out.println(“JTableExample.addRow()”);
            Vector vect = new Vector();
            vect.add(“test”);
            vect.add(“test”);
            vect.add(“”);
            vect.add(“”);
            addRow(vect);
           
        }
        if(command.equalsIgnoreCase(“DeleteRow”))
        {
            System.out.println(“JTableExample.deleteRow()”);
            deleteRow();
        }
    }
   
    private void deleteRow() {
        //    int numrows = defaulttablemodel.getRowCount();
            int selrow = table.getSelectedRow();
           System.out.println(“JTableExample.deleteRow()delket”+selrow);
             if(selrow >= 0)
             {
             rows.removeElementAt(selrow);
             defaulttablemodel.removeRow(selrow);
             }
              
       
    }

    public static void main(String[] args) {
        new JTableExample();
    }

    public boolean isCellEditable(int row, int col) {
        // Note that the data/cell address is constant,
        // no matter where the cell appears onscreen.
        return false;
    }

    /**
     * @param colName
     */
    private void addColumns(String[] colName)// Table Columns
    {
        for (int i = 0; i < colName.length; i++)
            columns.addElement((String) colName[i]);
    }

    private static void addRow(Vector vec) // Add Row
    {

        rows.addElement(vec);
        if (table != null) {
            table.addNotify();
        }
    }

    /**
     * @return instance
     */
    public static synchronized JTableExample getInstance() {
        if (instance == null) {
            instance = new JTableExample();
        }
        return instance;
    }

    /**
     * @param parsestring
     * @return
     */
    public boolean setStatus(String parsestring) {

        Date currentdate = new Date();

        SimpleDateFormat simpledate = new SimpleDateFormat(
                “MM/dd/yyyy HH:mm:ss”);
        String St = simpledate.format(currentdate);
        rowstring = new Vector();

        rowstring.addElement((String) St + ”    ” + ”  – “);
        rowstring.addElement(parsestring);
        rowstring.addElement(“”);
        rowstring.addElement(“”);

        addRow(rowstring);
        return true;
    }

    class HeaderListener extends MouseAdapter {
        JTableHeader header;

        ButtonHeaderRenderer renderer;

        HeaderListener(JTableHeader header, ButtonHeaderRenderer renderer) {
            this.header = header;
            this.renderer = renderer;
        }

        public void mousePressed(MouseEvent e) {
            int col = header.columnAtPoint(e.getPoint());
            renderer.setPressedColumn(col);
            header.repaint();
            if (col == 2) {
                saveStatus();
            }
            if (col == 3) {
                clearTable();
            }

        }

        public void mouseReleased(MouseEvent e) {
            renderer.setPressedColumn(-1); // clear
            header.repaint();
        }

        public void saveStatus() {
            JFileChooser chooser = new JFileChooser();
            // ExtFileFilter filter = new ExtFileFilter(“TXT Files, (.txt)”,
            // “txt”);
            // chooser.addChoosableFileFilter(filter);
            chooser.setAcceptAllFileFilterUsed(false);
            chooser.setDialogTitle(“Save log file”);
            int rVal = chooser.showSaveDialog(null);
            if (rVal == JFileChooser.APPROVE_OPTION) {

                selectedFile = chooser.getSelectedFile();

                try {
                    filewriter = new FileWriter(selectedFile.getAbsolutePath()
                            + “.txt”);
                    bufwriter = new BufferedWriter(filewriter);
                    int rowcount = table.getRowCount();
                    for (int i = 0; i < rowcount; i++) {
                        bufwriter.write(defaulttablemodel.getValueAt(i, 0)
                                .toString());
                        bufwriter.write(“\t”);
                        bufwriter.write(defaulttablemodel.getValueAt(i, 1)
                                .toString());
                        bufwriter.newLine();
                    }
                    bufwriter.close();
                    filewriter.close();
                } catch (Exception e) {
                    e.printStackTrace();

                }
            }

        }

        /**
         *  
         */
        public void clearTable() {
            try {
                int numrows = defaulttablemodel.getRowCount();

                for (int i = numrows – 1; i >= 0; i–) {
                    defaulttablemodel.removeRow(i);
                }
                defaulttablemodel.fireTableDataChanged();
            } catch (ArrayIndexOutOfBoundsException arr) {
                arr.printStackTrace();
            }

        }

        public void tableChanged(TableModelEvent arg0) {
           

        }
    }

    class ButtonHeaderRenderer extends JButton implements TableCellRenderer {
        /**
         *
         */
        private static final long serialVersionUID = 1L;
        int pushedColumn;

        public ButtonHeaderRenderer() {
            pushedColumn = -1;
            setMargin(new Insets(0, 0, 0, 0));
        }

        public Component getTableCellRendererComponent(JTable table,
                Object value, boolean isSelected, boolean hasFocus, int row,
                int column) {
            setText((value == null) ? “” : value.toString());
            boolean isPressed = (column == pushedColumn);
            getModel().setPressed(isPressed);
            getModel().setArmed(isPressed);
            return this;
        }

        public void setPressedColumn(int col) {
            pushedColumn = col;
        }
    }

    /*
     * (non-Javadoc)
     *
     * @seejavax.swing.event.TableModelListener#tableChanged(javax.swing.event.
     * TableModelEvent)
     */
    public void tableChanged(TableModelEvent arg0) {

        // TODO Auto-generated method stub

    }

}

About mohan

This is Mohan Jayapalan author of TechPages Blog.I am a part time blogger and Currently working for private Software Concern.

© Copyright 2010-2016 www.techpages.org · All Rights Reserved · Powered by WordPress ·