有标题栏,有checkbox 有文本框的一个table 。列:|   选择   |  科目   | 分数 |
| checkbox |  语文   | 90   |
| chexkbox |  数学   | 80   |
java 能实现吗?

解决方案 »

  1.   

    以前写的一个小例子,你参考一下:
    import java.awt.*;
    import java.util.*;import javax.swing.*;
    import javax.swing.table.*;/**
     * JTable的例子
     */
    public class Test {
    private JFrame frame = null; private JTable table = null; private Table_Model model = null; private JScrollPane s_pan = null; public Test() {
    frame = new JFrame("Test");
    model = new Table_Model(20);
    table = new JTable(model);
    table.setBackground(Color.white);
    String[] age = { "21", "22", "23", "24", "25", "26", "27", "28", "29", "30" };
    JComboBox com = new JComboBox(age);
    TableColumnModel tcm = table.getColumnModel();
    tcm.getColumn(2).setCellEditor(new DefaultCellEditor(com)); // 设置某列采用JComboBox组件 model.addRow("宋江", true, "30");
    model.addRow("孙二娘", false, "21");
    model.addRow("武松", true, "24"); s_pan = new JScrollPane(table); frame.getContentPane().add(s_pan, BorderLayout.CENTER);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 200);
    frame.setVisible(true); model.addRow(2); // 在某处插入一空行
    table.updateUI(); // 重置UI,解决窗口显示后add或remove数据不能即使显示的问题。 } public static void main(String args[]) {
    new Test();
    }}class Table_Model extends AbstractTableModel {
    private static final long serialVersionUID = -3094977414157589758L; private Vector content = null; private String[] title_name = { "姓名", "性别", "年龄" }; public Table_Model() {
    content = new Vector();
    } public Table_Model(int count) {
    content = new Vector(count);
    } /**
     * 加入一空行
     * 
     * @param row
     *            行号
     */
    public void addRow(int row) {
    Vector v = new Vector(3);
    v.add(0, null);
    v.add(1, null);
    v.add(2, null);
    content.add(row, v);
    } /**
     * 加入一行内容
     */
    public void addRow(String name, boolean sex, String age) {
    Vector v = new Vector(3);
    v.add(0, name);
    v.add(1, new Boolean(sex)); // JCheckBox是Boolean的默认显示组件,这里仅仅为了看效果,其实用JComboBox显示Sex更合适
    v.add(2, age); // 本列在前面已经设置成了JComboBox组件,这里随便输入什么字符串都没关系
    content.add(v);
    } public void removeRow(int row) {
    content.remove(row);
    } public boolean isCellEditable(int rowIndex, int columnIndex) {
    return true;
    } public void setValueAt(Object value, int row, int col) {
    ((Vector) content.get(row)).remove(col);
    ((Vector) content.get(row)).add(col, value);
    this.fireTableCellUpdated(row, col);
    } public String getColumnName(int col) {
    return title_name[col];
    } public int getColumnCount() {
    return title_name.length;
    } public int getRowCount() {
    return content.size();
    } public Object getValueAt(int row, int col) {
    return ((Vector) content.get(row)).get(col);
    } public Class getColumnClass(int col) {
    return getValueAt(0, col).getClass();
    }}
      

  2.   

    看看JDK自己带的例子SwingSet2吧
      

  3.   

    mq612 请问哈 serialVersionUID = -3094977414157589758L;是什么意思 是不是table.updateUI()的使用。 这个serialVersionUID = -3094977414157589758L值设置有什么讲究吗!?
      

  4.   

    serialVersionUID  你可以不管它。那个是一个唯一标志符,反序列化时候用的。
    如果你实现了 Serializable 接口,eclipse就会提示你要加那个字段。
      

  5.   

    楼上正确
    在Eclipse中自动设置serialVersionUID,不用管
      

  6.   

    就一个字,能!
    swing可以做出非常复杂,非常灵活的界面来,只要你定义一个绘制器,编辑器,那么在里面可以放任意的东西,甚至是一个窗体。这也意味着,swing非常复杂,难度系数极高,几乎是不可能精通的。