JTable的简单用法,渲染器的简单设置,单元格的是否可编辑处理,JComboBox的事件处理
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class MyTableModel {
public static void main(String[] args) {
JFrame f = new JFrame("test");
Object[][] row = {{ false,"语文","数学","英语","",""},{ false, }};
String[] h = { "修改","1", "2", "3","4", "5", };
DefaultTableModel dtm = new DefaultTableModel(){
@Override
public Class<?> getColumnClass(int c){
return getValueAt(0,c).getClass();
}
@Override
public boolean isCellEditable(int x, int y){
if ( y == 0)
return true;
else
return getValueAt(x,0).toString().equals("true");
}
};
dtm.setDataVector(row,h);
dtm.addRow(new Object[]{false,"","","","","",});
final JComboBox<String> jcb = new JComboBox<String>();
jcb.addItem("数学");
jcb.addItem("英语");
jcb.addItem("语文");
jcb.setEditable(true);
jcb.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
String s = jcb.getSelectedItem().toString();
if (s.equals(""))
return;
boolean flag = true;
for (int i = 0; i < jcb.getItemCount(); i++){
if (jcb.getItemAt(i).equals(s)){
flag = false;
break;
}
}
if (flag)
jcb.addItem(s);
}
});
JTable tab = new JTable(dtm);
for (int i = 1;i < 6; i++){
tab.getColumnModel().getColumn(i).setCellEditor(new DefaultCellEditor(jcb));
}
f.add(new JScrollPane(tab));
f.pack();
f.setVisible(true);
f.setDefaultCloseOperation(3);
}
}
追问谢谢回答。但是你的代码里面好像是设置一列为下拉列表吧,我只想设置某一个单元格为下拉列表啊!
追答那就设置那一个单元为可编辑属性
追问但是这样的话 你的这一列的所有可编辑的单元格就显示为同一个下拉列表了,我想在不同的单元格里面显示不同的下拉列表该怎么做呢?
追答那就是jcb的数据内容了,取得单元格的 行 和 列 再分别设置jcb里的数据
本回答被提问者和网友采纳