[英]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;
}
});
}
您的代码没有多大意义。 您无需对model
, c
或insets
变量执行任何操作。
但是更改渲染器确实很简单。 子类化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.