解决方案 »
- DAO设计模式中的几个疑问,大家可部可以帮我看下,谢谢!
- 自己结合网上资料写的一个java图像灰度化程序,编译可以通过,但运行不行,请大家帮忙修改一下!谢谢!
- 经典:Java及相关字符集编码问题研究
- 谁有CSS+DIV 布局资料
- 请教:我用的jbuilder,struts架构,在action中的session赋中文值以后,回到jsp中,从session中取出的值为乱码,如何解决?
- 好宝贝一起分享
- applet如何使用session?
- 求apache的相关资料啊,最好是英文的
- 在java中,怎样画光滑的斜线
- 用JAVA语言查找文件的问题,谢谢!急!!!!
- at java.util.Calendar.setTime(Calendar.java:1075)求指导
- JAVA如何绘制动态波形图
public class Test { /**
* 这个是数据库查询接口,对应Spring里面的Service。
* 查询参数,可以根据情况,自定义类型。
*/
interface QueryService<T>{
List<T> query(Properties queryParams);
}
/**
* 查询事件对象,保存查询操作的相关信息。
*/
class QueryEvent{
Object source;//可以保存触发查询操作的Button对象,或者表示事件来源的对象信息。
Properties queryParams;//查询的参数
QueryService<?> queryService;//数据库查询操作对象
JPanel target;//查询结果的显示对象
Long createTime;//事件的创建时间
}
/**
* 事件的执行器,调用call方法,完成查询操作。
*/
abstract class EventRunner implements Runnable{
private QueryEvent queryEvent;
public EventRunner(QueryEvent queryEvent) {
this.queryEvent = queryEvent;
}
public void run(){
List<?> list;
try {
before(queryEvent);
list = queryEvent.queryService.query(queryEvent.queryParams);
setDatas(queryEvent.target,list,queryEvent);
after(list,queryEvent);
} catch (Throwable t) {
onException(t);
}
}
/**
* 将查询结果设置到target对应的Panel里,显示给用户观看。这个方法必须实现。
*/
protected abstract void setDatas(JPanel target, List<?> datas, QueryEvent event);
/**
* 在数据库查询之前调用,可以让target指向的Panel上显示“正在查询”字样的东西,增强用户体验。
* 这个方法可以不用实现
*/
protected void before(QueryEvent event) {
}
/**
* 在数据库查询之后调用。这个方法可以不用实现。
* 如果本次查询没有数据,可以让target指向的Panel上显示“没有查询结果”字样的东西,增强用户体验。
*/
protected void after(List<?> datas, QueryEvent queryEvent2) {
}
/**
* 在整个查询处理中,出现异常则会调用该方法。
*/
protected void onException(Throwable t){
t.printStackTrace();
}
}
/**
* 测试用例
* 同步调用方式:
*/
public void useage_0(){
//写在按钮的触发(响应)代码(ActionListener)中的。
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
QueryEvent queryEvent = new QueryEvent();
queryEvent.source = e.getSource();
queryEvent.createTime = System.currentTimeMillis();
queryEvent.queryParams = new Properties();
//采集查询条件,设置到queryParams中 ...
//通过Spring的BeanFactory获得具体的QueryService对象
//queryEvent.queryService = ApplicationContext.getBean("bean name");
//queryEvent.target = < some JTable object >;
EventRunner runner = new EventRunner(queryEvent) {
@Override
protected void setDatas(JPanel target, List<?> datas, QueryEvent event) {
// TODO 需要填写 设置数据的代码
}
};
runner.run();
}
};
//button.addActionListener(listener);
}
/**
* 测试用例
* 异步调用方式:
*/
public void useage_1(){
//写在按钮的触发(响应)代码(ActionListener)中的。
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
QueryEvent queryEvent = new QueryEvent();
queryEvent.source = e.getSource();
queryEvent.createTime = System.currentTimeMillis();
queryEvent.queryParams = new Properties();
//采集查询条件,设置到queryParams中 ...
//通过Spring的BeanFactory获得具体的QueryService对象
//queryEvent.queryService = ApplicationContext.getBean("bean name");
//queryEvent.target = < some JTable object >;
EventRunner runner = new EventRunner(queryEvent) {
@Override
protected void setDatas(JPanel target, List<?> datas, QueryEvent event) {
// TODO 需要填写 设置数据的代码
}
};
//如果上下文环境中存在ExecutorService(线程池)对象,
//那么直接 executorService.submit(executor);
//如果上下文环境中不存在线程池,那么创建线程,执行查询操作
Thread executor = new Thread(runner);
executor.start();
}
};
//button.addActionListener(listener);
}
}
恩,谢谢,我这里不想使用bean来操作,数据库中表的数据很多所以不方便一个个来写,而且在eclipse里面没有集成ssh的条件下使用spring也不怎么会。。
不过你的思路给的很好,非常感谢~
其中sqlhelper里面主要是数据库连接以及查询方法,constant里面是对面板的一些参数进行初始化的操作,就不附上了~package pack.frame.pane.list;import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;import javax.swing.JPanel;import pack.BaseMainJPanel;
import pack.MiddleButtonJPanel;
import pack.SqlHelper;/**
* 显示查询数据表中的信息面板
*
*/
public class ListJPanel extends BaseMainJPanel { /**
*
*/
private static final long serialVersionUID = 1L; private static ListJPanel ListJPanel;
private ResultSet rs = null; private ListJPanel() { } public static ListJPanel getInstance() {
// TODO Auto-generated method stub
ListJPanel = new ListJPanel();
return ListJPanel;
} @Override
public String[][] fillTableData() {
// TODO Auto-generated method stub
String sql = "select * from user";
System.out.println(sql);
rs = SqlHelper.execteQuery(sql, null);
String[][] table = null;
try {
// 结果集指定到最后一行数据
rs.last();
int m = rs.getRow();
ResultSetMetaData rsmd = rs.getMetaData();
int n = rsmd.getColumnCount();
table = new String[m][n + 1];
// 将结果集指定到开头
rs.beforeFirst(); System.out.println(m + " " + n); for (int i = 0; i < m && rs.next(); i++) {
for (int j = 1; j <= n; j++) {// 这个getString规定是从1开始的哈。
table[i][j] = rs.getString(j);
// System.out.println(table[i][0]);
table[i][j - 1] = rs.getString(j);
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return table;
} @Override
public String[] fillTableHeader() {
// TODO Auto-generated method stub
String sql = "select * from user";
System.out.println(sql);
rs = SqlHelper.execteQuery(sql, null);
String[] column_name = null;
try {
ResultSetMetaData rsmd = rs.getMetaData();
int n = rsmd.getColumnCount();
// 获取列名
column_name = new String[n];
for (int i = 0; i < n; i++)
column_name[i] = rsmd.getColumnName(i + 1);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return column_name;
} @Override
public JPanel setButtonJPanel() {
// TODO Auto-generated method stub
return new MiddleButtonJPanel(czJpanel);
}}import java.awt.BorderLayout;
import javax.swing.JPanel;
import com.tqms.util.Constant;
/**
* 有表格的面板
* @author Administrator
*/
public abstract class BaseMainJPanel extends JPanel implements Constant { public final static String czJpanel = "czJpanel";
private static final long serialVersionUID = 6818200379655732088L; public abstract String[][] fillTableData(); public abstract String[] fillTableHeader(); public abstract JPanel setButtonJPanel();
/**
* 显示面板
*/
public void viewJPanel() {
this.setLayout(new BorderLayout());
DataTableJScrollPane dataPanel = new DataTableJScrollPane(
fillTableData(), fillTableHeader());
this.add(dataPanel, BorderLayout.CENTER);
// 按钮面板设为--布局置顶
this.add(setButtonJPanel(), BorderLayout.NORTH);
} public BaseMainJPanel() {
super();
}
}import java.awt.Color;
import java.awt.FlowLayout;import javax.swing.JButton;
import javax.swing.JPanel;
/**
* 操作布局顶部按钮面板
*
* @author Administrator
*/
public class MiddleButtonJPanel extends JPanel {
private static final long serialVersionUID = -593726515640329532L;
public MiddleButtonJPanel(String jpanelName) {
// 设置布局
FlowLayout flowLayout = new FlowLayout();
flowLayout.setVgap(2);
flowLayout.setHgap(2);
flowLayout.setAlignment(FlowLayout.RIGHT);
setLayout(flowLayout);
setBackground(new Color(232, 232, 232));
}
}
但是这个显示需要嵌套啊,嵌套到另一个面板里面,不要hibernate和spring在获取数据库中数据的时候有些问题啊。。 当然我不怎么懂还是。。难不难只有自己去写才知道,对于我这样的菜鸟来说确实有点困难,所以才来发帖提问的。。