Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java TableModel未加载来自鼠标上JPA查询的数据单击JTabbedPane_Java_Swing_Jpa_Jtable_Jtabbedpane - Fatal编程技术网

Java TableModel未加载来自鼠标上JPA查询的数据单击JTabbedPane

Java TableModel未加载来自鼠标上JPA查询的数据单击JTabbedPane,java,swing,jpa,jtable,jtabbedpane,Java,Swing,Jpa,Jtable,Jtabbedpane,我有一个Java类,我创建了一个查询(JPA with EclipseLink)来从DB加载信息。当单击JTabbedPane时,数据被加载到绑定到JTable的TableModel中。 我使用MouseEvent的MouseClicked来获取所选选项卡。但有些表加载失败,我感觉好像什么都没有点击,但当我浏览选项卡并返回到加载失败的选项卡时,它最终有时会加载数据。我的代码如下: private void jTabbedPane1MouseClicked(java.awt.event.Mouse

我有一个Java类,我创建了一个查询(JPA with EclipseLink)来从DB加载信息。当单击JTabbedPane时,数据被加载到绑定到JTable的TableModel中。 我使用MouseEvent的MouseClicked来获取所选选项卡。但有些表加载失败,我感觉好像什么都没有点击,但当我浏览选项卡并返回到加载失败的选项卡时,它最终有时会加载数据。我的代码如下:

private void jTabbedPane1MouseClicked(java.awt.event.MouseEvent evt) {  
  int selectTab = jTabbedPane1.getSelectedIndex();
  if (selectTab == 1) {
    bookValueTable.getColumnModel().getColumn(0).setMaxWidth(150);
    bookValueTable.getColumnModel().getColumn(1).setMaxWidth(150);
    if (!tab2Opened) { //this makes sure the data is not loaded multiple time....
        tab2Opened = true;
        Query q = em.createQuery("select e from EnterpriseInvestments e Where e.acctYear = :acctYear");
        q.setParameter("acctYear", acctYear);
        List<EnterpriseInvestments> resultList = q.getResultList();
        for(EnterpriseInvestments p: resultList){
          Object row[] = {p.getEnterprise().getRcNo(), p.getAcctYear(), p.getInvestmentItem(),
                nf.format(p.getInvestmentAmount())};
            shareCapitalModel.addRow(row);
        }
    }
    bookValueTable.setRowSorter(new TableRowSorter(shareCapitalModel));
}
private void jTabbedPane1MouseClicked(java.awt.event.MouseEvent evt){
int selectTab=jTabbedPane1.getSelectedIndex();
如果(selectTab==1){
bookValueTable.getColumnModel().getColumn(0).setMaxWidth(150);
bookValueTable.getColumnModel().getColumn(1).setMaxWidth(150);
如果(!tab2Opened){//这将确保数据不会多次加载。。。。
tab2Opened=true;
Query q=em.createQuery(“从企业投资e中选择e,其中e.acctYear=:acctYear”);
q、 设置参数(“acctYear”,acctYear);
List resultList=q.getResultList();
对于(企业投资p:resultList){
对象行[]={p.getEnterprise().getRcNo(),p.getAcctYear(),p.getInvestmentItem(),
格式(p.getInvestmentAmount())};
shareCapitalModel.addRow(行);
}
}
bookValueTable.setRowSorter(新的TableRowSorter(shareCapitalModel));
}

我不知道问题出在哪里:JPA、TabbedPane或EventHandler!

如果我理解正确,您希望在选中包含表的选项卡后加载表的内容

首先,您不应该使用鼠标侦听器来执行此操作。它的级别太低。此外,您可以使用键盘切换选项卡。要检测到选项卡选择的更改,您应该在选项卡窗格中添加ChangeListener

您应该做的另一件事是从侦听器中删除JPA代码,并将其放在单独的方法中,甚至放在单独的类中。GUI代码的职责不是知道如何从数据库中获取数据。在数据访问对象中执行此操作,并对该数据访问对象进行单元测试,以了解其是否正常工作。如果您知道,请在y中使用它我们的GUI。如果有问题,它将出现在GUI代码中,因为您已经测试了数据访问代码的工作情况


使用调试器,最终使用日志语句,也有助于诊断问题的来源。

如果我理解正确,您希望在选择包含表的选项卡后加载表的内容

首先,您不应该使用鼠标侦听器来执行此操作。它的级别太低。此外,您可以使用键盘切换选项卡。要检测到选项卡选择的更改,您应该在选项卡窗格中添加ChangeListener

您应该做的另一件事是从侦听器中删除JPA代码,并将其放在单独的方法中,甚至放在单独的类中。GUI代码的职责不是知道如何从数据库中获取数据。在数据访问对象中执行此操作,并对该数据访问对象进行单元测试,以了解其是否正常工作。如果您知道,请在y中使用它我们的GUI。如果有问题,它将出现在GUI代码中,因为您已经测试了数据访问代码的工作情况


使用调试器,以及最终的日志语句,也有助于诊断问题的来源。

除了@JB对侦听器的指导之外,我怀疑JPA查询中的延迟正在阻止事件调度线程(EDT)。尽管您必须在EDT上更新表模型,但您可以在
doInBackground()中执行查询
SwingWorker的方法,如API中所示。

除了@JB对侦听器的指导之外,我怀疑JPA查询中的延迟正在阻止事件调度线程(EDT)。尽管您必须在EDT上更新表模型,但您可以在
doInBackground()中进行查询
SwingWorker的方法,如API中所示。

考虑在代码中使用调试器或记录器,或println语句来首先尝试隔离错误的位置。非常幸运。顺便说一句,我不是你的投票人。为了获得更好的帮助,单击选项卡时,会触发事件,但我不想立即重画。我对JTAT有点新。考虑使用调试器或记录器,或者代码中的PrtLnn语句,首先尝试隔离错误的位置。运气好。顺便说一下,我不是你的下级选民。为了更好地帮助,当我点击了标签后,我确实打印出了日志。表没有我想马上重新粉刷。我对JTable有点陌生。