Java 在maner中设置JTextField宽度以包装给定文本

Java 在maner中设置JTextField宽度以包装给定文本,java,string,swing,jtextfield,Java,String,Swing,Jtextfield,我有一个不可编辑且已禁用的JtextField,我将在其中放入请求数据库后获得的字符串,我希望该JtextField包装我的所有字符串 我看到了setColumn()和setSize()方法,但我不知道我的字符串的长度 多谢各位 JTextFields只能显示一行文本,句号 如果需要包装文本的简单文本组件,请使用JTextArea 设置其列和行 将其放入JScrollPane(如果您觉得文本将超出指定的行数) 对其调用setLineWrap(true) 对其调用setWrapStyleWord

我有一个不可编辑且已禁用的
JtextField
,我将在其中放入请求数据库后获得的
字符串
,我希望该
JtextField
包装我的所有字符串

我看到了
setColumn()
setSize()
方法,但我不知道我的
字符串的长度

多谢各位

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

我只有一行文字,没有多行文字text@RiadSaadi:是的,但您的帖子声明您希望此单行的多行显示。同样,JTextField不能这样做,但JTextArea可以。你的电话。也许我没有解释清楚,很抱歉,但我想要的是,例如,编辑“hello world”时,我的jtextField的宽度刚好可以写“hello world”,如果我想写“hello every body of the world”,我的jtextField将比第一个案例大,但只是为了包装“hello every body of the world”这句话@RiadSaadi:那么。。。您想在向JTextField中键入文本时调整其大小吗?请怎么做?