JTABLE单个单元格下拉框
发布网友
发布时间:2023-09-20 07:47
我来回答
共1个回答
热心网友
时间:2023-09-20 12:34
**答案仅做参考,如有错误,请不要骂街**
你可以自己做一个JTable的子类,然后覆盖他的方法getCellEditor(int row,int col),在你的子类你可以设计一个方法,允许用户设置指定的一个cell使用下拉框编辑器,然后再你覆盖的方法中,判断当前请求编辑的cell,是不是你指定的,如果是则返回下拉框编辑器. 如果你需要对多个单元指定不同的下拉框编辑器,那么你可以在JTable的子类中用List等保存多个cell.
下面是根据上面网址的一个例子修改而成的,你做为参考吧.
import javax.swing.CellEditor;
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;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;
public class Main {
public static void main(String[] argv) throws Exception {
MyTable table = new MyTable();
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.addColumn("A", new Object[] );
model.addColumn("B", new Object[] );
String[] values = new String[] ;
table.setComboCell(1, 1, new MyComboBoxEditor(values));
// TableColumn col = table.getColumnModel().getColumn(0);
// col.setCellEditor(new MyComboBoxEditor(values));
// col.setCellEditor(new MyComboBoxRenderer(values));
// table.setModel(model);
// table.updateUI();
JScrollPane jp=new JScrollPane(table);
jp.setViewportView(table);
jp.setSize(400,300);
JFrame jf=new JFrame();
jf.getContentPane().add(jp);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(400,300);
jf.setVisible(true);
}
}
class MyTable extends JTable{
int myRow=-1,myCol=-1;
TableCellEditor myEditor;
public void setComboCell(int r,int c,TableCellEditor ce){
this.myRow=r;
this.myCol=c;
this.myEditor=ce;
}
@Override
public TableCellEditor getCellEditor(int row, int column) {
System.out.println(row+","+column+";"+myRow+","+myCol+","+myEditor);
if(row==myRow&&column==myCol&&myEditor!=null)
return myEditor;
return super.getCellEditor(row, column);
}
}
class MyComboBoxEditor extends DefaultCellEditor {
public MyComboBoxEditor(String[] items) {
super(new JComboBox(items));
}
}