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

标签 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,其中添加了按钮(向前移动、向后移动、添加条目)

 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 事件,它应该触发读取数据库中的下一个条目

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(数据库中的第一个键,显然会为数据库中的其余条目添加方法)。 现在我想在最终的 JPanel 中显示 ID,该 JPanel 称为 ResultsSet(在 GridLayout 中只有 3 个 JLabel 和 3 个用于 ID、名称等的 TextFields)。

由于数据库类的创建(以及随后读取数据库和返回结果的方法)是在 TopToolBar Jpanel 的 ActionPerformed 方法中完成的,我无法从 MainInterface JFrame 访问它然后使用类似

  ResultsPanel DispResults = new ResultsPanel();
  add(DispResults);
  DispResults.setID(id_Value)

其中 setID 是 ResultsPanel 中使用 JTextBox setText 设置文本的方法。

希望我已经尽可能清楚地解释了我的问题。

最佳答案

我不同意你的几个选择。

您不应扩展 JFrame。创建一个 JPanel 并将其交给 JFrame 进行显示。

我会将数据库交互与 Swing UI 分离。自行将它们创建为基于界面的 POJO,无需 UI。让它们经过测试、编写并完美运行。

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

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

计算机科学就是分解。您可以通过将大问题分解成更小的问题来解决大问题。

如果您想查看一个很好的应用示例,请下载 SQL Squirrel .

关于java - 使用 GUI 和 MySQL 数据库制作程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32279618/

相关文章:

java图形更新

mysql - 与 MySQL 相交

mysql - 使用 3 个连接表进行 SQL 排序

php - 如何在 CakePHP 中使用本周、本月、今年搜索数据

eclipse - Mylyn 提交默认消息丢失

java - Java中简单多线程程序的奇怪问题

java - 如何全面了解 Java 中的流?

java - 一个可更新的模型如何(例如 Cassandra CQL3 中的 “status”)并能够查询此状态?

java - 在同一个项目上同时使用 Eclipse 和 NetBeans

c++ - Mac 上的 Eclipse dyld : Library not loaded: Image not found