【问题标题】:How to limit the height of an auto-resizing JTtextArea如何限制自动调整大小的 textArea 的高度
【发布时间】:2011-09-22 05:45:07
【问题描述】:

我有几个垂直对齐的文本区域。我希望它们在输入更多文本时扩展,但要限制它们的高度。

我已尝试设置最大尺寸,但似乎被忽略了。有什么想法吗?

    _recipients = new JTextArea();
    _recipients.setBorder( BorderFactory.createEtchedBorder() );
    _recipients.setLineWrap( true );
    _recipients.setWrapStyleWord( true );
    _recipients.setMaximumSize( new Dimension( 111, 55 ) );

    _subject = new JTextArea();
    _subject.setBorder( BorderFactory.createEtchedBorder() );
    _subject.setLineWrap( true );
    _subject.setWrapStyleWord( true );
    _subject.setMaximumSize( new Dimension( 111, 55 ) );

    //JComponent area = LAF.Area.clear(  );
    JPanel area = new JPanel( new GridLayout( 1, 2, 6, 0 ) );
    area.setOpaque( false );
    area.add( _recipients );
    area.add( _subject );

    add( area, BorderLayout.CENTER );

我收到建议我应该使用滚动疼痛,但这只是创建了一个不可编辑的区域

        JScrollPane pain = new JScrollPane();
        pain.add( _recipients );
        area.add( pain );

        pain = new JScrollPane();
        pain.add( _subject );
        area.add( pain );

编辑

不多,但是

public class TestFrame extends JFrame
{
  TestFrame()
  {
    setSize( new DimensionUIResource( 800, 668 ) );
    JPanel area = new JPanel( new FlowLayout( 0, 0, 0 ) );

    Stuff thing = new Stuff();
    area.add( thing );

    add( area );
  }

  public static void main( String args[] )
  {
    TestFrame frame = new TestFrame();
    frame.show();
  }

  private static class Stuff extends JComponent
  {
    private final JTextArea _subject;

    Stuff()
    {
        setLayout( new BorderLayout() );

        _subject = new JTextArea();
        _subject.setBorder( BorderFactory.createEtchedBorder() );
        _subject.setLineWrap( true );
        _subject.setWrapStyleWord( true );
        _subject.setSize( new Dimension( 111, 55 ) );
        _subject.setMaximumSize( new Dimension( 111, 55 ) );

        JPanel area = new JPanel( new GridLayout( 1, 2, 6, 0 ) );
        area.setOpaque( false );
        area.add( _subject );

        add( area, BorderLayout.CENTER );
      }
  }
}

【问题讨论】:

  • “创建了不可编辑的区域”是什么意思。我想我们大多数人都发现 JScrollPane 只是解决这类问题的方法。我认为,如果您可以创建一个小型可编译运行程序 SSCCE 来显示您的问题并允许我们修改代码并帮助您找到解决方案,我们都会变得更好。
  • 这不是您将组件添加到滚动窗格的方式。使用 new JScrollPane( textArea ) 或 scrollPane.setViewportView( textArea )。如需更多帮助,我们仍然需要 SSCCE,而不是几行代码!
  • @Hovercraft Full Of Eels, @camickr - 见编辑。
  • 我不确定您尝试使用示例代码实现什么效果。同样,我更喜欢按照下面的示例使用 JScrollPanes。
  • 听 camickr 指出你的问题。此外,您可能应该禁用滚动窗格中的水平滚动条。

标签: java swing jscrollpane jtextarea autoresize


【解决方案1】:

就个人而言,我不希望限制 JTextArea 的大小,以免妨碍用户添加所需的信息。同样,我觉得你最好将 JTextArea 包装在 JScrollPane 中并限制 JScrollPane vewport 的大小。这可以通过告诉 JTextArea 从多少行和列开始来显式或隐式地完成。例如:

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.*;

public class TestPanel extends JPanel {

   private static final int AREA_COUNT = 4;

   public TestPanel() {
      setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
      setLayout(new GridLayout(0, 1, 0, 5));
      for (int i = 0; i < AREA_COUNT; i++) {
         JTextArea area = new JTextArea(5, 30);
         area.setLineWrap(true);
         area.setWrapStyleWord(true);
         JPanel wrapPanel = new JPanel(new BorderLayout());
         wrapPanel.add(new JLabel("JTextArea " + i), BorderLayout.PAGE_START);
         wrapPanel.add(new JScrollPane(area), BorderLayout.CENTER);
         add(wrapPanel);
      }
   }

   private static void createAndShowUI() {
      JFrame frame = new JFrame("TestPanel");
      frame.getContentPane().add(new TestPanel());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}

【讨论】:

  • 另外,您可能希望禁用水平滚动条。
猜你喜欢
  • 2011-11-04
  • 2016-10-15
  • 2021-11-26
  • 2021-11-25
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
相关资源
最近更新 更多