gpt4 book ai didi

java - Java中JTextArea的自动动态扩展/收缩

转载 作者:行者123 更新时间:2023-11-30 07:33:20 27 4
gpt4 key购买 nike

我首先创建一个特定大小的 JTextArea。用户可以在其中添加文本,但如果它变得太长(垂直或水平),它将被截断。我希望 JTextArea 自动扩展或收缩(用于删除文本)。

我将来可能会允许用户更改字体和字体大小,所以如果我能避免让内容增加/减少一定大小就好了。

我目前正在使用边界来调整我的 JTextArea 的大小。也许我应该按行和列调整大小并使用监听器并采取适当的行动?

提前致谢!

最佳答案

我无法想象你为什么要这样做,为什么不把 JTextArea 放在 JScrollPane 中,但是好吧,我会一起玩......也许是这样的:

import java.awt.Container;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;


public class Expander extends JFrame {

private final JTextArea area;
private int hSize = 1;
private int vSize = 1;

public Expander() {
Container cp = getContentPane();
cp.setLayout(new BoxLayout(cp, BoxLayout.Y_AXIS));

cp.add(Box.createHorizontalGlue());
area = new JTextArea(vSize, hSize);
cp.add(area);
cp.add(Box.createHorizontalGlue());

area.getDocument().addDocumentListener(new DocumentListener() {

@Override
public void insertUpdate(DocumentEvent e) {
adjust();
}

@Override
public void removeUpdate(DocumentEvent e) {
adjust();
}

@Override
public void changedUpdate(DocumentEvent e) {
adjust();
}
});

pack();
}

private void adjust() {
int maxColumns = getMaxColumns();
if ((area.getLineCount() != vSize) || (maxColumns != hSize)) {
hSize = maxColumns;
vSize = area.getLineCount();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
area.setColumns(hSize);
area.setRows(vSize);
Expander.this.doLayout();
Expander.this.pack();
}
});
}
}

private int getMaxColumns() {
int startOffset = 0;
int maxColumns = 0;
for (int i = 0; i < area.getLineCount(); i++) {
try {
int endOffset = area.getLineEndOffset(i);
int lineSize = endOffset - startOffset;
if (lineSize > maxColumns) {
maxColumns = lineSize;
}
startOffset = endOffset;
} catch (BadLocationException ble) {
}
}

return maxColumns;
}

public static void main(String[] args) {

Expander e = new Expander();
e.setLocationRelativeTo(null);
e.setVisible(true);
}
}

关于java - Java中JTextArea的自动动态扩展/收缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5943672/

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