JTable指定单元格加控件

本文介绍如何使用Java Swing中的JTable组件,在表格的特定单元格中实现下拉列表效果。通过设置CellEditor为DefaultCellEditor的JComboBox实例,可以为表格的一列添加下拉选择功能。此外,还提供了一个名为ComboBoxCellEditor的自定义类,该类继承自JComboBox并实现了TableCellEditor接口,允许在表格的第一行第二列单元格中添加下拉列表,并处理编辑停止和取消事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JTable可以给表格的某一列加入控件,下面方法可以实现
try{
   TableColumn column = jTable.getColumn(colName);
   column.setCellEditor(new DefaultCellEditor(new JComboBox()));
 }catch(IllegalArgumentException ex){
 }
 或者
TableColumn column = JTable.getColumnModel().getColumn(int column);
column.setCellEditor(new DefaultCellEditor(new JComboBox()));
下面这个类可以帮助我们在表格的某一个指定的单元格实现下拉列表效果

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

import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.EventListenerList;
import javax.swing.table.TableCellEditor;

public class ComboBoxCellEditor extends JComboBox implements TableCellEditor{

    
protected EventListenerList listenerList = new EventListenerList();
    
protected ChangeEvent changeEvent = new ChangeEvent(this);
    
    
public ComboBoxCellEditor() {
        
super();
        
        addItem(
"");
        addItem(
"");
        addActionListener(
new ActionListener() {
            
public void actionPerformed(ActionEvent event) {
                fireEditingStopped();
            }

        }
);
    }


    
public void addCellEditorListener(CellEditorListener listener) {
        listenerList.add(CellEditorListener.
class, listener);
    }


    
public void removeCellEditorListener(CellEditorListener listener) {
        listenerList.remove(CellEditorListener.
class, listener);
    }


    
protected void fireEditingStopped() {
        CellEditorListener listener;
        Object[] listeners 
= listenerList.getListenerList();
        
for (int i = 0; i < listeners.length; i++{
            
if (listeners[i] == CellEditorListener.class{
                listener 
= (CellEditorListener) listeners[i + 1];
                listener.editingStopped(changeEvent);
            }

        }

    }


    
protected void fireEditingCanceled() {
        CellEditorListener listener;
        Object[] listeners 
= listenerList.getListenerList();
        
for (int i = 0; i < listeners.length; i++{
            
if (listeners[i] == CellEditorListener.class{
                listener 
= (CellEditorListener) listeners[i + 1];
                listener.editingCanceled(changeEvent);
            }

        }

    }


    
public void cancelCellEditing() {
        fireEditingCanceled();
    }


    
public boolean stopCellEditing() {
        fireEditingStopped();
        
return true;
    }


    
public boolean isCellEditable(EventObject event) {
        
return true;
    }


    
public boolean shouldSelectCell(EventObject event) {
        
return true;
    }


    
public Object getCellEditorValue() {
        
return getSelectedItem();
    }


    
public Component getTableCellEditorComponent(JTable table, Object value,
            
boolean isSelected, int row, int column) {
        
return this;
    }

}

 
客户端调用上述代码,可以实现在表格第一行第二列的单元格内加入下拉列表
JTable table = new JTable(){                
    @Override
    
public TableCellEditor getCellEditor(int row, int column) {
        
// TODO Auto-generated method stub
        if(row ==1 && column == 2){
            
return new ComboBoxCellEditor();
        }

        
return super.getCellEditor(row, column);
    }

}
;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值