<Swing Dev> [9] Review request for 8157065: There is no the focus border on the selected tab.

Alexandr Scherbatiy alexandr.scherbatiy at oracle.com
Tue Sep 13 18:03:47 UTC 2016


On 9/13/2016 8:49 PM, Semyon Sadetsky wrote:
> On 9/13/2016 8:46 PM, Alexandr Scherbatiy wrote:
>> On 9/13/2016 8:34 PM, Semyon Sadetsky wrote:
>>>
>>> On 9/13/2016 8:25 PM, Alexandr Scherbatiy wrote:
>>>> On 9/13/2016 7:38 PM, Semyon Sadetsky wrote:
>>>>>
>>>>>
>>>>> On 9/13/2016 7:21 PM, Alexandr Scherbatiy wrote:
>>>>>> On 9/12/2016 10:42 PM, Semyon Sadetsky wrote:
>>>>>>>
>>>>>>>
>>>>>>> On 9/12/2016 9:48 PM, Alexandr Scherbatiy wrote:
>>>>>>>> On 9/12/2016 7:52 PM, Semyon Sadetsky wrote:
>>>>>>>>> On 9/12/2016 6:50 PM, Alexandr Scherbatiy wrote:
>>>>>>>>>
>>>>>>>>>> On 9/12/2016 6:42 PM, Semyon Sadetsky wrote:
>>>>>>>>>>> GTKPainter does not implement a lot of methods which can be 
>>>>>>>>>>> accessed by public API. Could you, please, explain, why this 
>>>>>>>>>>> specific method is more important than, for example, 
>>>>>>>>>>> paintToolBarContentBackground() or 
>>>>>>>>>>> paintToggleButtonBorder(), or all other unimplemented?
>>>>>>>>>>>
>>>>>>>>>>> In general, how do you separate public API methods of the 
>>>>>>>>>>> SynthPainter class into two sets: the first set that *should 
>>>>>>>>>>> be* over-riden and the second set of methods that *should 
>>>>>>>>>>> not be* overr-riden? Are there any systematic criterium for 
>>>>>>>>>>> that differentiation?
>>>>>>>>>>   All the same methods with different number of arguments 
>>>>>>>>>> which do not fall to overridden implementation should be 
>>>>>>>>>> overridden to provide proper implementation.
>>>>>>>>> Where I can read about this rule for SynthPainter? And it 
>>>>>>>>> obviously is not true.
>>>>>>>>   This is a usual rule for public methods which can be used by 
>>>>>>>> an external application.
>>>>>>>>> There are a lot of methods that are not over-riden in 
>>>>>>>>> GTKPainter. I even wrote an examples above.
>>>>>>>>   The SynthPainter.paintToolBarContentBackground(..., 
>>>>>>>> orientation) calls 
>>>>>>>> SynthPainter.paintToolBarContentBackground(...) without the 
>>>>>>>> orientation and the GTKPainter .paintToolBarContentBackground 
>>>>>>>> overrides the method without the orientation.  So calls to 
>>>>>>>> gtkPainter.paintToolBarContentBackground(..., orientation) 
>>>>>>>> falls down to the overriden method in GTKPainter.
>>>>>>>>
>>>>>>>>  The same is for SynthPainter.paintProgressBarBackground(..., 
>>>>>>>> orientation) and paintScrollBarBackground(..., orientation) 
>>>>>>>> methods.
>>>>>>>>
>>>>>>>>  The SynthPainter has only one paintToggleButtonBorder() method.
>>>>>>> Interesting rule... I thought that more specific method version 
>>>>>>> may have different implementation.
>>>>>>   It was done for historical reason. For example before the fix 
>>>>>> JDK-5033822 "Synth ScrollBar paintTrack() dosn't support 
>>>>>> orientation"
>>>>>>   there was only paintScrollBarBackground() method without the 
>>>>>> orientation in the SynthPainter class.
>>>>>>   After the fix the paintScrollBarBackground() method with the 
>>>>>> orientation is added which default implementation just calls the 
>>>>>> same method without the orientation because old user's subclasses 
>>>>>> can override the method without the orientation an not be aware 
>>>>>> about new method version.
>>>>>>
>>>>>>> What would you say about paintSeparatorBackground() ?
>>>>>>> It's (..., orientation) version is over-ridden while the generic 
>>>>>>> version is not over-ridden.
>>>>>>    I guess that it is just a bug.
>>>>> Not sure. GTKPainter has never been providing a systematic API 
>>>>> from the beginning. It is not for an arbitrary external use, 
>>>>> because the resulting painting will be unpredictable. I explained 
>>>>> this in this thread many times. And even if I would like to 
>>>>> provide this useless method implementation 
>>>>   It is a part of the public SynthPainter API and can be called by 
>>>> an external application.
>>> I can be called without any predictable result.  This is the current 
>>> state. It cannot be changed by the change you are proposing to add.
>>   The result is described in the public method javadoc.
>>>>> I were not able to do this because the orientation is a required 
>>>>> parameter to paint the GTK tab border.
>>>>   The overridden method without the orientation can just call the 
>>>> overridden method with orientation passing a default orientation 
>>>> value.
>>> And what the default value is? It is not defined.
>> https://docs.oracle.com/javase/7/docs/api/javax/swing/JSeparator.html
>> Creates a new horizontal separator: Constructor JSeparator().
> Sorry, I didn't get how the separator orientation is related to tabbed 
> pane border.
https://docs.oracle.com/javase/7/docs/api/javax/swing/JTabbedPane.html#setTabPlacement(int)
     The default value, if not set, is SwingConstants.TOP.

   Thanks,
   Alexandr.
>
> --Semyon
>>
>>   Thanks,
>>   Alexandr.
>>>
>>> --Semyon
>>>>
>>>>   Thanks,
>>>>   Alexandr.
>>>>>
>>>>> --Semyon
>>>>>>
>>>>>>   Thanks,
>>>>>>   Alexandr.
>>>>>>>
>>>>>>> --Semyon
>>>>>>>>
>>>>>>>>  Thanks,
>>>>>>>>  Alexandr.
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>> --Semyon
>>>>>>>>>>
>>>>>>>>>>   Thanks,
>>>>>>>>>>   Alexandr.
>>>>>>>>>>>
>>>>>>>>>>> --Semyon
>>>>>>>>>>>
>>>>>>>>>>> On 9/12/2016 6:20 PM, Alexandr Scherbatiy wrote:
>>>>>>>>>>>> The paintTabbedPaneTabBorder() without orientation should 
>>>>>>>>>>>> be implemented as well because it can be accessed by public 
>>>>>>>>>>>> API.
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Alexandr.
>>>>>>>>>>>>
>>>>>>>>>>>> On 6/3/2016 10:54 PM, Semyon Sadetsky wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 6/3/2016 10:34 PM, Sergey Bylokhov wrote:
>>>>>>>>>>>>>> On 03.06.16 22:21, Semyon Sadetsky wrote:
>>>>>>>>>>>>>>>> What reason? Why it is not public? since I provided the 
>>>>>>>>>>>>>>>> code example
>>>>>>>>>>>>>>>> where these methods are accessed by the user?
>>>>>>>>>>>>>>> GTK toollkit painting sequence is very different.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> What does it mean "different"? Even in this fix you 
>>>>>>>>>>>>>> implement one of the method according to the spec and 
>>>>>>>>>>>>>> skip the same method for some unknown reason.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I still did not get why an overload method should have 
>>>>>>>>>>>>>>>>> the same behavior
>>>>>>>>>>>>>>>>> as its associates. This is a brand new design 
>>>>>>>>>>>>>>>>> principle I've never heard
>>>>>>>>>>>>>>>>> before.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> ...........
>>>>>>>>>>>>>>> That's nice...
>>>>>>>>>>>>>>> Do you have any other concerns?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I still do not understand why the first method with 
>>>>>>>>>>>>>> default orientation is not implemented.
>>>>>>>>>>>>> I guess you meant "is not over-ridden". :) Once again: 
>>>>>>>>>>>>> because it is never used.
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>




More information about the swing-dev mailing list