【问题标题】:Dynamically resize a JTextField and set minimum amount of text动态调整 JTextField 的大小并设置最小文本量
【发布时间】:2012-12-22 02:24:09
【问题描述】:

我想动态调整JTextField 的大小并设置允许的最小文本量。

示例

文本字段的最小长度为 4,如果文本小于 4,则为每个缺失的位置添加 0。

【问题讨论】:

  • "如果文本小于 4,则添加 0" 看起来像 JSpinnerSpinnerNumberModel 可能会更好。
  • 尝试使用JFormattedTextField。如需更多信息,请参阅How to Use Formatted Text Fields

标签: java swing jtextfield layout-manager


【解决方案1】:

下面有这样一个JTextField的例子:

public class TextField extends JTextField {
    public static final int TEXT_FIELD_PADDING = 4;

    public TextField() {
        addAutoResize();
        init();
    }

    public void init() {
        setStyleByParentStyle();
        this.setPreferredSize(new Dimension(Constant.
TEXT_FIELD_MINIMAL_WIDTH, this.getPreferredSize().height));
    }

    private void addAutoResize() {
        this.getDocument().addDocumentListener
(new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent e) {
            checkResize();
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
            checkResize();
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
            checkResize();
            }
        });
    }

    private void checkResize() {
        FontMetrics fontMetrics = this.getFontMetrics(this.
getFont());

        if (fontMetrics.stringWidth(this.getText()) + 
TEXT_FIELD_PADDING * 2 < Constant.TEXT_FIELD_MINIMAL_WIDTH) {
            this.setPreferredSize(new 
Dimension(Constant.TEXT_FIELD_MINIMAL_WIDTH, this.getHeight()));
            this.getParent().revalidate();
        } else {
            //NOTE 2 - border width*2
            this.setPreferredSize(new 
Dimension(fontMetrics.stringWidth(this.getText()) + 2 + 
Constant.CARRET_WIDTH + TEXT_FIELD_PADDING * 2, this.getHeight()));
            this.getParent().revalidate();
        }
    }
}

此信息摘自文章: Frequently Asked Questions during Java applet development

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多