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

Ria*_*adi 4 java string swing jtextfield

我有一个不可编辑的和禁用JtextField的,我将String在请求数据库之后获得一个,我想要JtextField包装所有我的字符串.

我看到了setColumn()setSize()方法,但我不知道我的String长度.

非常感谢你.

Hov*_*els 7

  • 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);
   }
}
Run Code Online (Sandbox Code Playgroud)