How to add JButton in JTable ColumnHeader

Here we can see how to add JButton as JTable column header. And the below code also explain the some useful information related to JTable component.
 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 ·