DefaultTableCellRenderer getTableCellRendererComponent 永远不会被调用

编程入门 行业动态 更新时间:2024-10-28 02:20:14
本文介绍了DefaultTableCellRenderer getTableCellRendererComponent 永远不会被调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我需要在 JTable 中呈现一个 java.util.Date.我已经实现了一个扩展 DefaultTableCellRenderer 的自定义渲染器(代码如下).我已将其设置为列的渲染器,但从未调用方法 getTableCellRendererComponent().

I need to render a java.util.Date in a JTable. I've implemented a custom renderer that extends DefaultTableCellRenderer (code appears below). I've set it as the renderer for the column, but the method getTableCellRendererComponent() never gets called.

这是一个很常见的问题,但我见过的解决方案都没有.

This is a pretty common problem, but none of the solutions I've seen work.

public class DateCellRenderer extends DefaultTableCellRenderer { String sdfStr = "yyyy-MM-dd HH:mm:ss.SSS"; SimpleDateFormat sdf = new SimpleDateFormat(sdfStr); public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (value instanceof Date) { this.setText(sdf.format((Date) value)); } else logger.info("class: " + value.getClass().getCanonicalName()); return this; } }

我已经像这样安装了自定义渲染器(并验证它已安装):

I've installed the custom renderer (and verified that it has been installed) like this:

DateCellRenderer dcr = new DateCellRenderer(); table.getColumnModel().getColumn(2).setCellRenderer(dcr);

我也试过

table.setDefaultRenderer( java.util.Date.class, dcr );

知道为什么安装了渲染器,但从未调用过吗?

Any idea why the renderer gets installed, but never called?

推荐答案

我用你的渲染器写了以下代码,没有发现问题.我希望这会有所帮助.

I wrote the following code with your renderer and found no problem. I hope this helps.

import java.awt.BorderLayout; import java.awt.Component; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Vector; import javax.swing.JFrame; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; public class DateCellRenderer extends DefaultTableCellRenderer { private static final long serialVersionUID = 4685939347849124147L; String sdfStr = "yyyy-MM-dd HH:mm:ss.SSS"; SimpleDateFormat sdf = new SimpleDateFormat(sdfStr); public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (value instanceof Date) { this.setText(sdf.format((Date) value)); } else { System.out.println("class: " + value.getClass().getCanonicalName()); } return this; } public static void main(String[] args) { // Create new Frame JFrame frame = new JFrame("Debug Frame"); frame.setSize(200, 200); frame.setLayout(new BorderLayout()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); DefaultTableModel data = new DefaultTableModel(); // add one colunb to the data model data.addColumn("Testing"); Vector<Date> dates = new Vector<Date>(); dates.add(new Date(Calendar.getInstance().getTimeInMillis())); data.addRow(dates); data.addRow(dates); data.addRow(dates); JTable table = new JTable(data); DateCellRenderer dcr = new DateCellRenderer(); table.getColumnModel().getColumn(0).setCellRenderer(dcr); frame.add(table, BorderLayout.CENTER); frame.setVisible(true); } }

更多推荐

DefaultTableCellRenderer getTableCellRendererComponent 永远不会被调用

本文发布于:2023-11-08 09:40:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1569027.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:永远不会   DefaultTableCellRenderer   getTableCellRendererComponent

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!