Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动态调整JTextField的大小并设置最小文本量_Java_Swing_Jtextfield_Layout Manager - Fatal编程技术网

Java 动态调整JTextField的大小并设置最小文本量

Java 动态调整JTextField的大小并设置最小文本量,java,swing,jtextfield,layout-manager,Java,Swing,Jtextfield,Layout Manager,我想动态调整JTextField的大小,并设置允许的最小文本量 例子 文本字段的最小长度可以为4,如果文本小于4,则为缺少的每个插槽添加0。下面是此类JTextField的一个示例: public class TextField extends JTextField { public static final int TEXT_FIELD_PADDING = 4; public TextField() { addAutoResize(); ini

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

例子
文本字段的最小长度可以为4,如果文本小于4,则为缺少的每个插槽添加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();
        }
    }
}
公共类TextField扩展了JTextField{
公共静态最终整型文本\字段\填充=4;
公共文本字段(){
addAutoResize();
init();
}
公共void init(){
setStyleByParentStyle();
此.setPreferredSize(新维度)为常数。
文本\字段\最小\宽度,this.getPreferredSize().height));
}
私有void addAutoResize(){
此.getDocument().addDocumentListener
(新文档监听器(){
@凌驾
公共作废插入更新(文档事件e){
checkResize();
}
@凌驾
公共作废移除更新(文档事件e){
checkResize();
}
@凌驾
公共作废更改日期(记录事件e){
checkResize();
}
});
}
私有void checkResize(){
FontMetrics FontMetrics=this.getFontMetrics(this。
getFont());
如果(fontMetrics.stringWidth(this.getText())+
文本\字段\填充*2<常量。文本\字段\最小\宽度){
此.setPreferredSize(新)
维度(Constant.TEXT_FIELD_MINIMAL_WIDTH,this.getHeight());
这个.getParent().revalidate();
}否则{
//注2-边框宽度*2
此.setPreferredSize(新)
维度(fontMetrics.stringWidth(this.getText())+2+
Constant.CARRET_WIDTH+TEXT_FIELD_PADDING*2,this.getHeight());
这个.getParent().revalidate();
}
}
}
该信息摘自以下文章:

“如果文本小于4,则添加0”看起来像是带有
喷丝头的
JSpinner
,可能更好。尝试使用
JFormattedTextField
。有关详细信息,请参阅。