java Swing 在JTable表格单元中加入JComboBox下拉框,如何给单元格添加自定义下拉框?下拉选项动态变化。

在开发过程中,有时会遇到需要把表格单元格渲染成下拉框的情况,且下拉框中的数据是根据情况动态变化的。一般情况,对于这种情况,一般只需要设置编辑器即可,渲染器则可以不用设置。代码如下:

package com.a;

import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Vector;

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class Demo2 {

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		JTable table = new JTable();
		DefaultTableModel model = new DefaultTableModel();
		String[] columnIdentifiers = {"one", "two", "three"};//表头
		String[][] data = new String[5][3];
		for (int i = 0; i < 5; i++) {
			for (int j = 0; j < 3; j++) {
				if(j == 2) {
					continue;
				}
				data[i][j] = "asd";
			}
		}
		model.setDataVector(data, columnIdentifiers);
		table.setModel(model);
		//强烈建议用Vector集合来作为下拉框的选项值,方便删除修改下拉框中选项值的内容。
		Vector<String> vector = new Vector<String>();
		vector.add("a");
		vector.add("b");
		vector.add("c");
		
		final JComboBox<String> comboBox = new JComboBox<String>(vector);
		//下拉框监听
		comboBox.addItemListener(new ItemListener() {
			
			@Override
			public void itemStateChanged(ItemEvent e) {
				if(e.getStateChange() == ItemEvent.SELECTED) {
					System.out.println(comboBox.getSelectedItem());
				}
			}
		});
		//表格编辑器
		table.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(comboBox));
		
		JScrollPane scrollPane = new JScrollPane(table);
		frame.add(scrollPane);
		frame.setBounds(100, 100, 300, 200);
		frame.setVisible(true);
	}
}

如果需要动态变化下拉框选项值的内容,修改Vector集合即可。

效果图如下:

点击单元格时才会看到下拉框,失去焦点后就是正常的单元格。

特别提醒:以上代码的内容,实际上第三列用的是同一个下拉框,所以,在进行下拉框监听的时候,如果上一行选中了下拉框第二项,下一行再选中同一项时,不会触发下拉框选项监听事件。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值