gpt4 book ai didi

java - 从动态模型生成 View

转载 作者:行者123 更新时间:2023-12-01 14:45:05 25 4
gpt4 key购买 nike

我有一个可以在运行时修改的模型。这是一个例子:

public class JavaMethod
{
private String name;
private List<Parameter> parameters;
private boolean isConstructor; // this is an example
}

参数可以有不同的类型(整数 boolean 字符串浮点...)不同的有效值。例如,名为 age 的整数参数只能保存正整数。

问题是我想用 Swing 生成一个 View 来配置该 JavaMethod 对象,但我不确定正确的方法。

例如,正整数的 age 参数将链接到扩展 JTextField 的类,以防止输入任何负字母。另一个名为 numberOfFingers 的整数参数(范围从 8 到 12)将链接到扩展 JComboBox 的类,该类允许选择该范围内的选项。

我可以通过将生成适当 Swing 组件的任务交给 Parameter 对象,利用多态性来实现此目的,然后我的模型就会知道 View 是如何生成的。

为这样的模型生成 View 的正确方法是什么?我能想到的(没有 View 生成中涉及的模型)是 Controller 中的一种巨大开关,它通过读取参数的详细信息来选择好的组件。

谢谢

最佳答案

为此,您需要创建自定义 PlainDocument 。例如,对于仅包含年龄值的 JTextField ,您应该创建 AgeDocument 类,如下所示:

import javax.swing.text.Document;
import javax.swing.text.PlainDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
class AgeDocument extends PlainDocument
{
@Override
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
{
/**Write your logic here**/
if (str == null)
{
return;
}
char[] arr = str.toCharArray();
for (int i = 0; i < arr.length; i++)
{
if (!Character.isDigit(arr[i]))//Checking for Non Numeric.
{
return;
}
if (Character.getNumericValue(arr[i])==0 )
{
try
{
int val = Integer.parseInt(getText(0,offs));
if (val == 0)
{
super.insertString(offs,"", a);//Don't allow to put 0 as age.
return;
}
}
catch (Exception ex){return;}
}
}
super.insertString(offs, new String(str), a);
}
}

每当您想要将此 AgeDocument 属性设置为 JTextField 对象时,您只需编写 JTextFieldOBject.setDocument(new AgeDocument ())

同样,您可以独立创建多个模型。并且可以在代码中的任何位置使用它们。

关于java - 从动态模型生成 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15507962/

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