Java 字包装在JTextArea中不起作用

Java 字包装在JTextArea中不起作用,java,swing,jtextarea,word-wrap,Java,Swing,Jtextarea,Word Wrap,为JTextArea提供的换行方法在我的程序中不起作用。为什么不起作用?我怎样才能修好它?代码如下: text= new JTextArea(15,65); text.setWrapStyleWord(true); // word wrapping enabled text.setPreferredSize(new Dimension(getPreferredSize())); 这是截图。最后一个字超出了框架。 以下SSCCE允许您尝试这两种设置。在这里您可以看到,

为JTextArea提供的换行方法在我的程序中不起作用。为什么不起作用?我怎样才能修好它?代码如下:

    text= new JTextArea(15,65);

    text.setWrapStyleWord(true); // word wrapping enabled

    text.setPreferredSize(new Dimension(getPreferredSize()));
这是截图。最后一个字超出了框架。

以下SSCCE允许您尝试这两种设置。在这里您可以看到,如果不首先调用
setLineWrap
,则使用
setWrapStyleWord
没有任何效果。这也记录在
setWrapStyleWord
的javadoc中

可读表单的最佳结果是将它们都设置为true

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class TextAreaDemo {

  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      @Override
      public void run() {
        JFrame testFrame = new JFrame( "TestFrame" );

        final JTextArea textArea = new JTextArea( 15, 65 );
        testFrame.add( new JScrollPane( textArea ) );

        final JCheckBox wordWrap = new JCheckBox( "word wrap" );
        wordWrap.setSelected( textArea.getWrapStyleWord() );
        wordWrap.addItemListener( new ItemListener() {
          @Override
          public void itemStateChanged( ItemEvent e ) {
            textArea.setWrapStyleWord( wordWrap.isSelected() );
          }
        } );
        testFrame.add( wordWrap, BorderLayout.NORTH );
        final JCheckBox lineWrap = new JCheckBox( "line wrap" );
        lineWrap.setSelected( textArea.getLineWrap() );
        lineWrap.addItemListener( new ItemListener() {
          @Override
          public void itemStateChanged( ItemEvent e ) {
            textArea.setLineWrap( lineWrap.isSelected() );
          }
        } );
        testFrame.add( lineWrap, BorderLayout.SOUTH );

        testFrame.pack();
        testFrame.setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE );
        testFrame.setVisible( true );
      }
    } );

  }
}


以下SSCCE允许您对这两种设置进行试验。在这里您可以看到,如果不首先调用
setLineWrap
,则使用
setWrapStyleWord
没有任何效果。这也记录在
setWrapStyleWord
的javadoc中

可读表单的最佳结果是将它们都设置为true

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class TextAreaDemo {

  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      @Override
      public void run() {
        JFrame testFrame = new JFrame( "TestFrame" );

        final JTextArea textArea = new JTextArea( 15, 65 );
        testFrame.add( new JScrollPane( textArea ) );

        final JCheckBox wordWrap = new JCheckBox( "word wrap" );
        wordWrap.setSelected( textArea.getWrapStyleWord() );
        wordWrap.addItemListener( new ItemListener() {
          @Override
          public void itemStateChanged( ItemEvent e ) {
            textArea.setWrapStyleWord( wordWrap.isSelected() );
          }
        } );
        testFrame.add( wordWrap, BorderLayout.NORTH );
        final JCheckBox lineWrap = new JCheckBox( "line wrap" );
        lineWrap.setSelected( textArea.getLineWrap() );
        lineWrap.addItemListener( new ItemListener() {
          @Override
          public void itemStateChanged( ItemEvent e ) {
            textArea.setLineWrap( lineWrap.isSelected() );
          }
        } );
        testFrame.add( lineWrap, BorderLayout.SOUTH );

        testFrame.pack();
        testFrame.setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE );
        testFrame.setVisible( true );
      }
    } );

  }
}


还有一点您没有告诉我们:您是否在JTextArea上调用了
setLineWrap(true)
?我在任何地方都没有看到这个帖子。您是否将JTextArea放置在JScrollPane中?您是否正确使用布局管理器并避免使用空布局和绝对定位?我甚至会比HFOE更进一步,发布3行代码既不能证明问题,也不能证明解决方案。只有一家公司能够真正帮助您或帮助我们为您找到解决方案。无论如何,您应该做的第一件事就是放弃这个调用:
text.setPreferredSize(新维度(getPreferredSize())。这只是在寻找麻烦…(顺便说一句,对维度的复制构造函数的调用是绝对不必要的)感谢充满EEL的气垫船,我没有使用setLineWrap()方法。它解决了我的问题还有一点您没有告诉我们:您是否在JTextArea上调用了
setLineWrap(true)
?我在任何地方都没有看到这个帖子。您是否将JTextArea放置在JScrollPane中?您是否正确使用布局管理器并避免使用空布局和绝对定位?我甚至会比HFOE更进一步,发布3行代码既不能证明问题,也不能证明解决方案。只有一家公司能够真正帮助您或帮助我们为您找到解决方案。无论如何,您应该做的第一件事就是放弃这个调用:
text.setPreferredSize(新维度(getPreferredSize())。这只是在寻找麻烦…(顺便说一句,对维度的复制构造函数的调用是绝对不必要的)感谢充满EEL的气垫船,我没有使用setLineWrap()方法。这解决了我的问题problem@Alfredshot,runnable,compileable,about desciber idea:-)@Alfred shot,runnable,compileable,about desciber idea:-)