Hi Sean,
Hi Pavel,

Thank you very much for testing on MacOS, I have windows and linux only for now.

The new patch is at: http://cr.openjdk.java.net/~zhouyx/OJDK-61/webrev.08/ <http://cr.openjdk.java.net/%7Ezhouyx/OJDK-61/webrev.08/> .
Your version of the test is wrong. Why did you remove realSync before hitting keys? It's possible that invokeLater with recentSwatchPanel.requestFocusInWindow will be executed AFTER all keys are pressed and the test will fail... Moreover requestFocusInWindow invocation doesn't guarantee that recentSwatchPanel has focus because of javadoc:
    * Developers must never
    * assume that this Component is the focus owner until this
    * Component receives a FOCUS_GAINED event.

Regards, Pavel.

Please have a look.

On Wed, Sep 12, 2012 at 4:30 PM, Pavel Porvatov <[email protected] <mailto:[email protected]>> wrote:

    Hi Sean,

    Unfortunately the test fails on MacOS. That's because JTabbedPane
    doesn't have focus after window is visible under AquaLAF. You can
    modify your test like this:


            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    selectedColor = colorChooser.getColor();

                    Component recentSwatchPanel =
    Util.findSubComponent(colorChooser, "RecentSwatchPanel");

                    if (recentSwatchPanel == null) {
                        throw new RuntimeException("RecentSwatchPanel
    not found");
                    }

                    recentSwatchPanel.requestFocusInWindow();
                }
            });

            toolkit.realSync();

            // Tab to move the focus to MainSwatch
            Util.hitKeys(robot, KeyEvent.VK_SHIFT, KeyEvent.VK_TAB);

            // Select the color on right
            Util.hitKeys(robot, KeyEvent.VK_RIGHT);
            Util.hitKeys(robot, KeyEvent.VK_RIGHT);
            Util.hitKeys(robot, KeyEvent.VK_SPACE);

    I checked, it works on Mac.

    After the changes
    1. There is no need to declare selectedColor as a volatile field
    2. Robot and Toolkit are used in one method and can be converted
    into local variables
    3. The click method can be removed

    Regards, Pavel


    Hi Pavel,

Thanks for the tip, it is modified.
    The new webrev is
    at: http://cr.openjdk.java.net/~zhouyx/OJDK-61/webrev.07/
    <http://cr.openjdk.java.net/%7Ezhouyx/OJDK-61/webrev.07/>   .

    Please take a look.


    On Tue, Sep 11, 2012 at 12:57 AM, Pavel Porvatov
    <[email protected] <mailto:[email protected]>> wrote:

        Hi Sean,

        The fix looks good but you are still using Swing components
        from different threads. There is a useful method:
        regtesthelpres.Util.invokeOnEDT

        Hi Pavel,

        I made a new patch, it is at
        http://cr.openjdk.java.net/~zhouyx/OJDK-61/webrev.06/
        <http://cr.openjdk.java.net/%7Ezhouyx/OJDK-61/webrev.06/> .
        Please take a look.

        About orientation, I also set mainSwatch's top-right corner
        as (0, 0), so the top-right color is white in right-to-left
        orientation.
        That ok.

        Regards, Pavel



        On Fri, Sep 7, 2012 at 10:15 PM, Pavel Porvatov
        <[email protected]
        <mailto:[email protected]>> wrote:

            HI Sean,
            Hi Pavel,

            Thanks for the comments. I have a question
about right-to-left orientation.
            As the effect of "this instanceof RecentSwatchPanel",
            with first version of  my patch is applied, if left key
            is pressed when choosing color on recentSwatch, it move
            the focus to the color on right side; but when choose
            color on mainSwatch, left is still left. And when the
            focus is on the tab, left key also move the focus to
            the tab on left side, as well as controls on other
            tabs. I only found this left-right reverse on
            RecentSwatchPanel, I removed the code related.  Can you
            give some information about what is the right behavior?
             Is it "default on top-right, grows from right-to-left,
            but left key still moves left" ?
            In right-to-left orientation all components are placed
            from right to left (as you can observe on JColorChooser
            for example), but the keys LEFT and RIGHT work as always.

            Regards, Pavel


            On Wed, Sep 5, 2012 at 9:32 PM, Pavel Porvatov
            <[email protected]
            <mailto:[email protected]>> wrote:

                Hi Sean,

                Still have some comments

                1. Could you please replace requestFocus by
                requestFocusInWindow? (read javadoc for the details)

                2. What's the reason to change
                -                setSelectedColor(color);
+ getColorSelectionModel().setSelectedColor(color);
                ?
                You removed null checking...

                In new code (e.g. in MainSwatchKeyListener) you
                could use setSelectedColor(color) as well.

                3. This code looks strange:
                     public boolean isFocusTraversable() {
                -        return false;
                +        return true;
                     }

                I believe we can remove this "hack" at all and just
                use setFocusable(true) in constructor...

                4. You are still using incorrect code formatting,
                e.g. in "getColorForCell(column,row);"

                5. You removed right-to-left orientation from the
                RecentSwatchPanel. Could you please explain that
                changes?

                6. About right-to-left orientation: I believe the
                default corner of the marker should be upper-right,
                but not upper-left. HOME and END keys should work
                according to orientation as well...

                The test should be fixed as well:

                a. What does line 75 mean?
                75         if (true) return ;
                b. Why Swing fields are volatile? Swing components
                are not thread safe and should be accessed only
                from the EDT
                c. What's the reason to have click(int...keys)
                instead of click(int key)?
                d. Constants should be in UPPER_CASE

                Regards, Pavel

                Hi Pavel,

                    I
                uploaded http://cr.openjdk.java.net/~zhouyx/OJDK-61/webrev.05/
                <http://cr.openjdk.java.net/%7Ezhouyx/OJDK-61/webrev.05/>
                 . And reported
                http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7194184
                .

                Some details about update:
                1. A testcase is added in this webrev, but it
                checks keyboard accessibility only. I tried to
                check right-to-left orientation with the testcase
                attached, but it doesn't work well on windows.

2. " g.setXORMode(Color.WHITE); g.setColor(Color.BLACK); " is not used because the
                mark is not obvious for light blue-pink area and
                dark green area, as this
                image: 
http://cr.openjdk.java.net/~zhouyx/OJDK-61/screenshot_4.png
                <http://cr.openjdk.java.net/%7Ezhouyx/OJDK-61/screenshot_4.png>
                 .

                Please take a look.

                On Wed, Aug 22, 2012 at 9:16 PM, Pavel Porvatov
                <[email protected]
                <mailto:[email protected]>> wrote:

                    Hi Sean,
                    Hi Pavel,

                         I updated the patch according to your
                    comments except No.1 and No.4, it is now at:
                     http://cr.openjdk.java.net/~zhouyx/OJDK-61/webrev.03/
                    <http://cr.openjdk.java.net/%7Ezhouyx/OJDK-61/webrev.03/>
.
                         About comment No.1 ( When right-to-left
                    orientation the Recent swatches inverts right
                    and left button ), I tried to set the locale
                    to ar_AE, but didn't get a visual result
                    about what I should do, please look
                    at 
http://cr.openjdk.java.net/~zhouyx/OJDK-61/screenshot_3.png
<http://cr.openjdk.java.net/%7Ezhouyx/OJDK-61/screenshot_3.png> . Can anyone give a little help on how to
                    produce a right-to-left orientation in demo
                    SwingSet2 or others?
                    I attached the test. It will be useful to add
                    some tests to your change (e.g. show
                    JColorChooser with right-to-left orientation,
                    pressing some keys by awt Robot and checking
                    the result)


                         About comment No.4(Why new listeners are
                    Serializable ), the original MouseListeners
                    in this class are Serializable  and I see
                    javadoc for Component class says "Developers
                    will need, as always, to consider the
                    implications of making an object serializable" .
                    You are absolutely right about serialization.
                    But if you take a look at components
                    serialization/deserialization you will see
                    that BEFORE serialization
                    javax.swing.plaf.ComponentUI#uninstallUI is
                    invoked and AFTER deserialization
                    javax.swing.plaf.ComponentUI#installUI is
                    invoked. So serialization is not broken when
                    new listeners added and removed correctly with
                    instalUI/uninstallUI methods.



                         Please take a look again, thanks.
                    Some additional comments below:
                    1. You should assign null to
                    mainSwatchKeyListener and
                    recentSwatchKeyListener in the
                    uninstallChooserPanel method
                    2. Do we have bug in bugs database for your
                    fix? If no, could you please file a bug with
                    correspondent description. Use that bug number
                    as a folder name for the webrev, please
                    3. The code can be a little bit optimized.
                    There is no need to call repaint every time in
                    code like this:
                    +                        if (selRow > 0) {
                    +                            selRow--;
                    +                        }
                    +                        repaint();

                    I'd prefer
                    +                        if (selRow > 0) {
                    +                            selRow--;
                    +                            repaint();
                    +                        }
                    In case KeyEvent.VK_HOME and KeyEvent.VK_END
                    such optimization doesn't look reasonable for
                    me...
                    4. Could you please follow our code guide
                    lines (spaces etc).
                    
http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-141388.html
                    5. I have some concerns about selection mark
                    in paintComponent:
                    a. On light swatches (e.g. on white) the mark
                    looks like it shifted on 1 pixel
                    b. The color selection looks tricky. Does the
                    following code from
                    DiagramComponent#paintComponent works
                                g.setXORMode(Color.WHITE);
                                g.setColor(Color.BLACK);
                    ?

                    Regards, Pavel

                    On Thu, Aug 16, 2012 at 10:00 PM, Pavel
                    Porvatov <[email protected]
                    <mailto:[email protected]>> wrote:

                        Hi Sean,

                        Updated the repository used in webrev
                        from jdk8-tl
                        to http://hg.openjdk.java.net/jdk8/awt/jdk
                         .

                        new
                        webrev: 
http://cr.openjdk.java.net/~zhouyx/OJDK-61/webrev.01/
<http://cr.openjdk.java.net/%7Ezhouyx/OJDK-61/webrev.01/>
                        I have the following comments about the fix:

                        1. When right-to-left orientation the
                        Recent swatches inverts right and left
                        button.
                        2. Could you please don't use package
                        visibility when fileds/methods/inner
                        classes can be private (e.g. field
                        mainSwatchKeyListener)
                        3. I think you should uninstall the
                        introduced listeners in the
                        DefaultSwatchChooserPanel#uninstallChooserPanel
                        method
                        4. Why new listeners are Serializable?
                        5. I recommend to use if condition
                        instead of switch/case blocks with one branch
                        6. Could you please rename selrow (and
                        similar variables) into selRow
                        7. Can we use Component#isFocusOwner
                        instead of supporting new variable
                        showcursor?
                        8. Could you please follow our code guide
                        lines (spaces etc)

                        Regards, Pavel



                        ---------- Forwarded message ----------
                        From: *Sean Chou*
                        <[email protected]
                        <mailto:[email protected]>>
                        Date: Thu, Aug 9, 2012 at 3:29 PM
                        Subject: <Swing Dev> Add keyboard
                        accessibility to JColorChooser swatch
                        To: [email protected]
                        <mailto:[email protected]>


                        Hi all,

                            This is a patch to add
                        keyboard accessibility to JColorChooser
                        swatch, so when using TAB, the focus can
                        move to SwatchPanel, choose color with
arrow keys and select color with space bar.
                        In current implementation, it is not
                        able to move the focus to SwatchPanel
                        with TAB, this can be seen in SwingSet2
demo. Steps: 1. run SwingSet2 demo 2. click on JColorChooser demo
                        3. click Background button and Swatches
                        panel appears.
                        4. Press Tab key     =>   focus moves to
                        OK button as shown in this
                        image 
http://cr.openjdk.java.net/~zhouyx/OJDK-61/screenshot_1.png
                        
<http://cr.openjdk.java.net/%7Ezhouyx/OJDK-61/screenshot_1.png>

                        With this patch, in step4, focus moves
                        to SwatchPanel, as shown
                        here 
http://cr.openjdk.java.net/~zhouyx/OJDK-61/screenshot_2.png
                        
<http://cr.openjdk.java.net/%7Ezhouyx/OJDK-61/screenshot_2.png>
                        Then, arrow keys can be used to choose
                        color and select color by space bar.

                        The webrev
                        is http://cr.openjdk.java.net/~zhouyx/OJDK-61/webrev.00/
                        
<http://cr.openjdk.java.net/%7Ezhouyx/OJDK-61/webrev.00/>
.
                        Please take a look.


-- Best Regards,
                        Sean Chou




-- Best Regards,
                        Sean Chou






-- Best Regards,
                    Sean Chou



                    import javax.swing.*;
                    import java.awt.*;

                    public class JColorChooserTest {
                        public static void main(String[] args) {
                            SwingUtilities.invokeLater(new
                    Runnable() {
                                @Override
                                public void run() {
                                    JFrame frame = new JFrame();

                                    JColorChooser chooser = new
                    JColorChooser();
chooser.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
                                    frame.add(chooser);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                    frame.setSize(600, 400);
                                    frame.setVisible(true);
                                }
                            });
                        }
                    }




-- Best Regards,
                Sean Chou





-- Best Regards,
            Sean Chou





-- Best Regards,
        Sean Chou





-- Best Regards,
    Sean Chou





--
Best Regards,
Sean Chou


Reply via email to