在JTable的同一列上创建JComboBox和JButton

问题描述

我想根据同一列中的变量添加按钮和组合框,但是我不知道是否可以为每个特定的单元分配不同的编辑器。我尝试像这样的东西:

tableTransporteModel.getDataVector().clear();
        tableTransporteModel.fireTableDataChanged();
        
        for (TransportePorTransportistaDto each : ventas) {
            Object[] newRow = new Object[4];
            newRow[0] = each.at0;
            newRow[1] = each.at1;
            newRow[2] = each.at2;
            if(each.estado.toupperCase().equals("OPEN")) {
                JButton b = getBtutton();
                newRow[3] = b;
            }else {
                TableColumn tc = tableTransporte.getColumnModel().getColumn(3);
                tc.setCellEditor(new DefaultCellEditor(getCbStates(each.estado.toupperCase())));
                newRow[3] = getCbStates(each.estado.toupperCase());
            }

使用我有代码的按钮

private void tablaMouseClicked(java.awt.event.MouseEvent evt) {
        
        int column = tableTransporte.getColumnModel().getColumnIndexAtX(evt.getX());
        int row = evt.getY()/tableTransporte.getRowHeight();
        
        if(row < tableTransporte.getRowCount() && row >= 0 && column < tableTransporte.getColumnCount() && column >= 0){
            Object value = tableTransporte.getValueAt(row,column);
            if(value instanceof JButton){
                ((JButton)value).doClick();
                asignarPedido(row);
            }
            if(value instanceof JComboBox){
                //((JCheckBox)value).doClick();
            JComboBox ch = comboBox;
            }
        }
        
    }


public class Render extends DefaultTableCellRenderer{

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Override
public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column) {
    
    if(value instanceof JButton){
        JButton btn = (JButton)value;
        if(isSelected){
            btn.setForeground(table.getSelectionForeground());
  btn.setBackground(table.getSelectionBackground());
        }else{
            btn.setForeground(table.getForeground());
  btn.setBackground(UIManager.getColor("Button.background"));
        }
        return btn;
    }
    
    
    if(value instanceof JComboBox){
        JComboBox ch = new JComboBoxEstadoT("EN TRANSITO");
        return ch;
    }
    
    return super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column); //To change body of generated methods,choose Tools | Templates.
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)