gpt4 book ai didi

java - 如何使用FEST获取某个组件

转载 作者:太空宇宙 更新时间:2023-11-04 08:21:09 25 4
gpt4 key购买 nike

我对FEST有疑问:

我在 JDialog 中有四个 JtextField。如果我有四个 JTextField,其中属性 nametextvisibility 未定义或为 null,如何获取某个 JTextField

public class Form1 {
public static void main(String[] args) {
JTextField tf1 = new JTextField();
JTextField tf2 = new JTextField();
JTextField tf3 = new JTextField();
JTextField tf4 = new JTextField();

tf1.setPreferredSize(tf1.getPreferredSize());
tf1.setText("");
tf2.setPreferredSize(tf2.getPreferredSize());
tf2.setText("");
tf3.setPreferredSize(tf3.getPreferredSize());
tf3.setText("");
tf4.setPreferredSize(tf4.getPreferredSize());
tf4.setText("");

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(1, 1));
frame.add(tf1);
frame.add(tf2);
frame.add(tf3);
frame.add(tf4);
frame.setSize(300, 85);
frame.setVisible(true);
}
}

最佳答案

这里是一个使用反射为对象内包含的所有 JComponent 实例运行 setName 的方法。如果对象内部存在循环引用,则会出现堆栈溢出错误。

public static void assignComponentNames(Object obj) {

try {

Method getComponentsMethod = obj.getClass().getMethod("getComponents", new Class[]{});

if (null != getComponentsMethod){
try {
for (Component component : (Component[])(getComponentsMethod.invoke(obj))){
assignComponentNames(component);
}
} catch (IllegalAccessException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (InvocationTargetException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
else {
System.out.println(obj.toString());
}
} catch (NoSuchMethodException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}

for (Field field : obj.getClass().getDeclaredFields()) {
field.setAccessible(true);

String fieldName = field.getName(); //this is a different name, the reflection level name
Object fieldValue = null;

try {
fieldValue = field.get(obj);
} catch (IllegalAccessException e) {
e.printStackTrace();
}

if (null == fieldValue) {
continue;
}

if (fieldValue instanceof JComponent) {

String currentComponentNameForFieldValue = ((JComponent) fieldValue).getName();

if (null == currentComponentNameForFieldValue){
System.out.println("null component name");
((JComponent) fieldValue).setName(fieldName); //this sets the name specially for JComponent
}
}
else if(fieldValue instanceof Collection){

for (Object subObject : ((Collection)fieldValue).toArray()) {

assignComponentNames(subObject);
}
}

}
}

关于java - 如何使用FEST获取某个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9516750/

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