<Swing Dev> Followup to JDK-8187957 Tab Size does not work correctly in JTextArea
David Polock
David.Polock at innovas.de
Fri Feb 14 13:46:45 UTC 2020
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/20200214/a39a409a/attachment-0001.htm>
More information about the swing-dev
mailing list