original) (raw)
(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/ �.�
On Wed, Sep 12, 2012 at 4:30 PM, Pavel Porvatov <pavel.porvatov@oracle.com> 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:��������������� selectedColor = colorChooser.getColor();
������� SwingUtilities.invokeLater(new Runnable() {
����������� @Override
����������� public void run() {
��������������� 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/ � .
Please take a look.
On Tue, Sep 11, 2012 at 12:57 AM, Pavel Porvatov <pavel.porvatov@oracle.com> wrote:
Hi Sean,
The fix looks good but you are still using Swing components from different threads. There is a useful method: regtesthelpres.Util.invokeOnEDTThat ok.
Hi Pavel,
I made a new patch, it is at http://cr.openjdk.java.net/\~zhouyx/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.
Regards, Pavel
On Fri, Sep 7, 2012 at 10:15 PM, Pavel Porvatov <pavel.porvatov@oracle.com> wrote:
HI Sean,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.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" ?
Regards, Pavel
On Wed, Sep 5, 2012 at 9:32 PM, Pavel Porvatov <pavel.porvatov@oracle.com> 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/ �. 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 �.
Please take a look.
On Wed, Aug 22, 2012 at 9:16 PM, Pavel Porvatov <pavel.porvatov@oracle.com> wrote:
Hi Sean,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)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/ �. �
� � �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� . �Can anyone give a little help on how to produce a right-to-left orientation in demo SwingSet2 or others?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.
� � �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" .Some additional comments below:
� � �Please take a look again, thanks.
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 <pavel.porvatov@oracle.com>
wrote:
Hi Sean,
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 <zhouyx@linux.vnet.ibm.com>
Date: Thu, Aug 9, 2012 at 3:29 PM
Subject: Add keyboard accessibility to JColorChooser
swatch
To: swing-dev@openjdk.java.net
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
With this patch, in step4, focus moves
to�SwatchPanel,
as
shown
here�http://cr.openjdk.java.net/~zhouyx/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/
�.�
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