如何从引用组件名称的字符串动态创建Swing组件(如JPanel或JButton)?
例如;
String c = "JPanel";
(c) com = new (c)(); // It must be equivalent JPanel com = new JPanel();
或类似的功能;
Object c = Object.createObjectFromString(c);
由于
答案 0 :(得分:3)
可以使用Reflection API:
完成Class<?> klazz = Class.forName("javax.swing.JPanel");
JPanel panel = (JPanel) klazz.newInstance();
请注意,您必须将完全限定的类名传递给forName()
方法,并且在某些时候(将其作为Class<?>
的类型参数或使用类似于上面的代码)你必须明确指定你想要实例化的类。或者,如果您不关心实例的确切类型,您可以简单地执行此操作:
Object obj = klazz.newInstance();
另外,我假设该类已定义了无参数构造函数。如果不是这种情况,则必须在实例化新对象之前先创建Constructor
对象:
Class<?> klazz = Class.forName("javax.swing.JPanel");
Constructor<?> constructor = klazz.getDeclaredConstructor(/* parameter types */);
JPanel panel = (JPanel) constructor.newInstance();
答案 1 :(得分:2)
你可以使用反射:
// c is JPanel for instance
Sting componentClassName = "javax.swing." + c;
JPanel panel = (JPanel)Class.forName(componentClassName).newInstance();
使用Class.newInstance()
要求您创建的组件具有默认构造函数,但大多数(如果不是全部)标准Swing组件都提供此组件。
答案 2 :(得分:0)
点击此处How to create an object from a string in java how to eval a string和Creating an instance from string in java。但是,如果您希望在单行中进行评估,我还建议您编写自己的预处理器。这就是C / C ++预处理器所做的事情。