3
我有一個不可編輯的和禁用的JtextField
其中我會在請求一個數據庫後得到一個String
,我希望這個JtextField
包裝所有我的字符串。設置一個JTextField寬度以包裝一個給定的文字
只見setColumn()
和setSize()
方法,但我不知道第一次我String
長度。
非常感謝。
我有一個不可編輯的和禁用的JtextField
其中我會在請求一個數據庫後得到一個String
,我希望這個JtextField
包裝所有我的字符串。設置一個JTextField寬度以包裝一個給定的文字
只見setColumn()
和setSize()
方法,但我不知道第一次我String
長度。
非常感謝。
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);
}
}
我只是有一行文字,而不是多行文本 – RiadSaadi
@RiadSaadi:你想這一條線上的多行顯示是的,但你的帖子的狀態。再次,JTextField不能做到這一點,但JTextArea可以。你的來電。 –
也許我沒有解釋得很好,我很抱歉,但我想要的是例如編輯「你好世界」我的jtextField將只是用寬度來寫「Hello world」,如果我想寫「你好的每一個機構世界「,我的jtextField將會比第一個案例更大,但只是爲了包裝」每個人的世界「。 – RiadSaadi