Hello Miguel

The problem is simple. The getRootPane() method calls SwingUtilities.getRootPane(Component c). That method loops on a call to getParent, like this:

        for( ; c != null; c = c.getParent()) {
            if (c instanceof JRootPane) {
                return (JRootPane)c;
            }
        }

The trouble is that anything placed on a menu doesn't belong to the standard hierarchy. JMenus use a JPopupMenu, and JPopupMenus don't have a parent, they have an invoker.

An obvious fix would be to override getParent() in JPopupMenu to call getInvoker() and return that. This doesn't work. The getInvoker() method returns a Component, but getParent() returns a Container. I can work around this, but it breaks the menu code.

The fix is to complicate the loop on c = c.getParent(), by checking for JMenuItems and handling them differently. This slows the loop down, so I don't want to do that in Swing Utilities, because there's no need for the more complicated loop for most components. Instead, I plan to override getRootPane() in JMenuItem.

This sounds like a good idea


This is complicated by the fact that not all JMenuItems are broken. JMenus are subclasses of JMenuItem, and they have a valid parent (unless they're a submenu). But that should be easy to work around.

I'll have some code in a day or two. I'll include a test program. Are there any constraints I should know about for the test program?

We use jtreg harness for our regression tests

http://openjdk.java.net/jtreg/index.html

It might look a bit messy,
but actually it's quite simple to write a test with jtreg

In your case, I imagine, you'd check JMenuItem.getRootPane()
and throw RuntimeException if it is null just like with JUnit


Thanks
alexp


-- Miguel Muñoz


On Sep 20, 2007, at 6:55 AM, Alexander Potochkin wrote:

Hello Miguel

I plan to fix bug 6499857. There are a couple of approaches, but I think I know the best way to fix it. Has anybody else looked at this?

Currently no one works on this fix
so you are welcome to start with it !

Thanks
alexp

-- Miguel Muñoz
___________________
There are 10 kinds of people: Those who know binary and those who don't.


___________________

There are 10 kinds of people: Those who know binary and those who don't.



Reply via email to