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
。有关详细信息,请参阅。