<Swing Dev> Followup to JDK-8187957 Tab Size does not work correctly in JTextArea
Prasanta Sadhukhan
prasanta.sadhukhan at oracle.com
Mon Feb 17 06:53:26 UTC 2020
Hi David,
I can take a look at this and create a JBS issue if you have not already
created one.
Regards
Prasanta
On 14-Feb-20 7:16 PM, David Polock wrote:
>
> Hello,
>
> this is my first post on the mailing list – please point me tot he
> right places, if i’m off topic.
>
> I have an issue with tab stops in a JTextArea. The behaviour is very
> similar to the bug JDK-8187957, which was fixed for JDK10. I’m using
> JDK11 and see the same (wrong) behaviour in my code.
>
> After some tests i could confirm, that the bug was fixed for a
> JTextArea without line wrapping. But calling
> JTextArea::setLineWrap(true) leads again to the false behaviour.
>
> So in a next step I cloned the git Source repository and examined the
> patch for the Bug. Besides adding a testcase (TestTabSize.java) the
> fix is changing some float calculation to int:
>
> ================================================
>
> commit 0da4c70d2d542d8ff37ee34e4878829af696b694
>
> Author: Prasanta Sadhukhan <psadhukhan at openjdk.org>
>
> Date: Tue Nov 14 10:32:31 2017 +0530
>
> 8187957: Tab Size does not work correctly in JTextArea
>
> Reviewed-by: ssadetsky, serb
>
> diff --git
> a/src/java.desktop/share/classes/javax/swing/text/PlainView.java
> b/src/java.desktop/share/classes/javax/swing/text/PlainView.java
>
> index 9d1b4fc..6aabc24 100644
>
> --- a/src/java.desktop/share/classes/javax/swing/text/PlainView.java
>
> +++ b/src/java.desktop/share/classes/javax/swing/text/PlainView.java
>
> @@ -646,7 +646,7 @@ public class PlainView extends View implements
> TabExpander {
>
> if (tabSize == 0) {
>
> return x;
>
> }
>
> - float ntabs = (x - tabBase) / tabSize;
>
> + int ntabs = (int) ((x - tabBase) / tabSize);
>
> return tabBase + ((ntabs + 1) * tabSize);
>
> }
>
> ================================================
>
> So in PlainView.java one line was changed. I can see in the source
> code, that the same (false) line exists in the class WrappedPlainView
> – which is used as the rendering class, when setLineWrap(true) was called.
>
> I think the same fix should be applied to the WrappedPlainView. I
> could not confirm this fix, because i’m not able to easily build /
> change the java.desktop module.
>
> The issue is reproducible with the following code (adopted from the
> mentioned bug):
>
> ------------- BEGIN CODE ------------------
>
> public class TabTestJFrame extends javax.swing.JFrame {
>
> private javax.swing.JScrollPane jScrollPane1;
>
> private javax.swing.JTextArea jTextArea1;
>
> public TabTestJFrame() {
>
> initComponents();
>
> jTextArea1.setTabSize( 8 );
>
> }
>
> private void initComponents() {
>
> jScrollPane1 = new javax.swing.JScrollPane();
>
> jTextArea1 = new javax.swing.JTextArea();
>
> setDefaultCloseOperation( javax.swing.WindowConstants.EXIT_ON_CLOSE );
>
> jTextArea1.setFont( new java.awt.Font( "Monospaced", 0, 10 ) );
>
> jTextArea1.setLineWrap( true ); // use WrappedPlainView as renderer
>
> jTextArea1.setText(
>
> "#################################################\n# Some
> Text\t\t\t\t\t#\n# Some Other Much Longer
> Text\t\t\t#\n#################################################" );
>
> jScrollPane1.setViewportView( jTextArea1 );
>
> javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
> getContentPane() );
>
> getContentPane().setLayout( layout );
>
> layout.setHorizontalGroup( layout.createParallelGroup(
> javax.swing.GroupLayout.Alignment.LEADING ).addGroup(
> layout.createSequentialGroup()
>
> .addContainerGap().addComponent( jScrollPane1,
> javax.swing.GroupLayout.DEFAULT_SIZE, 446, Short.MAX_VALUE
> ).addContainerGap() ) );
>
> layout.setVerticalGroup( layout.createParallelGroup(
> javax.swing.GroupLayout.Alignment.LEADING )
>
> .addGroup(
> layout.createSequentialGroup().addContainerGap().addComponent(
> jScrollPane1 ).addContainerGap() ) );
>
> pack();
>
> }
>
> public static void main( String args[] ) {
>
> System.out.println( "Java Version: " + System.getProperty(
> "java.specification.version" ) );
>
> java.awt.EventQueue.invokeLater( () -> {
>
> new TabTestJFrame().setVisible( true );
>
> } );
>
> }
>
> }
>
> ------------- END CODE ------------------
>
> So my question: Can somebody easily confirm the problem? And if the
> answer is yes, what are the next steps (creating a bug report – but
> who and how ;-) ?)
>
> Best regards,
>
> David
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/swing-dev/attachments/20200217/372f5d50/attachment-0001.htm>
More information about the swing-dev
mailing list