Word wrapping incorrect inside JTextPane on MAC 0.5/10.4 and Linux OS

Hello java-dev team,
In my application, I am using JTextPane as a text editor to create RTF text. The problem I observed with the JTextPane on MAC OS and Linux OS flavors (I tested on Ubuntu 8.04) is: whenever I am changing any of the text property (font color, font name, font style like bold, italic or underline) and then enter the characters without providing space, the whole word gets wrapped to the next line from the point where exactly the property change starts i.e. the new formatted text is jumped to the next line from the starting point of formatting.
My requirement is, as I am not adding any space character while changing the property, the characters should be entered in the sequence and should come to new line as per normal word-wrap rule.
Can anybody help me out in this regards with some solution as it’s a very urgent requirement?
Below I am also providing the sample code to check the behavior. There is no dynamic facility to change the property in the below code but I am providing the text with multiple formatting settings through code itself. To reproduce the above issue, just type the characters using keyboard in between characters with changed text properties and you can see the whole word jumping to new line.
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import javax.swing.text.StyledEditorKit;
public class TestWrapping {
     JScrollPane scroll;
     JTextPane edit;
     public TestWrapping()  throws Exception {
          final JFrame frame=new JFrame();
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          edit=new JTextPane()
               public void setSize(Dimension d)
                    if (d.width < getParent().getSize().width)
                         d.width = getParent().getSize().width;
                    super.setSize(d);
               public boolean getScrollableTracksViewportWidth()
                    return false;
          edit.setPreferredSize(new Dimension(150,150));
          edit.setSize(150,150);
          edit.setEditorKit(new StyledEditorKit());
          scroll=new JScrollPane(edit);
          edit.getDocument().insertString(0,"11111111111111222222222222222222222222222222222222222",null);
          MutableAttributeSet attrs=new SimpleAttributeSet();
          StyleConstants.setBold(attrs,true);
          ((StyledDocument)edit.getDocument()).setCharacterAttributes(30,5,attrs,false);
          StyleConstants.setUnderline(attrs,true);
          ((StyledDocument)edit.getDocument()).setCharacterAttributes(35,5,attrs,false);
          StyleConstants.setFontSize(attrs,25);
          ((StyledDocument)edit.getDocument()).setCharacterAttributes(40,5,attrs,false);
          frame.getContentPane().add(scroll);
          frame.setBounds(0,0,150,150);
          frame.show();
     public static void main(String[] args) throws Exception {
          new TestWrapping();
}The same functionality works fine on Windows XP and problem is observed on MAC OS 10.4/10.5, Ubuntu 8.04. I am using jdk1.5 on both the platforms. I tested using jdk 6.0 on Ubuntu 8.04, and the problem is easily reproducible. I placed a query in the respective OS forums also but did not receive any replies. I also searched the sun’s bug database, but could not find any bug addressing the mentioned problem correctly. I also logged issue at bugs.sun.com and was assigned internal review ID of 1480019 for this problem.
If you need any additional information, please let me know.
Thanks in advance.
Regards,
VPKVL

VPKVL wrote:
Hi All,
Just want to update that when I checked this issue with JDK1.6 on Ubuntu 8.04, I am unable to reproduce the issue. Everything works as expected. But problem continues on MAC 10.5. So can anybody help me out in coming out of this issue on MAC 10.5.
Thanks in advance.The only thing I can suggest is that you open a bug (radar) with apple ( developer.apple.com ), and then wait at least 12 months for Apple to get around to fixing it :s

Similar Messages

  • How to make word wrapping off in JTextPane...

    Hi,
    I m creating n RTF TextEditor using JTextPane....
    How can i make the wordwrapping off in JTextPane.
    It doesnt hav the property like
    setLineWrap(true);
    setWrapStyleWord(false); like Textarea...
    So how can i do that?
    Its Urgent..
    Regards,
    Danish

    Its Urgent..I searched the forum using "jtextpane wrapping" to find other postings on this topic. I find some suggestions from the first page of hits. So you could have found an answer 5 hours ago. I guess it isn't that urgent after all.

  • Word wrap with JTextPane

    Ok, at the risk of sounding stupid: How do you turn off the word wrap on a JTextPane.
    Thanks in advance, Ed

    ...and I forgot setSize public class NonScrollingPane extends JTextPane { 
      public NonScrollingPane() {   
        super(); 
      public boolean getScrollableTracksViewportWidth() {
        return false; 
      public void setSize(Dimension d) {
        if(d.width < getParent().getSize().width) {
          d.width = getParent().getSize().width;
        super.setSize(d);
    }Ulrich

  • JTextPane always word wrapping

    I'm having problems convincing a JTextPane not to word wrap. My JTextPane is contained in a JScrollPane. I've looked and found out how to turn off word wrap in a JTextArea, and applied suggestions about turning horizontal scrollbars on, but it doesn't work. My JTextPane keeps wrapping text regardless of what I do to it. It seems to me that, since the JTextPane is more "sophisticated" than a JTextArea, I should be able to do this. Any suggestions?
    Matt

    Hi,
    overwrite the following method in your JTextPane-subclass
    public boolean getScrollableTracksViewportWidth() { return false;  }this works, if you use the scrollbar-policies below - I use that in a mud-client, returning false if I want it not to wrap and returning true, if I want it to wrap.
    I use the following on the JScrollPane, the JTextPane is in (assuming sp is your JScrollPane)
    sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);Hope, this helps
    greetings Marsian

  • Preventing word wrapping in JTextpane

    I'm stumped about preventing word wrapping in a JTextpane. Any suggestions?

    Word wrapping occurs when the text hits the "edge" of the JTextPane, as (ordinarily) defined by the parent component of the JTextPane. But if you view the JTextPane in a JScrollPane, the edge is defined by the JTextPane itself rather than the parent component. So if the JTextPane is wide enough, the text will not wrap (you may or may not need to call setSize on the JTextPane). You can turn off the horizontal scrollbar if you like, using JScrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER), which would cause any text wider than the JScrollPane parent to simply be clipped off.
    A code sample is usually available at http://www.radecke.ch/exscrolltextpane.htm (the site appears to be down at the moment).

  • Force word wrap in JTextPane (using HTMLEditorKit)

    Hi!
    I have a JTextPane on a JScrollPane inside a JPanel. My text pane is using HTMLEditorKit.
    I set the scrolling policies of my JScrollPane to: JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED & JScrollPane.HORIZONTAL_SCROLLBAR_NEVER.
    I did not find in JTextPane�s API any relevant property I can control word-wrapping with (similar to JTextArea�s setLineWrap) and I have tried a few things to force word-wrapping but nothing worked...
    What happens is my text is NOT being wrapped (even though there is no horizontal scrolling) and typed characters (it is an enabled editable text componenet) are being added to the same long line�
    I�d like to force word-wrapping (always) using the vertical scroll bar whenever the texts extends for more then one (wrapped) line.
    Any ideas?
    Thanks!!
    Message was edited by:
    io1

    Your suggestion of using the example only holds if it fits the requirements of the featureDid your questions state anywhere what your requirement was?
    You first questions said you had a problem, so I gave you a solution
    You next posting stated what your where currently doing, but it didn't say it was a requirement to do it that way. So again I suggested you change your code to match the working example.
    Finally on your third posting you state you have some server related issues causing the requirement which I did not know about in my first two postings.
    State your problem and special requirments up front so we don't waste time quessing.
    I've used code like this and it wraps fine:
    JTextPane textPane = new JTextPane();
    textPane.setContentType( "text/html" );
    HTMLEditorKit editorKit = (HTMLEditorKit)textPane.getEditorKit();
    HTMLDocument doc = (HTMLDocument)textPane.getDocument();
    textPane.setText( "<html><body>some long text ...</body></html>" );
    JScrollPane scrollPane = new JScrollPane( textPane );If you need further help then you need to create a [url http://homepage1.nifty.com/algafield/sscce.html]Short, Self Contained, Compilable and Executable, Example Program (SSCCE) that demonstrates the incorrect behaviour, because I can't guess exactly what you are doing based on the information provided.
    And don't forget to use the [url http://forum.java.sun.com/help.jspa?sec=formatting]Code Formatting Tags so the code retains its original formatting.

  • Word Wrap in JTextPane

    I'm working with just a JTextPane, no JScrollPane around it or anything.
    I would like the JTextPane to use word wrap, but it looks like by default it does not. I looked through some API stuff and tutorials and found nothing on the subject.
    The code is trivial and pointless to post right now. All I dd was make a JTextPane via new JTextPane() (no arguments or anything) and type in it enough to see if it word wrapped and it didn't.
    Is there a way to enable word wrap on JTextPanes?

    no JScrollPane around it or anything.The scroll pane forces the wrapping because it enforces the width limit. Otherwise there is no limit.
    You can use setPreferredSize(...) to force the width, but then that also restricts the height.
    Reply 6 of this posting may give you some ideas.

  • No word wrap option in Mac OS X 10.7.5's TextEdit?

    Or did I miss it? Thank you in advance.

    FatMac\&gt;MacPro wrote:
    antdude wrote:
    Actually, I wanted to disable word wrapping. I want no word wrapping.
    So if what you've written is really long, it will extend off the edge of the TextEdit window and, with full screen, off the edge of your monitor? In that case, check out TextWrangler, which can do what you want, and a lot of other good stuff, too.
    Correct. Especially with long URLs, codes, etc. I hope it is free! Thanks.

  • JLabel Word Wrap

    I'm building a simple chat application to work on my network programming skills. I ran into an issue that I can't quite find a solution to.
    I Have a JPanel inside of a JScrollPane, and inside of it JLabels with the messages received are added as they come. I would like the JLabels to wrap the text after it reaches a certain width. Here's the testing code I'm using for this:
    import java.awt.*;
    import javax.swing.*;
    class ChatBody {
         public static Container createChatBody() {
              JPanel body = new JPanel(new GridBagLayout());
              GridBagConstraints c = new GridBagConstraints();
              c.fill = GridBagConstraints.BOTH;
              c.weightx = 1.0;
              c.weighty = 1.0;
              JPanel messages = new JPanel();
              JScrollPane messagesPane = new JScrollPane(messages);
              messagesPane.setPreferredSize(new Dimension(608, 478));
              messagesPane.setBorder(BorderFactory.createLineBorder(Color.black));
              messagesPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
              JLabel messageOne = new JLabel("This is a label that I'm going to make really long to test the wrapping abilities of a JLabel/JPanel/JScrollPane. This needs to be really long so it will reach the end of the scroll pane and *hopefully* wrap on it's own, so I won't have to do any work =D");
              messages.add(messageOne);
              c.gridx = 0;
              c.gridy = 0;
              body.add(messagesPane, c);
              return body;
    }Please note I took some irrelevant code out.
    Is there a method or something to make JLabels word wrap? Or will I have to be creative and make something up?
    Edit: I don't know if this is relevant, but this is the class with the main() method:
    import java.awt.*;
    import javax.swing.*;
    class JavaChat {
         public static void createChatWindow() {
              JFrame frame = new JFrame("Java Chat");
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              frame.setMinimumSize(new Dimension(800, 600));
              //frame.setJMenuBar();
              frame.getContentPane().add(ChatBody.createChatBody());
              frame.pack();
              frame.setVisible(true);
         public static void main(String args[]) {
              SwingUtilities.invokeLater(new Runnable() {
                   public void run() {
                        createChatWindow();
    }That's needed for anyone that needs to compile my code for some reason.
    Edited by: shadowayex on Dec 24, 2009 1:47 PM

    Wrapping is not support in a JLabel.
    Most people would use either a JTextArea or JTextPane which do support wrapping.

  • Word Wrap very annoying?

    I just switched over to Dreamweaver because of the built in ftp server functionality.  So far, I have found it to be a very nice editor. 
    One problem I have it with wordwarp in the coding.
    If a line is wrapped, why does it not indent to the same column that the line started on. 
    For example if I was inside several elements and this particular <p> started in column 20, if the line runs over, it wraps and the next line starts on column 1.  This makes the code very hard to read as you have out of place text.
    <body>   
         <div>
              <p>This is just a long sentence with a bunch of rambling so the line will wrap back
    around to the first column so you can see what I am talking about.
         <div>
    </body>
    It would be so much better if it looked like this:
    <body>
         <div>
              <p>This is just a long sentence with a bunch of rambling so the line will wrap back
              around to the first column so you can see what I am talking about.
         <div>
    </body>
    Is there way to do this?
    I have searched the adobe forums and google, but I feel like I am just searching for the wrong thing because all I ever come up with at the most is how to turn word wrapping on or off.

    You can turn on that style of word wrapping, but it's not enabled by default because it relies on inserting a hard newline character each time a line is wrapped. Newline characters are treated by JavaScript as indicating the end of a statement, so this style of wrapping can break JavaScript on your page if you're not careful.
    To enable hard wrapping with text indentation, open Preferences (Edit menu on Windows, Dreamweaver menu on a Mac), and select the Code Format category. Select the Automatic wrapping checkbox and set the column (character) at which you want the line to be wrapped.
    The Dreamweaver default is to use soft wrapping, which is controlled by View > Code View Options > Word Wrap. This option toggles soft wrapping on and off. A soft wrap automatically wraps code when it reaches the right edge of Code view, but without inserting a newline character.

  • Looking for a word processor without word wrap, text edit doesn't cut it

    I'm looking for a word processor without word wrap, text edit doesn't work. In text edit, it automatically scoots my text over to the next line but I just want it to keep going with a horizontal scrollbar. Is there a text editor I can download from the app store or can I get textedit to work somehow where it uses a horizontal scroll bar instead of entering text to the next line?

    Hi,
    thought TextWrangler can do it.
    But it seems that the 'no word-wrap' "feature" isn't that much wanted anymore.
    Maybe one of these http://www.macupdate.com/find/mac/text%20editor can do it.
    Regards
    Stefan

  • Read Only TextAreas with Carriage Return, Line Breaks and Word Wrapping

    Hi all,
    I know there are a few posts around this subject but I cannot find the answer to the exact problem I have.
    I have a page that has a 'TextArea with Character Counter' (4000 Chars) that is conditionally read only based on the users credentials (using the 'Read Only' attributes of the TextArea item).
    When the field is editable (not Read Only) everything works fine but when I make the field Read Only I start to have problems:
    The first problem is that the Carriage Return and Line Breaks are ignored and the text becomes one continuos block. I have managed to fix this by adding pre and post element text of pre and /pre tags. This has made the Carriage Return and Line Breaks word nicely and dispaly correctly.
    However, it has introduced a second problem. Long lines, with no Carriage Returns or Line Breaks, now extend to the far right of the page with no word wrapping, making my page potentially 4000+ characters wide.
    How can I get the field to be display only, with recognised Carriage Returns and Line Breaks, and Word Wrapping inside a fixed width of, say, 150 characters?
    Many thanks,
    Martin

    Hi,
    Just a cut and paste of yours with the field name changed:
    htp.p('<script>');
    htp.p('$x("P3_COMMENTS").readonly=true;');
    htp.p('</script>');I also have the following in the page HTML Header, could they be conflicting?
    <script type="text/javascript" language="JavaScript">
    function setReleaseToProd(wpTypeCode){
       //setReleaseToProd($v(this))
      var get = new htmldb_Get(null,$v('pFlowId'),'APPLICATION_PROCESS=set_release_to_prod',0);
      get.addParam('x01',wpTypeCode);
      gReturn = get.get();
      if(gReturn) {
         $s('P3_RELEASE_TO_PROD',gReturn);
      get = null;
    </script>I am a long way from knowing much about Javascript (this page code was written by someone else) so all help is much appreciated.
    Martin

  • JEdtiorPane/HTMLEditorKit word wrapping problems

    Hi,
    I have a JFrame component that has a splitPane, on the left side is a JTree and the right side has a JEditorPane that has it's content updated with HTML using a method to generate the HTML via the setText() method . (no url, and no html file)
    The searching I did indicates that word wrapping is the default behavior, and I saw a lot of posts from people trying to get rid of the word wrapping, but it isn't wrapping at all for me. I get the horizontal scroll bar.
    I had the same problem using a JTextPane...anyone know how to wrap text?
    here's the relevant code:
    descriptionPanel = new JPanel(new BorderLayout());
              descriptionEditorPane = new JEditorPane();
              HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
              descriptionEditorPane.setEditorKit(htmlEditorKit);
              descriptionEditorPane.setSize(new Dimension(610,800));
              descriptionEditorPane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
              descriptionPanel.add(descriptionEditorPane);

    Did you place the components into scroll panes and then put those into the split pane?
    If so, then I guess that calling setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER) on the editor pane's scroll pane might solve your problem.

  • Dynamically word wrap in a JLabel

    I have several JLabels in a complex layout that has a JSplitter and is in a resizeable window.
    I would like it if there isn't enough room for the text of the JLabel to fit on one line, but there is enough vertical room (there almost always is), for the JLabel to automatically word wrap, and become 2 or three line, as needed. (There are usually only 2 or three words in these JLabels.
    I haven't found a way to do this. I know about putting HTML in the JLabel lets you put <BR>s in, but I would like the JLabel to be only one line if possible, going to two line if there isn't enough room to fit all the text on one line.
    I searched this forum, and found a suggestion to use a JTextArea made up to look like a JLabel ( http://forum.java.sun.com/thread.jsp?forum=57&thread=399180 second reply from bottom ), but this has it's own problems. The JTextAreas, try to take up as much vertical space as possible instead of only as much space a necessary (as a JLable does) in the layout that I'm using.
    Is there any way of doing this?

    JLabel label = new JLabel();
    label.setLayout new BorderLayout() ;
    JTextPane pane = new JTextPane();
    pane.setBackground(label.getBackground());
    // or try making it opaque
    pane.setText("long text here");
    label.add(pane,BorderLayout.CENTER);The above still has the problem of wanting its preferred size to be calculated from the text layed out in one line. I was digged around in my Java2D folder and found some old code I wrote, based on something by J. Knudsen:
    import java.awt.*;
    import java.awt.font.*;
    import java.text.*;
    import javax.swing.*;
    public class JMultilineLabel extends JComponent {
        private String text;
        private Insets margin = new Insets(5,5,5,5);
        private int maxWidth = Integer.MAX_VALUE;
        private boolean justify;
        private final FontRenderContext frc = new FontRenderContext(null, false, false);
        private void morph() {
            revalidate();
            repaint();
        public String getText() {
            return text;
        public void setText(String text) {
            String old = this.text;
            this.text = text;
            firePropertyChange("text", old, this.text);
            if ((old == null) ? text!=null : !old.equals(text))
                morph();
        public int getMaxWidth() {
            return maxWidth;
        public void setMaxWidth(int maxWidth) {
            if (maxWidth <= 0)
                throw new IllegalArgumentException();
            int old = this.maxWidth;
            this.maxWidth = maxWidth;
            firePropertyChange("maxWidth", old, this.maxWidth);
            if (old !=  this.maxWidth)
                morph();
        public boolean isJustified() {
            return justify;
        public void setJustified(boolean justify) {
            boolean old = this.justify;
            this.justify = justify;
            firePropertyChange("justified", old, this.justify);
            if (old != this.justify)
                repaint();
        public Dimension getPreferredSize() {
            return paintOrGetSize(null, getMaxWidth());
        public Dimension getMinimumSize() {
            return getPreferredSize();
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            paintOrGetSize((Graphics2D)g, getWidth());
        private Dimension paintOrGetSize(Graphics2D g, int width) {
            Insets insets = getInsets();
            width -= insets.left + insets.right + margin.left + margin.right;
            float w = insets.left + insets.right + margin.left + margin.right;
            float x = insets.left + margin.left, y=insets.top + margin.top;
            if (width > 0 && text != null && text.length() > 0) {
                AttributedString as = new AttributedString(getText());
                as.addAttribute(TextAttribute.FONT, getFont());
                AttributedCharacterIterator aci = as.getIterator();
                LineBreakMeasurer lbm = new LineBreakMeasurer(aci, frc);
                float max = 0;
                while (lbm.getPosition() < aci.getEndIndex()) {
                    TextLayout textLayout = lbm.nextLayout(width);
                    if (g != null && isJustified() && textLayout.getVisibleAdvance() > 0.80 * width)
                        textLayout = textLayout.getJustifiedLayout(width);
                    if (g != null)
                        textLayout.draw(g, x, y + textLayout.getAscent());
                    y += textLayout.getDescent() + textLayout.getLeading() + textLayout.getAscent();
                    max = Math.max(max, textLayout.getVisibleAdvance());
                w += max;
            return new Dimension((int)Math.ceil(w), (int)Math.ceil(y) + insets.bottom + margin.bottom);

  • Word wrap in Coldfusion Builder 3?

    Does anyone know where/how to turn on word wrap in CFBuilder 3?
    I'm on the Mac, OSX 10.9.2
    Thanks,
    Rich

    The problem is int point 2: CF instance as manual
    According the manual I need adminstart.bat to manually start CF:
    Unzip the file AdminServerComponents.zip to {CFHome}
    The following files are copied to {cfhome}/runtime/bin:
    adminstart.bat
    admin_jvm.config
    adminstart.sh
    The Admin Server instance is copied to {cfhome}/runtime/servers
    This AdminServerComponents.zip is not installed with CF 11 nor with CB3.

Maybe you are looking for