java – JTable单元格中的JComboBox
发布时间:2020-12-15 04:52:44 所属栏目:Java 来源:网络整理
导读:我有一个使用模型创建的JTable,它基于一个对象矩阵. 对于每一行,我想使用JComboBox在特定列(第5列)中放入一些信息. 我尝试过以下方法: for(int i=0; i n ; i++) { ..... data[i][5] = new JComboBox(aux); // aux is a Vector of elements I wanna insert }
我有一个使用模型创建的JTable,它基于一个对象矩阵.
对于每一行,我想使用JComboBox在特定列(第5列)中放入一些信息. 我尝试过以下方法: for(int i=0; i < n ; i++) { ..... data[i][5] = new JComboBox(aux); // aux is a Vector of elements I wanna insert } table.setModel(new MyTableModel()); // MyTableModel() already takes into consideration the data[][] object 问题是data [i] [5] =新的JComboBox(aux);不会在JTable的特定单元格中创建JComboBox对象,而是将代码粘贴到该行中. 谢谢. 解决方法
一种方法是覆盖getCellEditor()方法以返回适当的编辑器.这是一个让你入门的例子:
import java.awt.*; import java.awt.event.*; import java.util.List; import java.util.ArrayList; import javax.swing.*; import javax.swing.table.*; public class TableComboBoxByRow extends JFrame { List<TableCellEditor> editors = new ArrayList<TableCellEditor>(3); public TableComboBoxByRow() { // Create the editors to be used for each row String[] items1 = { "Red","Blue","Green" }; JComboBox comboBox1 = new JComboBox( items1 ); DefaultCellEditor dce1 = new DefaultCellEditor( comboBox1 ); editors.add( dce1 ); String[] items2 = { "Circle","Square","Triangle" }; JComboBox comboBox2 = new JComboBox( items2 ); DefaultCellEditor dce2 = new DefaultCellEditor( comboBox2 ); editors.add( dce2 ); String[] items3 = { "Apple","Orange","Banana" }; JComboBox comboBox3 = new JComboBox( items3 ); DefaultCellEditor dce3 = new DefaultCellEditor( comboBox3 ); editors.add( dce3 ); // Create the table with default data Object[][] data = { {"Color","Red"},{"Shape","Square"},{"Fruit","Banana"},{"Plain","Text"} }; String[] columnNames = {"Type","Value"}; DefaultTableModel model = new DefaultTableModel(data,columnNames); JTable table = new JTable(model) { // Determine editor to be used by row public TableCellEditor getCellEditor(int row,int column) { int modelColumn = convertColumnIndexToModel( column ); if (modelColumn == 1 && row < 3) return editors.get(row); else return super.getCellEditor(row,column); } }; System.out.println(table.getCellEditor()); JScrollPane scrollPane = new JScrollPane( table ); getContentPane().add( scrollPane ); } public static void main(String[] args) { TableComboBoxByRow frame = new TableComboBoxByRow(); frame.setDefaultCloSEOperation( EXIT_ON_CLOSE ); frame.pack(); frame.setVisible(true); } } 编辑:更新代码以使用trashgod的建议. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容