简体   繁体   English

paintComponent和getTableCellRendererComponent没有被调用

[英]paintComponent and getTableCellRendererComponent not getting called

I am setting the renderer of a JTable using setDefaultTableRenderer. 我正在使用setDefaultTableRenderer设置JTable的渲染器。

JTable table = new JTable();
table.setDefaultRenderer(Object.class,MyRenderer);

MyRenderer extends DefaultTableCellRenderer and overrides paintComponent and getTableCellRendererComponent. MyRenderer扩展DefaultTableCellRenderer并覆盖paintComponent和getTableCellRendererComponent。

I have 4 rows and 8 columns and for strange reason my renderer methods are not called for first two columns of the first row.I use the SwingUtilites.invoke methods to call my GUI and its working for all other columns except these two columns. 我有4行8列,出于奇怪的原因,第一行的前两列没有调用我的渲染器方法。我使用SwingUtilites.invoke方法来调用我的GUI及其对除这两列之外的所有其他列的工作。

Without seeing your code I only can guess, but I think you probably have your own TableModel, which returns column.class for each column. 没有看到您的代码,我只能猜测,但是我认为您可能有自己的TableModel,它为每一列返回column.class。 JTable has DefaultCellRenderer for some of those classes, like Integer, etc. So probably your first columns are Integer columns, which results in JTable using its own renderer. JTable对于其中的某些类(例如Integer等)具有DefaultCellRenderer。因此,您的第一列可能是Integer列,这导致JTable使用其自己的渲染器。

To avoid this, you just have to override the Integer.class renderer: 为了避免这种情况,您只需要重写Integer.class渲染器即可:

table.setDefaultRenderer( Integer.class, myRenderer );

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

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