简体   繁体   中英

add JButton after last row of JTable

I searched for the answer for quite awhile , but most cases were different from mine.

I want to add a JButton directly after the last row of the table, the table is dynamic and is inside a scrollPane.

almost all of the other questions were answered with a button added after scrollPane in BorderLayout.South , which is not what i want.

thanks

在此处输入图片说明

updated the picture to better represent it, the button should appear inside the scrollPane just after the last row.

Read more about different LayoutManager 's . Use proper manager or combination of them.

Here is simple example:

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;


public class TestFrame extends JFrame {

    public TestFrame() {
        init();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void init() {
        JTable t = new JTable(3,3);
        add(new JScrollPane(t));
        JPanel btns = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0));
        JButton jButton = new JButton("here");
        btns.add(jButton);
        add(btns,BorderLayout.SOUTH);
    }


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

}

在此处输入图片说明

EDIT:

Try to use next example:

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;


public class TestFrame extends JFrame {

    public TestFrame() {
        init();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void init() {
        JTable t = new JTable(new DefaultTableModel(3,3){
            @Override
            public boolean isCellEditable(int row, int column) {
                if(row == getRowCount()-1 && column != 0){
                    return false;
                }
                return super.isCellEditable(row, column);
            }
        });
        t.setGridColor(t.getTableHeader().getBackground());
        add(new JScrollPane(t));
        for(int i=0;i<3;i++)
            t.getColumnModel().getColumn(i).setCellRenderer(getDummyRenderer());
        t.getColumnModel().getColumn(0).setCellEditor(getDummyEditor());
    }


    private TableCellEditor getDummyEditor() {
        return new DummyEditor();
    }

    private TableCellRenderer getDummyRenderer() {
        return new DefaultTableCellRenderer() {

            @Override
            public Component getTableCellRendererComponent(JTable table, Object value,
                    boolean isSelected, boolean hasFocus, int row, int column) {
                if(row == table.getRowCount()-1){
                    if(column == 0){
                        return new JButton("dummy");
                    } else {
                        JLabel jLabel = new JLabel("");
                        jLabel.setOpaque(true);
                        jLabel.setBorder(null);
                        return jLabel;
                    }
                } else {
                    Component tableCellRendererComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                    return tableCellRendererComponent;
                }
            }
        };
    }

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

    private class DummyEditor extends DefaultCellEditor implements TableCellEditor{

        private JButton btn = new JButton("dummy");

        public DummyEditor(){
            super(new JTextField());
            btn.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println("clicked");
                }
            });
        }

        @Override
        public Component getTableCellEditorComponent(JTable table,
                Object value, boolean isSelected, int row, int column) {
            return row == table.getRowCount()-1 ? btn : super.getTableCellEditorComponent(table, value, isSelected, row, column);
        }

    }

}

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM