【发布时间】:2018-04-19 11:18:26
【问题描述】:
您好,我正在处理 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;
}
});
}
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
-
更好的解决方案是设计一个委托模式,该模式将应用于每一列,以便调用一系列委托以可插入的方式提供呈现功能
-
这实际上很难看起来。只使用默认 API,您将需要一个处理行着色的基本渲染器类,然后将其用作所有其他渲染器的父类。这并不总是可能的,也不是特别漂亮,而且很快就会成为管理难题。相反,您可以使用众多糖果剥离 API 之一,例如 as this example
标签: java swing jtable tablecellrenderer cellrenderer