我对我正在制作的节目有疑问。它是用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(Move Forward,MoveBack,Add entry)
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();
}
}
这是下一个按钮的ActionListener事件,它应触发读取db中的下一个条目
DatabaseAccess是另一个初始化数据库连接的类,它有以下两种方法:
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(数据库中的第一个键,显然会为db中的其余条目添加方法)。 现在我想在最终的JPanel中显示ID,一个名为ResultsSet的ID(在GridLayout中只有3个JLabel和3个TextField用于ID,Name等)。
由于dababase类创建(以及随后读取db并返回结果的方法)是在TopToolBar Jpanel内部的ActionPerformed方法内完成的,我无法从MainInterface JFrame访问它,然后使用类似
ResultsPanel DispResults = new ResultsPanel();
add(DispResults);
DispResults.setID(id_Value)
其中setID是ResultsPanel中的一个方法,它使用JTextBox setText来设置文本。
Hoope我已尽力解释我的问题。
答案 0 :(得分:3)
我不同意你的几个选择。
您不应该扩展JFrame。创建一个JPanel并将其提供给要显示的JFrame。
我会从Swing UI中分离数据库交互。在没有UI的情况下,将它们创建为基于接口的POJO。让他们经过测试,编写和完美运作。
数据库交互完美后,将该对象的实例提供给控制应用程序的类。为它提供一个纯文本界面来驱动数据库操作。
一旦控制器完全遵守每个文本命令,使用经过全面测试的数据库组件,然后让它创建一个JPanel实例并将其提供给JFrame。它将对其控制器所有者进行相同的调用,以使您的文本UI已成功执行。
计算机科学就是分解。你可以通过将它们分解成较小的问题来解决它们。
如果您希望看到应用程序外观的一个很好的示例,请下载SQL Squirrel。