java - 如何知道从另一个框架中选择了哪一行?

标签 java sql database

在第一个 Jframe 中,我有一个从数据库填充的 JTable,我需要将所选 jTable 的数据传递到另一个框架。

所以我需要从另一个 JInternalFrame 知道第一个 Jframe 中选择了哪一行

public void showTableData() {
        try {
            Class.forName(driverName);
            Connection con = DriverManager.getConnection(url, userName, password);
            String sql = "SELECT t.name, t.exam, l.coursename\n"
                    + "FROM exam AS t\n"
                    + "INNER JOIN Course as l ON (t.LendaID=l.LendaID)";
            PreparedStatement ps = con.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            int i = 0;
            Jtable1.setModel(DbUtils.resultSetToTableModel(rs));

        } catch (Exception ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, ex.getMessage(), "Error",
                    JOptionPane.ERROR_MESSAGE);
        }
    }

这是我在第一个 Jframe 中的表格

最佳答案

无论组件的数量有多少,作为一个简单的解决方案,您都可以创建一个 CourseEventDispatcher 类作为在整个应用程序中调度类(class)事件的中心点。

public class CourseEventDispatcher {
 private List<CourseEventSubscriber> subscribers;

 // ...

 public void dispatchEvent(CourseEvent event) {
   for(CourseEventSubscriber: subscribers) {
     if( event.getSource() != subscriber ) {
        subscriber.onCourseEvent(event);
     }
   }
 }
}

对于每个相关 View ,都有一个 Controller ,它是一个 CourseEventSubscriber:

public class SomeFrameController implements CourseEventSubscriber {
  private CourseEventDispatcher courseEventDispatcher;

  public SomeFrameController(CourseEventDispatcher courseEventDispather) {
    this.courseEventDispatcher = courseEventDispatcher;
  }

  public void addSelectionListener() {
    // ...
    table.getSelectionModel().addListSelectionListener(
        new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent event) {
             doYourOwnStuff();
             // then dispatch the event
             courseEventDispatcher.dispatch(new CourseEvent(this, event));
            }
        }
    );
  }

  // from some other view 
  public void onCourseEvent(CourseEvent event) {
   // process the event
   // e.g. event.getEvent()
  }
}

而CourseEvent是一个简单的类

public class CourseEvent {
  private CourseEventSubscriber source;
  private EventObject event;

  public CourseEvent(CourseEventSubscriber source, EventObject event) {
   this.source = source;
   this.event = event;
  }
  // getters
}

创建调度程序后,您可以添加(注册) Controller 。

希望这能给您带来另一种视角。

关于java - 如何知道从另一个框架中选择了哪一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56654788/

相关文章:

Java:可以通过观察者层次结构向观察者通知更改吗?

java - ListView 中图像可见,但文本不可见

sql - 从两个 SQL Count() 结果计算百分比

mysql 函数在两个表上,innodb

mysql - 使用 varchar 作为主键有什么限制?

mysql - 如果我期望的话,最好的 mysql 排序规则 ñ ü ï á é í ó ú

java - 理解-XX :+PrintCompilation的输出

java - 获取 JPAQuery 结果作为页面

mysql - SQL累计和及日期查询

SQL - 使用 sum() 检索获得值的第一行