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






Reply via email to