代码之家  ›  专栏  ›  技术社区  ›  harshit

如何从表中删除jButton

  •  0
  • harshit  · 技术社区  · 15 年前

    我有一张桌子,上面列着JButton。

    我将渲染器设置如下

    TableColumn col = colModel.getColumn(3);
        col.setCellRenderer(new MyRenderer("Del"));
        col.setCellEditor(new MultiTradeCellEditor(new JCheckBox()));
    

    渲染器和CellEditor类是

    class MyRenderer extends JButton implements TableCellRenderer{
    
        public MyRenderer(String text){
            super(text);
        }
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            return this;
        }
    
    }   
    
    
    }
    

    CellEditor类

    class MultiTradeCellEditor extends DefaultCellEditor{
    
        protected JButton button;
    
        public MultiTradeCellEditor(JCheckBox checkBox) {
            super(checkBox);
            button = new JButton("Del");
            button.setOpaque(true);
            button.addActionListener(new ActionListener() {
    
                public void actionPerformed(ActionEvent e) {    
                selectionList.getList().remove(table.getSelectedRow());
                    table.repaint();
                                    }
            });
    
        }
    
    }
    

    当我从表中删除行时。我做model.remove(table.getSelectedRow())。它删除除jbutton之外的行。我假设该按钮是渲染器组件的一部分,因此它不会被删除。 我该怎么做?

    2 回复  |  直到 15 年前
        1
  •  2
  •   camickr    15 年前

    这个 Table Button Column 示例提供按钮的呈现器和编辑器,以及从表中删除行的示例操作。

        2
  •  0
  •   willcodejavaforfood    15 年前

    奇怪的。 可能是缓存?

    当没有值时尝试返回空标签?

    class MyRenderer extends JComponent implements TableCellRenderer{
        private String text;
        public MyRenderer(String text){
            this.text = text;
        }
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            if (value)
                return new JButton(text);
            else
                return new JLabel();
        }
    
    }   
    
    
    }