JDK-6933132 : REGRESSION: JTextArea doesn't line-wrap correctly in 1.6.0_18
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 6u18
  • Priority: P3
  • Status: Closed
  • Resolution: Won't Fix
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2010-03-09
  • Updated: 2013-08-15
  • Resolved: 2013-08-15
Related Reports
Relates :  
Relates :  
Description
When a JTextArea is constructed with rows and columns arguments like JTextArea(2, 20) 
and with line-wrapping option like setLineWrap(true) and set monospaced font, the 
JTextArea must line-wrap at the specified position.

For example, JTextArea(2, 20) work correctly in JRE 1.6.0_17 like this;

 a-1) Input 20 characters: "12345678901234567890"
        -> No wrap

    ----------------------
    |12345678901234567890|
    |                    |
    ----------------------

 a-2) Input one more character: "1"
        -> The wrap point is correct (after the 20th character).

    ----------------------
    |12345678901234567890|
    |1                   |
    ----------------------

But, not in JRE 1.6.0_18;

 b-1) Input 20 characters: "12345678901234567890"
        -> No wrap

    ----------------------
    |12345678901234567890|
    |                    |
    ----------------------

 b-2) Input one more character: "1"
        -> The wrap point is not correct (not 20th, but 19th and 2 characters are 
           at the next line).

    ----------------------
    |1234567890123456789 |
    |01                  |
    ----------------------

It seems to be caused by the changes of javax.swing.text.WrappedPlainView and 
javax.swing.text.Utilities for Bug ID 6857057 (6828938).

- STEPS TO FOLLOW TO REPRODUCE THE PROBLEM:

OS: Windows XP SP2
JRE: 6u18

1. Save the following codes.
2. Compile the following java code.
3. Run the program.
4. Input 20 characters and one more character.

- EXPECTED VERSUS ACTUAL BEHAVIOR:

EXPECTED:

When JTextArea(2, 20), the line-wrap is after the 20th character.

ACTUAL:

When JTextArea(2, 20), the line-wrap is after the 19th character and 2 characters are at the next line.


For the following source code, this bug can be reproduced always.

---------- BEGIN SOURCE ----------

import java.awt.FlowLayout;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class JTextAreaTest extends JFrame {

	private JPanel panel;

	private JTextArea textarea;

	private static final long serialVersionUID = -1757960069921078681L;

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JTextAreaTest test = new JTextAreaTest();
				test.pack();
				test.setVisible(true);
			}
		});
	}

	public JTextAreaTest() {
		textarea = new JTextArea(2, 20);
		textarea.setLineWrap(true);
		textarea.setWrapStyleWord(false);
		textarea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 13));
		textarea.setText("12345678901234567890");

		panel = new JPanel();
		panel.setLayout(new FlowLayout());
		panel.add(textarea);

		this.setContentPane(panel);
		this.setTitle(this.getClass().getName());
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
}

---------- END SOURCE ------------

Comments
openjdk6 is end of live, please move on jdk7
15-08-2013

Seems the problem was fixed in the 8014863 issue.
15-08-2013

The problem is reproducible with 6u46, but it is not reproducible with 7u45 & 8b99.
15-08-2013