应用渲染器时如何为Jtable单元格着色

时间:2017-11-07 06:35:39

标签: java swing jtable tablecellrenderer cellrenderer

您好我正在研究jtable,我必须使用单元格渲染器,以便在特定列中应用CurrencyRender。我也在每行应用着色离子。一切都很完美但是当我在我的numenric列中应用currencyRenderer时,它失去了背景颜色。这可能是由于添加了货币的细胞输送者。请建议我应该如何使用货币渲染器对列进行着色。这是我的代码

    this.installAllignment(this.tblDemandView.getColumnModel().getColumn(numAmount), SwingConstants.RIGHT);
    this.tblDemandView.getTableHeader().setReorderingAllowed(false);
    this.tblDemandView.getTableHeader().setResizingAllowed(true);
    tblDemandView.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    NumberFormat _formatf = NumberFormat.getNumberInstance();
    _formatf.setMinimumFractionDigits(2);
    _formatf.setMaximumFractionDigits(2);

    MyCurrencyRenderer _rendererf = new MyCurrencyRenderer(_formatf); 
    TableColumnModel _model = tblDemandView.getColumnModel();
    TableColumn _columnPu=_model.getColumn(_model.getColumnIndex("Amount"));
     _columnPur.setCellRenderer(_rendererf);

private void installAllignment(TableColumn tableColumn, final int alignmentCode) {

    tableColumn.setCellRenderer(new DefaultTableCellRenderer() {
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
                                                       boolean hasFocus, int row, int column) {
            Component myself =
                super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            setHorizontalAlignment(alignmentCode);

           DefaultTableModel model = (DefaultTableModel) table.getModel();
                  Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
     DefaultTableCellRenderer() {
            if (row == table.getRowCount() - 1) {
                Insets insets = new Insets(1, 0, 0, 0);

                // setBorder(BorderFactory.createLineBorder(Color.BLACK));
            }

            return myself;
        }
    });

}

2 个答案:

答案 0 :(得分:0)

你的代码没有多大意义。您不能对modelcinsets变量做任何事情。

但改变渲染器真的很微不足道。对TableColumn进行子类化并覆盖getTableCellRenderer。在正文中调用super方法生成默认渲染器组件,然后在返回之前设置背景。

或者,您可以实现自己的TableCellRenderer,然后在列上调用setTableCellRenderer而不是子类化。

这两种方法都可以正常使用,并且在不同情况下非常有用。

答案 1 :(得分:0)

  

一切都很完美但是当我在我的numenric列中应用currencyRenderer时,它失去了背景颜色。

我不知道您是否在谈论丢失选择背景颜色或用于自定义渲染的其他颜色。

尝试使用Table Row Rendering代替单元格渲染。此方法覆盖表的prepareRenderer(...)方法以进行自定义着色。

您可能还想在同一博客中查看Table Format Renderers。它展示了如何轻松创建自定义渲染器。

顺便说一句,渲染器中的代码对我没有意义:

Component myself = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setHorizontalAlignment(alignmentCode);

DefaultTableModel model = (DefaultTableModel) table.getModel();
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

我不知道你为什么要两次调用getTableCellRendererComponent(...)方法。