gpt4 book ai didi

java - 如何限制自动调整大小的 JTtextArea 的高度

转载 作者:行者123 更新时间:2023-11-30 09:47:57 25 4
gpt4 key购买 nike

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

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

    _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 );

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

        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 );
}
}
}

最佳答案

就个人而言,我不喜欢限制 JTextArea 的大小,以免阻止用户添加所需的信息。同样,我觉得最好将 JTextArea 包装在 JScrollPane 中并限制 JScrollPane 视口(viewport)的大小。这可以通过告诉 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();
}
});
}
}

关于java - 如何限制自动调整大小的 JTtextArea 的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6471745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com