简体   繁体   English

在JTable的最后一行之后添加JButton

[英]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. 我想直接在表的最后一行之后添加一个JButton,该表是动态的并且位于scrollPane内部。

almost all of the other questions were answered with a button added after scrollPane in BorderLayout.South , which is not what i want. 几乎所有其他问题都通过在BorderLayout.South中的scrollPane之后添加的按钮来回答,这不是我想要的。

thanks 谢谢

在此处输入图片说明

updated the picture to better represent it, the button should appear inside the scrollPane just after the last row. 更新了图片以更好地表示它,该按钮应该出现在scrollPane的最后一行之后。

Read more about different LayoutManager 's . 阅读有关不同LayoutManager更多信息。 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);
        }

    }

}

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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