我有一个不可编辑和禁用的JtextField
,我将在其中放入请求数据库后获得的String
,我想要这个JtextField
包装我所有的字符串。
我看到了 setColumn()
和 setSize()
方法,但我不知道我的 String
长度。
非常感谢。
最佳答案
- JTextFields 只能显示单行文本,句点。
- 如果您需要一个简单的文本组件来包装文本,请使用 JTextArea。
- 设置它的列和行。
- 将其放入 JScrollPane(如果您觉得文本会超出指定的行数)。
- 对其调用
setLineWrap(true)
- 对其调用
setWrapStyleWord(true)
。
编辑
您询问在添加或删除文本时调整 JTextField 的大小。我想您总是可以覆盖 JTextField 的 getPreferredSize()
方法,并根据文本的任何更改重新验证/重新绘制其容器,但这样做确实存在风险。
例如:
import java.awt.*;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class VaryingTextFieldSize {
protected static final int GAP = 5;
public static void main(String[] args) {
final JTextField textField = new JTextField(1) {
@Override
public Dimension getPreferredSize() {
Dimension superPref = super.getPreferredSize();
FontMetrics fontMetrics = getFontMetrics(getFont());
String text = getText();
if (text.length() > 0) {
int width = fontMetrics.charsWidth(text.toCharArray(), 0, text.length()) + GAP;
return new Dimension(width, superPref.height);
}
return superPref;
}
};
textField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
reSize();
}
@Override
public void insertUpdate(DocumentEvent e) {
reSize();
}
@Override
public void changedUpdate(DocumentEvent e) {
reSize();
}
private void reSize() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Container container = textField.getParent();
container.revalidate();
container.repaint();
}
});
}
});
JPanel enclosingPanel = new JPanel();
enclosingPanel.setPreferredSize(new Dimension(300, 100));
enclosingPanel.add(textField);
JOptionPane.showMessageDialog(null, enclosingPanel);
}
}
关于java - 以 maner 方式设置 JTextField 宽度以包装给定文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22128813/