Java 如何将JButton添加到行的最后两列单元格中?

Java 如何将JButton添加到行的最后两列单元格中?,java,swing,jtable,jscrollpane,jbutton,Java,Swing,Jtable,Jscrollpane,Jbutton,我想把JButton添加到行的最后两列单元格中..怎么做..请帮助我 String[] columnNames= {"EmployeeId","Name", "Designation", "JoiningDate", "DOB","ContactNo","MailId","Password","Edit","Remove"}; final DefaultTableModel model1 = new DefaultTableModel(rows, columnNames); model1.add

我想把JButton添加到行的最后两列单元格中..怎么做..请帮助我

String[] columnNames= {"EmployeeId","Name", "Designation", "JoiningDate", "DOB","ContactNo","MailId","Password","Edit","Remove"};
final DefaultTableModel model1 = new DefaultTableModel(rows, columnNames);
model1.addColumn("columnNames, data");
table3= new JTable(model1);
 table3.getColumn("Edit").setCellEditor(new ButtonEditor(new JCheckBox()));
table3.getColumn("Remove").setCellEditor(new ButtonEditor(new JCheckBox()));
table3.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table3.setRowHeight( 32 );
JScrollPane pane= new JScrollPane(table3);
table3.setPreferredScrollableViewportSize(table3.getPreferredSize());
JTableHeader header = table3.getTableHeader();
header.setBackground(Color.CYAN );
pane.setBackground(Color.BLACK);
employeeFrame.add(pane) ; 
table3.getModel();

您需要使用自定义单元格渲染器(我猜自定义编辑器可以处理单击事件)

结帐和

您可能还需要查看设置点击次数以激活按钮

更新

public class MyTatbleEditor {

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

    public MyTatbleEditor() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {

                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setSize(200, 200);
                frame.setLocationRelativeTo(null);
                frame.setLayout(new BorderLayout());

                Vector rows = new Vector();
                for (int index = 0; index < 10; index++) {
                    Vector data = new Vector();
                    data.add(new Object());
                    rows.add(data);
                }
                Vector cols = new Vector();
                cols.add("One");
                DefaultTableModel model = new DefaultTableModel(rows, cols);

                JTable table = new JTable(model);

                table.getColumn("One").setCellEditor(new MyTableButtonEditor());
                table.getColumn("One").setCellRenderer(new MyTableButtonRenderer());

                frame.add(new JScrollPane(table));

                frame.setVisible(true);


            }
        });
    }

    protected class MyTableButtonEditor extends AbstractCellEditor implements TableCellEditor {

        private JButton button;
        private int column;
        private int row;

        public MyTableButtonEditor() {
            button = new JButton("Click me if you dare");
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                            JOptionPane.showMessageDialog(button, "How dare you :(", "Fancy that", JOptionPane.INFORMATION_MESSAGE);
                        }
                    });
                }
            });
        }

        @Override
        public boolean isCellEditable(EventObject e) {
            boolean isEditable = false;
            if (e instanceof MouseEvent) {
                MouseEvent me = (MouseEvent) e;
                if (me.getButton() == MouseEvent.BUTTON1 && me.getID() == MouseEvent.MOUSE_PRESSED) {
                    isEditable = true;
                }
            } else if (e instanceof KeyEvent) {
                KeyEvent ke = (KeyEvent) e;
                if (ke.getID() == KeyEvent.KEY_PRESSED && (ke.getKeyCode() == KeyEvent.VK_SPACE || ke.getKeyCode() == KeyEvent.VK_ENTER)) {
                    isEditable = true;
                }
            }
            return isEditable;
        }

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

        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            if (isSelected) {
                button.requestFocus();
            }
            this.column = column;
            this.row = row;
            return button;
        }
    }

    protected class MyTableButtonRenderer implements TableCellRenderer {

        private JButton button;

        public MyTableButtonRenderer() {
            button = new JButton("Click me if you dare");
        }

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            return button;
        }

    }
}
公共类MyTatbleEditor{
公共静态void main(字符串[]args){
新的MyTableEditor();
}
公共MyTableEditor(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}捕获(ClassNotFoundException ex){
}catch(实例化异常){
}捕获(非法访问例外){
}捕获(无支持的LookandFeelexception ex){
}
JFrame=新JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。设置尺寸(200200);
frame.setLocationRelativeTo(空);
frame.setLayout(新的BorderLayout());
向量行=新向量();
对于(int-index=0;index<10;index++){
向量数据=新向量();
data.add(新对象());
行。添加(数据);
}
向量cols=新向量();
列。添加(“一”);
DefaultTableModel=新的DefaultTableModel(行、列);
JTable table=新的JTable(模型);
table.getColumn(“一”).setCellEditor(新的MyTableButtonEditor());
table.getColumn(“一”).setCellRenderer(新的MyTableButtonRenderer());
frame.add(新的JScrollPane(表));
frame.setVisible(true);
}
});
}
受保护类MyTableButtonEditor扩展AbstractCellEditor实现TableCellEditor{
私人按钮;
私有int列;
私人int row;
公共MyTableButtoneEditor(){
按钮=新的JButton(“如果你敢点击我”);
addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
showMessageDialog(按钮,“你怎么敢:(,“真想不到”,JOptionPane.INFORMATION_MESSAGE);
}
});
}
});
}
@凌驾
公共布尔值isCellEditable(EventObject e){
布尔isEditable=false;
if(例如MouseEvent的实例){
MouseEvent me=(MouseEvent)e;
如果(me.getButton()==MouseEvent.BUTTON1&&me.getID()==MouseEvent.MOUSE\u按下){
isEditable=真;
}
}else if(例如KeyEvent的实例){
KeyEvent ke=(KeyEvent)e;
如果(ke.getID()==KeyEvent.KEY_按下&&(ke.getKeyCode()==KeyEvent.VK_空格| | ke.getKeyCode()==KeyEvent.VK_回车)){
isEditable=真;
}
}
返回可编辑;
}
@凌驾
公共对象getCellEditorValue(){
返回新对象();
}
@凌驾
公共组件getTableCellEditorComponent(JTable表、对象值、布尔isSelected、int行、int列){
如果(当选){
requestFocus()按钮;
}
this.column=列;
this.row=行;
返回按钮;
}
}
受保护类MyTableButtonRenderer实现TableCellRenderer{
私人按钮;
公共MyTableButtonRenderer(){
按钮=新的JButton(“如果你敢点击我”);
}
@凌驾
公共组件GetTableCellRenderComponent(JTable表、对象值、布尔isSelected、布尔hasFocus、int行、int列){
返回按钮;
}
}
}

浏览一下互联网,或者找一位私人导师来解释。Stack Overflow用于回答带有互联网参考资料的特定问题。当然,从阅读答案中链接的教程开始,阅读主要评论中发布的Guillaume博客,尝试一些东西。当你有特定问题时,再问一次。你的要求ts并不是最简单的实现方式(虽然相对来说比较常见且有很好的文档),请查看更新的代码..按钮未显示在表格单元格中..但当我单击该单元格joptionpane消息显示时…我需要的一件事是缺少的。我需要查看单元格渲染器和单元格编辑器代码。请检查更新