gpt4 book ai didi

Java TextField 问题

转载 作者:行者123 更新时间:2023-11-30 09:47:35 26 4
gpt4 key购买 nike

我正在尝试构建一个接受长度(例如飞机机翼的跨度)的自定义文本字段类。我可以设置默认单位系统,例如“英寸”、“英尺”、“米”等,但我也希望能够输入默认单位系统中没有的长度。

例如,如果我的默认单位系统是“米”,我希望能够在我的文本字段中输入“10.8 英尺”,然后将英尺转换为米。

有谁知道是否有此类编码的示例?我搜索并找到了一个只接受数字的文本字段(在 NumericTextField 中),但这不符合我的需要,因为我想输入“10 ft”或“8.5 m”。

最佳答案

解决方法:

public class MyCustomField extends JPanel
{
public static final int METER = 1;
public static final int FEET = 2;
private int unit_index;
public JTextField txt;
public JLabel label;
public MyCustomField(int size, int unit_index)
{
this.unit_index = unit_index;
txt = new JTextField(size);
((AbstractDocument)txt.getDocument()).setDocumentFilter(new MyFilter());
switch(unit_index)
{
case METER:
label = new JLabel("m");
break;

case FEET:
label = new JLabel("ft");
break;

default:
label = new JLabel("m");
break;
}
add(txt);
add(label);
}
private class MyFilter extends DocumentFilter
{
public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException
{
StringBuilder sb = new StringBuilder();
sb.append(fb.getDocument().getText(0, fb.getDocument().getLength()));
sb.insert(offset, text);
if(!containsOnlyNumbers(sb.toString())) return;
fb.insertString(offset, text, attr);
}
public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attr) throws BadLocationException
{
StringBuilder sb = new StringBuilder();
sb.append(fb.getDocument().getText(0, fb.getDocument().getLength()));
sb.replace(offset, offset + length, text);
if(!containsOnlyNumbers(sb.toString())) return;
fb.replace(offset, length, text, attr);
}
private boolean containsOnlyNumbers(String text)
{
Pattern pattern = Pattern.compile("\\d*\\.?\\d*");
Matcher matcher = pattern.matcher(text);
return matcher.matches();
}
}
}

我很快就做了这个。如果需要,您可以通过添加更多方法和单元来改进它。

关于Java TextField 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6620238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com