java使用GUI和MySQL数据库制作程序
我有一个关于我正在工作的项目的问题。它是用Java编写的MqSQL数据库的数据库管理器。所以我有下面的程序结构
因此,我有一个扩展JFrame的主类,它是接口的主框架,如下所示(删除了与讨论无关的不必要代码):
public class MainInterface extends JFrame {
public MainInterface {
................
MainInterface.setLayout(new FlowLayout());
MainInterface.setVisible(true);
TopToolbar toolbar;
try {
toolbar = new TopToolbar();
MainInterface.add(toolbar);
ResultsPanel Results = new ResultsPanel();
MainInterface.add(Results);
} catch (IOException e) {
e.printStackTrace();
}
}
TopToolbar和ResultsPanel是另外两个扩展JPanel的类,TopToolbar类有一个添加了按钮的JToolBar(向前移动、向后移动、添加条目)
public class TopToolbar extends JPanel implements ActionListener {
TopToolBar()
{
//constructor in which i was adding button to the toolbar, not relevat
}
}
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (MoveFirst.equals(cmd)){
try {
DatabaseAccess disp = new DatabaseAccess();
disp.getResults();
int id = disp.return_id();
System.out.println(id);
} catch (//exceptions) {
e1.printStackTrace();
}
}
这是next按钮的ActionListener事件,它将触发读取db中的下一个条目
DatabaseAccess是另一个初始化DB连接的类,具有以下两种方法:
public void getResults() throws SQLException {
Connection con = (Connection) DriverManager.getConnection(URL, user, "")
sql = (Statement) con.createStatement();
result_set = sql.executeQuery("select * from persons");
while (result_set.next()) {
id = result_set.getInt(1);
name = result_set.getString(2);
}
}
public int return_id(){
return id;
}
return_ID方法返回(并且确实有效)ID(数据库中的第一个键,显然会为数据库中的其余条目添加方法)。 现在,我想在最后一个JPanel中显示ID,这个名为ResultSet的JPanel(在GridLayout中,ID、名称等只有3个JLabel和3个文本字段)
由于dababase类的创建(以及随后读取db并返回结果的方法)是在TopToolBar Jpanel中的ActionPerformed方法内完成的,因此我无法从MainInterface JFrame访问它,然后使用类似
ResultsPanel DispResults = new ResultsPanel();
add(DispResults);
DispResults.setID(id_Value)
其中setID是ResultsPanel中的一个方法,它使用JTextBox setText来设置文本
我已经尽可能清楚地解释了我的问题
# 1 楼答案
我不同意你的几个选择
您不应该扩展JFrame。创建一个JPanel并将其交给JFrame显示
我会将数据库交互与Swing UI分离。将它们创建为自己的基于接口的POJO,而无需UI。让他们测试、编写并完美工作
数据库交互完成后,将该对象的实例提供给控制应用程序的类。为它提供一个纯文本界面,用于驱动数据库操作
一旦控制器完美地遵守了每个文本命令,使用经过充分测试的数据库组件,然后让它创建一个JPanel实例并将其交给JFrame。它将向其控制器所有者发出与您的文本UI已成功执行的相同的调用
计算机科学是关于分解的。你通过把大问题分解成小问题来解决它们
如果你想看看你的应用程序可能是什么样子的一个很好的例子,请下载SQL Squirrel