繁体   English   中英

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

[英]How to color Jtable cell when renderer is applied

嗨,我正在jtable上工作,而且我必须以某种方式使用单元格渲染器,以便在特定列中应用CurrencyRender。 我也每行都施加着色离子。 一切都很好,但是当我在数字列中应用currencyRenderer时,它失去了背景色。 这可能是由于添加了货币cellrenderer。 请建议我该如何使用货币渲染器为列上色。这是我的代码

    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;
        }
    });

}

您的代码没有多大意义。 您无需对modelcinsets变量执行任何操作。

但是更改渲染器确实很简单。 子类化TableColumn并重写getTableCellRenderer 在主体中调用super方法以生成默认的渲染器组件,然后在返回背景之前对其进行设置。

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

两种方法都可以正常工作,并且在不同情况下很有用。

一切都很好,但是当我在数字列中应用currencyRenderer时,它失去了背景色。

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

尝试使用表格行渲染而不是单元格渲染。 此方法将覆盖表的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(...)方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM