要求:  
    JTable的行数是动态生成,如果(int line)传入n则生成n个单选按钮
    请给源码,谢谢

解决方案 »

  1.   

    说实话没太明白想要一个什么样的效果。
    简单写了一个,仅供参考。
    import javax.swing.*;
    import javax.swing.table.*;
    import javax.swing.JRadioButton;
    import javax.swing.ButtonGroup;
    import java.awt.*;
    import java.util.*;
    public class TableTest extends JFrame {
    public TableTest () {
    Vector cell ;
    Vector row = new Vector(); DefaultTableModel tableModel = new DefaultTableModel(); String[] tableHeads = {"序号","姓名", "年龄", "单选框"};
    Vector tableHeadName = new Vector();
    for (int i = 0; i < tableHeads.length; i++) {
    tableHeadName.add(tableHeads[i]);
    }
    for (int i = 1; i <= 30; i++) {
    cell = new Vector();
    cell.add(i);
    cell.add("曹操"+i);
    cell.add(""); cell.add(new JRadioButton("",true));
    row.add(cell);
    } tableModel.setDataVector(row, tableHeadName);
    JTable table = new JTable (tableModel); TableColumn column;
    column=table.getColumnModel().getColumn(3);
                    column.setCellRenderer(new   MyTableCellRenderer());
      
       JScrollPane scrollPane = new JScrollPane(table);
    this.getContentPane().add(scrollPane);
    this.setTitle("Table表格的例子");
    this.setSize(600, 300);
    this.setVisible(true);
    }
    public static void main(String[] args) {
    TableTest test = new TableTest ();
    }
    }class MyTableCellRenderer extends JRadioButton implements TableCellRenderer{   
    public MyTableCellRenderer() {   
             super();   
    }   
          
    public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column)   {   
    if(hasFocus){   
                   this.setSelected(true); 
                    }else{   
    this.setSelected(false); 
                    }   
            return   this;   
            }   
    }   
      

  2.   

    http://www.crionics.com/products/opensource/faq/swing_ex/src/examples/JRadioButtonTableExample.java写swing的话那边有不少好的实例的
      

  3.   

    看看是如何将没列渲染成不同的列的import java.awt.Color;
    import java.awt.Component;
    import java.lang.ref.WeakReference;
    import java.util.ArrayList;
    import java.util.EventObject;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JComboBox;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JRadioButton;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.UIManager;
    import javax.swing.event.CellEditorListener;
    import javax.swing.event.ChangeEvent;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableModel;/**
     * @version 1.0
     */
    public class TestRendererJTableAll extends JFrame{
        /** serialVersionUID = 1L. */
        private static final long serialVersionUID = 1L;
        public TestRendererJTableAll() {
            int tableRow = 10;
            int tableColumn = 6;
            Object[][] datas = new Object[tableRow][tableColumn];
            Object[] names = new Object[tableColumn];
            for (int r = 0; r < tableRow; r++) {
                for (int c = 0; c < tableColumn; c++) {
                    datas[r][c] = "(" + String.valueOf(r) + "," + String.valueOf(c) + ")";
                }
            }
            for (int c = 0; c < tableColumn; c++) {
                names[c] = c;
            }
            JTable table = new CustomTable(datas, names);
            add(new JScrollPane(table));
        }    /**
         * @author ems
         */
        class CustomTable extends JTable {        /** serialVersionUID = 1L */
            private static final long serialVersionUID = 1L;        /**
             * 
             */
            public CustomTable() {
                super();
            }        /**
             * @param dm
             */
            public CustomTable(TableModel dm) {
                super(dm, null, null);
            }        /**
             * @param rowData
             * @param columnNames
             */
            public CustomTable(final Object[][] rowData, final Object[] columnNames) {
                super(rowData, columnNames);
                setRowHeight(super.getRowHeight() + 5);
            }        /**
             * @see javax.swing.JTable#getCellRenderer(int, int)
             */
            @Override
            public TableCellRenderer getCellRenderer(int row, int column) {
                return new JComponentTableCellRenderer(column);
            }        /**
             * @see javax.swing.JTable#getCellEditor(int, int)
             */
            @Override
            public TableCellEditor getCellEditor(int row, int column) {
                return new JComponentTableCellRenderer(column);
            }    }    /**
         * @author ems
         */
        class JComponentTableCellRenderer extends JComponent implements
            TableCellRenderer,
            TableCellEditor {        final Color SELECTION_BACKGROUND = UIManager.getColor("TextField.selectionBackground");        final Color SELECTION_FOREGROUND = UIManager.getColor("TextField.selectionForeground");        private ArrayList<WeakReference> listeners = new ArrayList<WeakReference>();
            private static final long serialVersionUID = 1L;
            private JComponent component_ = null;
            private int type_ = 0;        public JComponentTableCellRenderer(int type) {
                this.type_ = type;
            }        /**
             * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable,
             *      java.lang.Object, boolean, boolean, int, int)
             */
            @Override
            public Component getTableCellRendererComponent(JTable table,
                                                           Object value,
                                                           boolean isSelected,
                                                           boolean hasFocus,
                                                           int row,
                                                           int column) {
                if (null == value) {
                    return null;
                }
                setComponent(value);
                this.component_.setOpaque(true);
                if (isSelected) {
                    this.component_.setBackground(SELECTION_BACKGROUND);
                    this.component_.setForeground(SELECTION_FOREGROUND);
                }
                if (hasFocus) {
                    this.component_.setBackground(Color.GREEN);
                    this.component_.setForeground(Color.BLUE);
                }
                return this.component_;
            }        private void setComponent(Object value) {
                switch (this.type_) {
                    case 1: // JButton
                    case 2: // JButton
                        this.component_ = new JButton();
                        ((JButton) this.component_).setText(value.toString());
                        break;
                    case 3: // JComboBox
                        this.component_ = new JComboBox();
                        ((JComboBox) this.component_).addItem(value);
                        ((JComboBox) this.component_).addItem("test 1");
                        ((JComboBox) this.component_).addItem("test 2");
                        break;
                    case 4: // JCheckBox
                        this.component_ = new JCheckBox();
                        if (value.equals(true)) {
                            ((JCheckBox) this.component_).setSelected(true);
                        } else if (value.equals(false)) {
                            ((JCheckBox) this.component_).setSelected(false);
                        }
                        break;
                    case 5: // JRadioButton
                        this.component_ = new JRadioButton();
                        if (value.equals(true)) {
                            ((JRadioButton) this.component_).setSelected(true);
                        } else if (value.equals(false)) {
                            ((JRadioButton) this.component_).setSelected(false);
                        }
                        break;
                    default: // JLabel, default
                        this.component_ = new JLabel();
                        ((JLabel) this.component_).setText(value.toString());
                }
                this.component_.setBorder(null);
            }        @Override
            public Component getTableCellEditorComponent(JTable table,
                                                         Object value,
                                                         boolean isSelected,
                                                         int row,
                                                         int column) {
                setComponent(value);
                return this.component_;
            }        @Override
            public void addCellEditorListener(CellEditorListener l) {
                listeners.add(new WeakReference(l));
            }        @Override
            public void cancelCellEditing() {
                fireEditingCanceled();
            }        @Override
            public Object getCellEditorValue() {
                Object value = null;
                switch (this.type_) {
                    case 1: // // JButton
                        value = ((JButton) this.component_).getText();
                        break;
                    case 2: // JButton
                        value = ((JButton) this.component_).getText();
                        break;
                    case 3: // JComboBox
                        value = ((JComboBox) this.component_).getSelectedItem();
                        break;
                    case 4: // JCheckBox
                        value = ((JCheckBox) this.component_).isSelected();
                        break;
                    case 5: // JRadioButton
                        value = ((JRadioButton) this.component_).isSelected();
                        break;
                    default: // JLabel, default
                        value = ((JLabel) this.component_).getText();
                }
                return value;
            }        @Override
            public boolean isCellEditable(EventObject anEvent) {
                return true;
            }        @Override
            public void removeCellEditorListener(CellEditorListener l) {
                this.listeners.remove(new WeakReference(l));
            }        @Override
            public boolean shouldSelectCell(EventObject anEvent) {
                return true;
            }        @Override
            public boolean stopCellEditing() {
                fireEditingStopped();
                return true;
            }        protected void fireEditingStopped() {
                ChangeEvent e = new ChangeEvent(this.component_);
                for (WeakReference ref : this.listeners) {
                    CellEditorListener l = (CellEditorListener) ref.get();
                    l.editingStopped(e);
                }
            }        protected void fireEditingCanceled() {
                ChangeEvent e = new ChangeEvent(this.component_);
                for (WeakReference ref : this.listeners) {
                    CellEditorListener l = (CellEditorListener) ref.get();
                    l.editingCanceled(e);
                }
            }    }
        public static void main(String[] args){
         new TestRendererJTableAll().setVisible(true);
        }}