Swing中实现参数查询
Swing中实现参数查询
需求背景
基于Swing开发项目的用户,不仅仅满足于把结果报表在JFrame窗口中展现、打印,他们还希望自己能够输入查询条件,以实现实时的数据查询。
解决思路
1.做一个带有参数查询的报表,报表的具体设计如下图所示。
2.构建参数查询面板
在面板中通过JLabel,JTextField,JButton对象,分别作为参数查询的提示字符,参数输入框,以及查询按钮控件,构建出参数模板的样式。
3.传递参数给报表,
对于JButton控件添加事件监听,对于输入的参数可以传递到报表中,以便计算报表。
4.报表在面板中进行展现
构造CSReport控件,设置在面板中显示的相应属性,在面板中进行输出。
需求实现的部分代码
1.构建查询面板
frame = new JFrame(“参数模板“);
frame.setSize(900, 900);
panel = new JPanel();
FlowLayout flowLayout = new FlowLayout();
flowLayout.setHgap(10);
flowLayout.setVgap(10);
panel.setLayout(flowLayout);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.show();
button = new JButton();
button.setText(“查询“);
label = new JLabel();
label.setText(“请您输入参数“);
text=new JTextField(20);
2.给JButton的按钮添加事件监听。
button.addActionListener(new Listener(text));
panel.add(label);
panel.add(text);
panel.add(button);
frame.validate();
3.在监听类中获取到JTextField中输入的值。
public class Listener implements ActionListener {
JTextField lab;
public Listener(JTextField text) {
this.lab = text;
}
public void actionPerformed(ActionEvent e) {
String param = lab.getText();}}
4.设置报表参数值。
ParamMetaData pmd = rd.getParamMetaData(); // 从报表定义中取得参数元对象ParamMetaData
String paramOrMocrName = “”;
if (pmd != null) {
for (int i = 0, count = pmd.getParamCount(); i < count; i++) { // 讲究优化的写法
paramOrMocrName = pmd.getParam(i).getParamName(); // 获取参数名
ctx.setParamValue(paramOrMocrName, param); // 设参数值
5.计算报表并在进行展现
Engine engine = new Engine(rd, ctx);
IReport iReport = engine.calc(); // 运算代码,获得一个IReport对象
CSReport csReport = new CSReport(iReport); // 构造CSReport控件
JFrame jf = new JFrame(“润乾报表“); // 构造JFrame界面
try {
jf.getContentPane().add(csReport.getDisplayPane());
catch (Throwable e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
// 设置JFrame的相关属性并展现
jf.setSize(600, 400);
jf.setLocation(200, 100);
jf.show();
需求实现的效果图:
在参数模板中的文本输入框中输入table_id为1,点击查询,弹出根据参数计算后的报表。
实例总述
在swing中进行参数查询,首先通过控件构建出参数模板的样式,给输入控件添加监听,在事件触发时,将参数模板中的值取到,同时,也要获取到报表中所涉及的参数,将输入的参数值赋给对应的参数,计算报表,最终在面板中展现,附件中是完整的实例代码。