使用GUI和MySQL数据库制作程序

时间:2015-08-28 20:53:50

标签: java mysql eclipse swing user-interface

我对我正在制作的节目有疑问。它是用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我已尽力解释我的问题。

1 个答案:

答案 0 :(得分:3)

我不同意你的几个选择。

您不应该扩展JFrame。创建一个JPanel并将其提供给要显示的JFrame。

我会从Swing UI中分离数据库交互。在没有UI的情况下,将它们创建为基于接口的POJO。让他们经过测试,编写和完美运作。

数据库交互完美后,将该对象的实例提供给控制应用程序的类。为它提供一个纯文本界面来驱动数据库操作。

一旦控制器完全遵守每个文本命令,使用经过全面测试的数据库组件,然后让它创建一个JPanel实例并将其提供给JFrame。它将对其控制器所有者进行相同的调用,以使您的文本UI已成功执行。

计算机科学就是分解。你可以通过将它们分解成较小的问题来解决它们。

如果您希望看到应用程序外观的一个很好的示例,请下载SQL Squirrel