Java JTable的使用

2025-11-21 08:15:50

1、设置单元格的渲染器为复选框,如下:

//设置表格和表头的默认渲染器

simpleTable.setDefaultRenderer(Object.class, simpleTableRender);

simpleTable.getTableHeader().setDefaultRenderer(headerRenderer);

//设置单元格的渲染器

checkBoxRenderer = new CheckBoxRenderer(simpleTable);       simpleTable.getColumnModel().getColumn(0).setCellRenderer(checkBoxRenderer);

Java JTable的使用

2、设置单元格的渲染器和编辑器为下拉框,如下:

simpleTable.getColumnModel().getColumn(3).setCellRenderer(comboBoxRenderer);      simpleTable.getColumnModel().getColumn(3).setCellEditor(comboBoxCellEditor); 

Java JTable的使用

3、设置排序方法,如下:

sorter = new TableRowSorter<LogonStatusTableModel>((LogonStatusTableModel) simpleTable.getModel());

simpleTable.setRowSorter(sorter);

ArrayList<SortKey> list = new ArrayList<SortKey>();

list.add(new TableRowSorter.SortKey(1, SortOrder.ASCENDING));

sorter.setSortKeys(list);

sorter.sort();

sorter.setSortable(0, false);

4、设置表头的排序标识按钮,如下:

simpleTable.getTableHeader().addMouseListener(new HeaderMouseListener());

class HeaderMouseListener extends MouseAdapter {

        @Override

        public void mouseClicked(MouseEvent e) {

            JTableHeader h = (JTableHeader) e.getSource();

            TableColumnModel columnModel = h.getColumnModel();

            TableCellRenderer tcr = h.getDefaultRenderer();

            int viewColumn = columnModel.getColumnIndexAtX(e.getX());

            if (viewColumn < 0)

                return;

            int column = columnModel.getColumn(viewColumn).getModelIndex();

            if (column != -1 && tcr instanceof LogonStatusContentHeaderRenderer) {

                LogonStatusContentHeaderRenderer sbr = (LogonStatusContentHeaderRenderer) tcr;

                sbr.setSelectedColumn(column);

            }

        }

        @Override

        public void mouseReleased(MouseEvent e) {

            ((JTableHeader) e.getSource()).repaint();

        }

    }

Java JTable的使用

5、 设置数据返回值类型,如下:

//返回布尔值

@Override  

public Class<?> getColumnClass(int columnIndex) {

        if (columnIndex == 0)

            return Boolean.class;

        else

            return super.getColumnClass(columnIndex);

}

//返回Double类型,排序时会按Double类型排序

@Override

public Class<?> getColumnClass(int columnIndex) {

        if(columnIndex==2){

            return Double.class;

        }else

            return super.getColumnClass(columnIndex);

}

6、设置某一列是否可以编辑,如下:

public boolean isCellEditable(int row, int column) {

        if (row >= 0) {

            SysParamStruct info = localMap.get(String.valueOf(row));

            if (info == null) {

                System.out.println("info   null");

            }

            if (info != null) {

                

                if (columnsOrder.elementAt(column) == EnumSysParaColumn.VALUE) {

                    return true;

                }

                if (columnsOrder.elementAt(column) == EnumSysParaColumn.STATUS) {

                    return true;

                }

            }

        }

        return false;

    }

7、设置列的值,如下:

public Object getValueAt(int row, int column) {

                    

        if (row >= 0) {

            SysParamStruct info = localMap.get(String.valueOf(row));

            if (info == null) {

                System.out.println("info   null");

            }

            

            if (info != null) {

                

                if (columnsOrder.elementAt(column) == EnumSysParaColumn.PARA_NAME) {

                    return info.getShortDesc();

                } else if (columnsOrder.elementAt(column) == EnumSysParaColumn.PARA_DESC) {

                    return info.getLongDesc();

                } else if (columnsOrder.elementAt(column) == EnumSysParaColumn.VALUE) {

                    return info.getValue();

                }  else if (columnsOrder.elementAt(column) == EnumSysParaColumn.STATUS) {

                    return info.getStatus();

                }            

                

            }

            

        }

        return "";

    }

8、使编辑的列值生效,如下:

public void setValueAt (Object value, int row, int column) {

        SysParamStruct info = localMap.get(String.valueOf(row));

        if (columnsOrder.elementAt(column) == EnumSysParaColumn.VALUE) {

            info.setValue((String) value);

            localMap.put(String.valueOf(row), info);

        }

        if (columnsOrder.elementAt(column) == EnumSysParaColumn.STATUS) {

            char status = 0;

            switch ((StatusType)value) {

                case Active :

                    status = StatusType.Active.getValue();

                    break;

                case Suspended :

                    status = StatusType.Suspended.getValue();              

                    break;

                case Deleted :

                    status = StatusType.Deleted.getValue();

                    break;

                default :

                    break;

            }

            

            info.setStatus(status);

            localMap.put(String.valueOf(row), info);

        }

        fireTableCellUpdated(row, column);

    }

9、ComboBoxRenderer里面的内容,如下:

@Override

    public Component getTableCellRendererComponent(

        JTable table,

        Object value,

        boolean isSelected,

        boolean hasFocus,

        int row,

        int column) {

        oddColor = ResManager.getColor("Trade.OrderBook.TableCell.OddColor");

        evenColor = ResManager.getColor("Trade.OrderBook.TableCell.EvenColor");

        fgColor = ResManager.getColor("Trade.OrderBook.TableCell.textColor");

        highlightBgColor = HVResMgr.getColor("Trade.OrderBook.TableCell.HighlightColor");

        //set line background color

        if ((row % 2) == 0) {

            bgColor = oddColor;

        }

        else {

            bgColor = evenColor;

        }

        // set highlight color

        if (isSelected) {

            bgColor = highlightBgColor;

        }

        //calculate the font size

        double ratio = 1.0;

        if (table instanceof BaseTable) {

            ratio = ((BaseTable) table).getRatio();

        }

        int fontSize = (int) (font.getSize() * ratio);

        font = new Font(font.getName(), font.getStyle(), fontSize);

        this.comboBox.setBorder(null);

        this.comboBox.setBackground(bgColor);

        this.comboBox.setForeground(fgColor);

        if (column == 3) {

            StatusType status = null;

            switch ((Character) value) {

                case 'A' :

                    status = StatusType.Active;

                    break;

                case 'S' :

                    status = StatusType.Suspended;

                    break;

                case 'D' :

                    status = StatusType.Deleted;

                    break;

                default :

                    break;

            }

            this.comboBox.setSelectedItem(status);

        }

        return this.comboBox;

    }

10、ComboBoxCellEditor里面的内容,如下:

public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

        if (column == 3) {

            StatusType status = null;

            switch ((Character) value) {

                case 'A' :

                    status = StatusType.Active;

                    break;

                case 'S' :

                    status = StatusType.Suspended;

                    break;

                case 'D' :

                    status = StatusType.Deleted;

                    break;

                default :

                    break;

            }

            this.comboBox.setSelectedItem(status);

        }

        return this.comboBox;

    }

    @Override

    public Object getCellEditorValue() {

        return this.comboBox.getSelectedItem();

    }

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢