我想在JTable第一列加入JCheckbox,第三列加入JList,可我是初学,不会用。还请有耐心的大哥或大姐帮忙解决下。

解决方案 »

  1.   

    import javax.swing.*;
    import java.awt.*;public class TableRenderDemo extends JPanel {
        private boolean DEBUG = false;    public TableRenderDemo() {
            super(new GridLayout(1,0));        JTable table = new JTable(new MyTableModel());
            table.setPreferredScrollableViewportSize(new Dimension(500, 70));
            JScrollPane scrollPane = new JScrollPane(table);
            initColumnSizes(table);
            setUpSportColumn(table, table.getColumnModel().getColumn(2));
            add(scrollPane);
        }
        private void initColumnSizes(JTable table) {
            MyTableModel model = (MyTableModel)table.getModel();
            TableColumn column = null;
            Component comp = null;
            int headerWidth = 0;
            int cellWidth = 0;
            Object[] longValues = model.longValues;
            TableCellRenderer headerRenderer =
                table.getTableHeader().getDefaultRenderer();
            for (int i = 0; i < 5; i++) {
                column = table.getColumnModel().getColumn(i);
                comp = headerRenderer.getTableCellRendererComponent(
                                     null, column.getHeaderValue(),
                                     false, false, 0, 0);
                headerWidth = comp.getPreferredSize().width;
                comp = table.getDefaultRenderer(model.getColumnClass(i)).
                                 getTableCellRendererComponent(
                                     table, longValues[i],
                                     false, false, 0, i);
                cellWidth = comp.getPreferredSize().width;
                column.setPreferredWidth(Math.max(headerWidth, cellWidth));
            }
        }    public void setUpSportColumn(JTable table, TableColumn sportColumn) {
            JComboBox comboBox = new JComboBox();
            comboBox.addItem("Snowboarding");
            comboBox.addItem("Rowing");
            comboBox.addItem("Knitting");
            comboBox.addItem("Speed reading");
            comboBox.addItem("Pool");
            comboBox.addItem("None of the above");
            sportColumn.setCellEditor(new DefaultCellEditor(comboBox));        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
            renderer.setToolTipText("Click for combo box");
            sportColumn.setCellRenderer(renderer);
        }    class MyTableModel extends AbstractTableModel {
            private String[] columnNames = {"First Name","Last Name", "Sport", "# of Years", "Vegetarian"};
            private Object[][] data = {
                {"Mary", "Campione",
                 "Snowboarding", new Integer(5), new Boolean(false)},
                {"Alison", "Huml",
                 "Rowing", new Integer(3), new Boolean(true)},
                {"Kathy", "Walrath",
                 "Knitting", new Integer(2), new Boolean(false)},
                {"Sharon", "Zakhour",
                 "Speed reading", new Integer(20), new Boolean(true)},
                {"Philip", "Milne",
                 "Pool", new Integer(10), new Boolean(false)}
            };        public final Object[] longValues = {"Sharon", "Campione",
                                                "None of the above",
                                                new Integer(20), Boolean.TRUE};        public int getColumnCount() {
                return columnNames.length;
            }        public int getRowCount() {
                return data.length;
            }        public String getColumnName(int col) {
                return columnNames[col];
            }        public Object getValueAt(int row, int col) {
                return data[row][col];
            }
            public Class getColumnClass(int c) {
                return getValueAt(0, c).getClass();
            }
            public boolean isCellEditable(int row, int col) {
                //Note that the data/cell address is constant,
                //no matter where the cell appears onscreen.
                if (col < 2) {
                    return false;
                } else {
                    return true;
                }
            }
            public void setValueAt(Object value, int row, int col) {
                if (DEBUG) {
                    System.out.println("Setting value at " + row + "," + col
                                       + " to " + value
                                       + " (an instance of "
                                       + value.getClass() + ")");
                }            data[row][col] = value;
                fireTableCellUpdated(row, col);       }        private void printDebugData() {
                int numRows = getRowCount();
                int numCols = getColumnCount();            for (int i=0; i < numRows; i++) {
                    System.out.print("    row " + i + ":");
                    for (int j=0; j < numCols; j++) {
                        System.out.print("  " + data[i][j]);
                    }
                    System.out.println();
                }
                System.out.println("--------------------------");
            }
        }
        private static void createAndShowGUI() {
            //Make sure we have nice window decorations.
            JFrame.setDefaultLookAndFeelDecorated(true);
            JFrame frame = new JFrame("TableRenderDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            TableRenderDemo newContentPane = new TableRenderDemo();
            newContentPane.setOpaque(true); //content panes must be opaque
            frame.setContentPane(newContentPane);
            frame.pack();
            frame.setVisible(true);
        }
        public static void main(String[] args) {
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }
      

  2.   

    大哥呀,为什么
     public void setUpSportColumn(JTable table, TableColumn sportColumn) {
            JComboBox comboBox = new JComboBox();
            comboBox.addItem("Snowboarding");
            comboBox.addItem("Rowing");
            comboBox.addItem("Knitting");
            comboBox.addItem("Speed reading");
            comboBox.addItem("Pool");
            comboBox.addItem("None of the above");
            sportColumn.setCellEditor(new DefaultCellEditor(comboBox));        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
            renderer.setToolTipText("Click for combo box");
            sportColumn.setCellRenderer(renderer);
        }
    函数的参数 TableColumn sportColumn  的TableColumn报错呀,
    我自己写的
     setColum(tt,tt.getColumnModel().getColumn(0));
      public void setColum(JTable t,这写的不对报错  supercolum){
          JCheckBox box=new JCheckBox();
          supercolum.setCellEditor(new DefaultCellEditor(box));
         // DefaultJTableCellRenderer renderer = new DefaultJTableCellRenderer();      
          //supercolum.setCellRenderer(renderer);   }
      

  3.   

    在java编程指南中,在jtable那一章,写得很清楚,你要的东西里面有,没时间给你写出来,但你可以自己去那里找,如果你没这本书,到百度搜索一下,很容易下载的,而且这本书中很多东西请得很清楚,想学swing更深的话,看java hacks也不错,有很多特效是其他书讲得很少的。
      

  4.   

    楼上的写二位谢谢啦 ,基本功能已经实现了,但是第一列的,JCheckBox为什么不是一个框里边有个勾呢,怎么是 true和false呀  这问题怎么解决呢?
      

  5.   

    true和false可能是renderer造成的吧。实在不知道自己实现个renderer就是了。我以前没太搞懂原理前就是这么做的。
      

  6.   

    public void setColum(JTable t ){
        int colum=t.getRowCount();
          for(int i=0;i<colum;i++){
          JCheckBox box=new JCheckBox();
          t.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(box));
              }
          // DefaultJTableCellRenderer renderer = new DefaultJTableCellRenderer();
         //supercolum.setCellRenderer(renderer);
       }
    我已经去掉了renderer,问题还是存在,上边是最新的代码
      

  7.   


    //设置表格"方式"列的单元格编辑器为组合框
    typeTable.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(typeComboBox));
      

  8.   

    上边的姐姐,我的程序第一列需要的就是复选框,我第三列是组合框,已经实现了功能了。
     现在的问题你看明白了,是第一列的复选框是true 和false,而不是一框里打勾的效果,还请知道的帮忙。一晚上就一人回我这要命的问题呀。
      

  9.   

    好了 我上边的问题都解决了,现在对swing 有了点了解了,可是以后要走的路还要很长呢?