0

JTextField動的にサイズを変更し、許可されるテキストの最小量を設定したいと思います。

テキスト フィールドの最小長は 4 です。テキストが 4 未満の場合は、欠落しているスロットごとに 0 を追加します。

4

1 に答える 1

0

以下に、そのような 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();
        }
    }
}

この情報は、次の記事から取得したものです: Java アプレット開発中によく寄せられる質問

于 2014-08-20T09:06:13.203 に答える