有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    我不同意你的几个选择

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

    我会将数据库交互与Swing UI分离。将它们创建为自己的基于接口的POJO,而无需UI。让他们测试、编写并完美工作

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

    一旦控制器完美地遵守了每个文本命令,使用经过充分测试的数据库组件,然后让它创建一个JPanel实例并将其交给JFrame。它将向其控制器所有者发出与您的文本UI已成功执行的相同的调用

    计算机科学是关于分解的。你通过把大问题分解成小问题来解决它们

    如果你想看看你的应用程序可能是什么样子的一个很好的例子,请下载SQL Squirrel