我知道如何嵌入checkbox,combobox,但是去无法嵌入JList,我采用继承TableCellRenderer的办法:
class TableCellTextAreaRenderer implements javax.swing.table.TableCellRenderer
 {        private JScrollPane jPanel;
        private JList jList;
        public TableCellTextAreaRenderer() { 
            jPanel=new JScrollPane();
            jList=new JList();
            jPanel.add(jList);
            jPanel.setPreferredSize(new Dimension(50, 50));
        } public java.awt.Component getTableCellRendererComponent(JTable table, 
                                                        Object value,
                                                        boolean isSelected, 
                                                        boolean hasFocus, 
                                                        int row, 
                                                        int column)         { 
                if(row==1&&column==1){
                        jList.setListData(new String[]{"test1","test2"});
                }else{
                        jList.setListData(new String[]{"hehe1","hehe2"});
                }
                return jPanel;
        } 
}但是JList却显示不出来。
是不是因为渲染器中的getTableCellRendererComponent不能返回JSCrollPane类型啊?我把JSCrollPane对象替换成JPanel:
             private JPanel jPanel;
           jPanel=new JPanel();
可以在JTable中显示出列表,但是却完全没有一个JList该有的行为(比如选择的高亮效果等等),整个就是一个Lable了。请问这是怎么回事?我的目的就是想想Table中嵌入一个列表(不是下拉列表)。

解决方案 »

  1.   

    頂一個     你試試這個呢 · getTableCellEditorComponent  
     我都是用這個TableCellEditor     
    我也沒試過嵌入jlist的~
    這個是api里面的解釋 
    This interface defines the method any object that would like to be an editor of values for components such as JListBox, JComboBox, JTree, or JTable needs to implement. 
      

  2.   

    随便写了一个简单的,呵呵,仅供参考!package hzpackage.demo.test;import hzpackage.swing.com.table.HzSortTable;import java.awt.Dimension;
    import java.util.Vector;import javax.swing.DefaultCellEditor;
    import javax.swing.JCheckBox;
    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.TableColumn;public class TableDemo2 extends JFrame { private JScrollPane scrollPanel;
    private JTable table;
    private MyTableModel tableModel; public TableDemo2() {
    scrollPanel = new JScrollPane();
    String[] tableHead = { "Namehh", "CheckBox", "ComboBox" };
    tableModel = new MyTableModel(tableHead, 0);
    tableModel.addRow(new Object[] { "001", new Boolean(false), "" });
    tableModel.addRow(new Object[] { "002", new Boolean(false), "" });
    tableModel.addRow(new Object[] { "003", new Boolean(false), "" });
    tableModel.addRow(new Object[] { "004", new Boolean(true), "" });
    tableModel.addRow(new Object[] { "005", new Boolean(true), "" });
    table = new HzSortTable();
    table.setModel(tableModel); TableColumn comBoxColumn1 = table.getColumnModel().getColumn(1);
    JCheckBox checkBox = new JCheckBox();
    comBoxColumn1.setCellEditor(new DefaultCellEditor(checkBox)); TableColumn comBoxColumn2 = table.getColumnModel().getColumn(2);
    JComboBox comboBox = new JComboBox();
    comboBox.addItem("BeiJing");
    comboBox.addItem("HangZhou");
    comboBox.addItem("ZhouShan");
    comboBox.addItem("NingBo");
    comboBox.addItem("ShangHai");
    comboBox.addItem("NanJing");
    comBoxColumn2.setCellEditor(new DefaultCellEditor(comboBox)); table.repaint();
    scrollPanel.setViewportView(table); this.getContentPane().add(scrollPanel);
    this.setSize(new Dimension(500, 500));
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    this.setVisible(true);
    } class MyTableModel extends DefaultTableModel { public MyTableModel(String[] tableHead, int column){
    super(tableHead, column);
    }
    public MyTableModel(Vector data, Vector columns) {
    super(data, columns);
    } public boolean isCellEditable(int row, int column) {
    //设置 单元格 能否编辑
    return true;
    } public Class<?> getColumnClass(int columnIndex) { if (columnIndex == 1) { // 设置第几列 是 checkbox
    return Boolean.class;
    }
    return Object.class;
    } } public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    new TableDemo2();
    }
    });
    }
    }
      

  3.   

    光实现render是不行的,那个只是表现
    还需要实现editor,这样list的单元格才能有list的行为
      

  4.   

    6楼的答复说到点子上了。CellRender控制的是界面的显示风格,表示这个单元在不操作的时候显示成什么样子。CellEditor控制的是当这个单元格被选中进入编辑模式后的展现。你可以去看看demo里面那个示例的Jtable就明白了