java - 以 maner 方式设置 JTextField 宽度以包装给定文本

标签 java string swing jtextfield

我有一个不可编辑和禁用的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/

相关文章:

java - 负载均衡器可扩展非 Web 服务器应用程序

java - 尝试使用 ImageIO.read 加载图像时出错

java - 将我的组件设置在指定位置

string - 比较excel vba中的字符串

java - 如果未使用 Swing 事件,如何返回该事件?

java - 线条未出现在 JDesktopPane 上

java - 瓷砖定义解释。 .* 和 {1} 有什么作用?

java - 在java3d中画线

Javascript Foreach 的日期格式打印相同的日期

java - 检查字符串是否仅包含匹配的字母和/或连字符?