iamidumz
iamidumz

Reputation: 17

How to add a button inside a table cell in java netbeans? (I am using the drag and drop method.)

I am trying to add a button inside a table cell. I am using the drag and drop method of netbeans since I know nothing about coding and will appreciate if you can teach me to code it. Thanks!

cells

Upvotes: 0

Views: 1521

Answers (1)

user2805507
user2805507

Reputation:

If you are using drag&drop in netbean for swing, I highly advise you to touch the fundamental of swings , get your hands dirty so that you will know what is going on and how does the code work.

let me run through how you can achieve this. it will consist of 3 classes so that you will have a better understanding on what is going on and it practices oop too but of cause you can modify it to your preferred design pattern.

_main.java

public class _main extends JFrame{
private static final long serialVersionUID = 1L;

// Create new JFrame
_main(){
    new JFrame("Main");
    setLayout(new BorderLayout());
    setSize(500,300);
    add(new JLabel("Table Example ", SwingUtilities.CENTER) , BorderLayout.PAGE_START);

   // ---------------- Call the method you have created in tableView.java ------------

    add(new JScrollPane(new tableView(this).sampleTable()), BorderLayout.CENTER);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
   }


   public static void main(String[] args){
//Run Program
    new _main();
   }
}

tableView.java

public class tableView {

    JFrame frame = new JFrame();
    public tableView(JFrame frame) {
        this.frame = frame;
    }

//Create columnTitle & Table Model 
    String[] columnTitle = { "Data 1", "Data 2", "Data 3", "Buttons " };
    DefaultTableModel model = new DefaultTableModel(columnTitle, 0);

    public JTable sampleTable(){
            JTable _dataTable = new JTable(model) {
                @Override
                public void updateUI() {
                    super.updateUI();
                    setRowHeight(34);
                    setAutoCreateRowSorter(true);

     //------------ Placing button at your desired column ------------

                    TableColumn column;
                    column = getColumnModel().getColumn(3);
                    column.setCellRenderer(new tableModel(frame).new viewRenderer());
                    column.setCellEditor(new tableModel(frame).new ButtonsEditorView(this));
                }
            };
            DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
            centerRenderer.setHorizontalAlignment(JLabel.CENTER);

       //-------- Adding data to your table row , use for loop for multiple data ---------

            model.addRow(new Object[]{"1","2","3"});
            return _dataTable;
    }

}

tableModel.java

public class tableModel extends tableView{
    public tableModel(JFrame frame) {
        super(frame);
    }


    class viewButton extends JPanel {
        public JButton viewbtnp = new JButton("View");
        protected viewButton() {
            setOpaque(true);
            setFocusable(false);
            add(viewbtnp);
        }
    }

    class viewRenderer implements TableCellRenderer {
        private final viewButton panel = new viewButton() {
            @Override
            public void updateUI() {
            super.updateUI();
            setName("Table.cellRenderer");
            }
        };

            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
            int row, int column) {
            panel.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
            return panel;
        }
    }

    class ViewAction extends AbstractAction {
        private final JTable table;

        protected ViewAction(JTable table) {
            super("view");
            this.table = table;     
        }

        @Override
        public void actionPerformed(ActionEvent e) {

        //--------------------------- Create your own function on what you want the button to do when button is clicked -------------
            System.out.println("Clicked ");
        }
    }

    class ButtonsEditorView extends AbstractCellEditor implements TableCellEditor {
        protected final viewButton panel = new viewButton();
        protected final JTable table;

        protected ButtonsEditorView(JTable table) {
            super();
            this.table = table;
            panel.viewbtnp.setAction(new ViewAction(table));
        }

        @Override
        public Component getTableCellEditorComponent(JTable tbl, Object value, boolean isSelected, int row,
            int column) {
            panel.setBackground(tbl.getSelectionBackground());
            return panel;
        }

        @Override
        public Object getCellEditorValue() {
            return "";
        }
    }
}

Output

This will be the output once you have run the code

Hope it helps. Cheers

Upvotes: 1

Related Questions