<Swing Dev> [10] RFR JDK-8187957:Tab Size does not work correctly in JTextArea

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Wed Nov 8 19:28:24 UTC 2017


On 08/11/2017 10:39, Semyon Sadetsky wrote:
> It also may be written as
> 
>       int ntabs = (int)((x - tabBase) / tabSize);
>       return tabBase + (ntabs + 1) * tabSize

Yes "(int)+1" is also can be used for positive values, but the "ceil()" 
is better since this purpose of this method, and in general it works for 
negative values as well.

> 
> 
> On 11/08/2017 10:24 AM, Sergey Bylokhov wrote:
>> Hi, Prasanta.
>> Is it possible that dropping the float part of "tabSize" and "x" will 
>> cause Off-by-one error? For example:
>>     float tabSize=3.99f;
>>     float x=21.9f;
>>     int tabBase=0;
>>  649         int ntabs = ((int) x - tabBase) / (int)tabSize;
>>  650         return tabBase + ((ntabs + 1) * tabSize);
>>
>> The result is: ntabs=7 -> 31.92 which is not correct.
>>
>> I guess you will need something like this:
>>     int ntabs = (int) Math.ceil((x - tabBase) / tabSize);
>>     return tabBase + ntabs * tabSize;
>> The result is: ntabs=6 -> 23.94
>>
>>
>> On 08/11/2017 03:25, Prasanta Sadhukhan wrote:
>>> Hi All,
>>>
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8187957
>>> webrev: http://cr.openjdk.java.net/~psadhukhan/8187957/webrev.00/
>>>
>>> Please review a fix for an issue where it is seen string with "tab" 
>>> in them are not aligned properly.
>>> This is because while calculating tab stop postion, it is calculating 
>>> number of tabs in float value (an aftereffect of JDK-8156217 
>>> <https://bugs.openjdk.java.net/browse/JDK-8156217>)
>>> so next tab stop location is coming out wrong.
>>> Fix is to use "number of tabs" as an integer value in order to 
>>> calculate the tab position correctly.
>>>
>>> Regards
>>> Prasanta
>>
>>
> 


-- 
Best regards, Sergey.



More information about the swing-dev mailing list