在运行时期间动态地向JPanel添加组件

时间:2011-12-02 07:39:14

标签: java user-interface

在开发软件期间,我需要执行一个存储为string的语句。比如说:

String test = " int a; ";

在上面的例子中,我想声明一个变量a

另一个例子是从string

执行mysql语句
String sqlquery ="SELECT * FROM FULLDETAILS WHERE Classname = 'test' ";
            con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/executable","root","mysql");
             st = (Statement) con.createStatement();
             rs = st.executeQuery(sqlquery);
                          ^

我也想为Java语句实现这一点。有办法吗?

编辑:

上面给出的是一个例子,真实情况有很大不同(但我基本上需要的是相同的)。

情况是,我有一些jpanels,我想添加一些组件,比如说label,标签的内容是从数据库中获取的,而且它只是在运行时我可以知道,我应该向哪个面板添加组件。在这种情况下,我无法通过名称指定panel,比如我有10 jpanels,我想我可以使用如下字符串:

String test = " jpanel " + i + " .add(jlabel1); " ;

将导致test的值为:

jpanel1.add(jlabel1); // provided i is a string with value of i is 1

现在我想执行此操作。有办法吗?

2 个答案:

答案 0 :(得分:8)

也许这不是你想要的,但是你可以小心地使用Java的Reflection API来调用基于(例如)字符串的方法或其他东西。

SQL语句差别很大,因为它们并不是由Java内部实际执行,而是由JDBC连接另一端的一些额外SQL Server处理。

<击>

在某个地方,您应该拥有所有面板的初始列表,或者在启动时创建它,或者如果我是对的那样创建它? 您应该去找一个数据结构来保存它们(例如HashMap似乎合适),添加所有面板并使用一个键来取回它们并根据需要添加标签。

粗略的例子:

Map<Integer, Panel> panelMap = ...
for(int i = 1; i < 10; i++) {
    Panel panel = new Panel();
    panelMap.put(i, panel); 
}

panelMap.get(1).addLabel(labelForPanel1); (for all labels)

当程序执行时,变量名或多或少无关紧要,然后它们都是对象。希望能满足您的需求......或者现在我完全错过了:)。

答案 1 :(得分:3)

您似乎想要做的就像Java的eval()函数。据我所知,Java没有提供,但它支持脚本语言,因此您可能希望回归到它。

我在StackOverflow上找到了question。看那里的答案。或者,查看JEXL。这是一个Apache项目,我之前在项目中成功使用过它。