jMemorize - exception in JTable code: Fixed, but JFreeChart internal problem follows.

David Gilbert david.gilbert at object-refinery.com
Thu Mar 30 22:06:58 UTC 2006


The ChartPanel class overrides paintComponent(Graphics) and casts the 
incoming Graphics object the Graphics2D subclass - this is very common 
in Swing apps as a way to gain access to Java2D features for drawing on 
Swing components.  I'm almost certain that the Graphics object is 
guaranteed to be a Graphics2D instance, and the original method 
signature is maintained for backwards compatibility only, although this 
isn't mentioned in the API specification.  The only reference I've been 
able to find is this one in the Java tutorial:

http://java.sun.com/docs/books/tutorial/uiswing/14painting/practice.html

I think many applications are going to fail on our implementation until 
we get good Graphics2D support into our JComponent (many custom look and 
feel implementations rely on it, for starters).

Regards,

Dave

Audrius Meskauskas wrote:

> This is because jMemorize overrides the JTable.columnMarginChanged 
> that is fired from the JTable constructor, when the user -  derived 
> class is not yet initialised. This can be easily fixed by initialising 
> the table column model befor the table listeners are installed on it, 
> I have comitted such patch. Unfortunately, this brings us to the 
> second exception, related to the JFreeChart:
>
> java.lang.ClassCastException: gnu/java/awt/peer/gtk/GdkGraphics
>   at org.jfree.chart.ChartPanel.paintComponent (ChartPanel.java:905)
>   at javax.swing.JComponent.paint (JComponent.java:1583)
>   at javax.swing.JComponent.paintChildren (JComponent.java:1700)
>   at javax.swing.JComponent.paint (JComponent.java:1585)
>   at javax.swing.JComponent.paintChildren (JComponent.java:1700)
>   at javax.swing.JSplitPane.paintChildren (JSplitPane.java:538)
>   at javax.swing.JComponent.paint (JComponent.java:1585)
>   at javax.swing.JComponent.paintChildren (JComponent.java:1700)
>   at javax.swing.JComponent.paint (JComponent.java:1585)
>   at javax.swing.JComponent.paintChildren (JComponent.java:1700)
>   at javax.swing.JSplitPane.paintChildren (JSplitPane.java:538)
>   at javax.swing.JComponent.paint (JComponent.java:1585)
>   at javax.swing.JComponent.paintChildren (JComponent.java:1700)
>   at javax.swing.JComponent.paint (JComponent.java:1585)
>   at javax.swing.JComponent.paintChildren (JComponent.java:1700)
>   at javax.swing.JComponent.paint (JComponent.java:1585)
>   at javax.swing.JLayeredPane.paint (JLayeredPane.java:647)
>   at javax.swing.JComponent.paintChildren (JComponent.java:1700)
>
> Probably our JFreeChart experts could look at this.
>
> Regards
> Audrius.
>
> Robert Schuster wrote:
>
>> Hi,
>> I added jMemorize[0] to the list of Free Swing apps. I just stumbled 
>> over the
>> app and tried to run it but it fails with a NPE:
>>
>> java.lang.reflect.InvocationTargetException
>>   at java.lang.reflect.Method.invokeNative (Native Method)
>>   at java.lang.reflect.Method.invoke (Method.java:355)
>>   at jamvm.java.lang.JarLauncher.main (JarLauncher.java:50)
>> Caused by: java.lang.NullPointerException
>>   at jmemorize.gui.swing.CardTable.columnMarginChanged (Unknown Source)
>>   at javax.swing.table.DefaultTableColumnModel.fireColumnMarginChanged
>> (DefaultTableColumnModel.java:493)
>>   at javax.swing.table.DefaultTableColumnModel.setColumnMargin
>> (DefaultTableColumnModel.java:171)
>>   at javax.swing.JTable.setIntercellSpacing (JTable.java:2950)
>>   at javax.swing.JTable.initializeLocalVars (JTable.java:1720)
>>   at javax.swing.JTable.<init> (JTable.java:1664)
>>   at javax.swing.JTable.<init> (JTable.java:1582)
>>   at jmemorize.gui.swing.CardTable.<init> (Unknown Source)
>>   at jmemorize.gui.swing.FindFrame.<init> (Unknown Source)
>>   at jmemorize.gui.swing.MainFrame.<init> (Unknown Source)
>>   at jmemorize.core.Main.run (Unknown Source)
>>   at jmemorize.core.Main.main (Unknown Source)
>>   at java.lang.reflect.Method.invokeNative (Native Method)
>>   ...2 more
>>
>> Since there are some Swing hackers who frequently work on JTable this 
>> might be a
>> low hanging fruit for them.
>>
>> cya
>> Robert
>>
>> [0] - http://riad.de/jmemorize
>>  
>>
>
>
>
>




More information about the Classpath mailing list