相同的数据集,两个不同的JTable - java

我必须通过两个JTables显示一些数据。数据是相同的,但是每个表的显示方式必须有所不同。
另外,我从外部连接接收数据(在这种情况下为JMS,但这并不重要,它可以是DB,也可以是其他任何东西)。

由于我是Swing的新手,所以对于谁应该触发事件,谁应该收听事件以及如何进行设置,我仍然有些困惑,以便对我的数据集进行修改时,我要同时更新两个表。

现在,我的数据集结构以及一些虚拟数据的一个小例子:

class Student{ String name; Classroom classroom; boolean goodStudent}
class Classroom{ Sting name; List<String> coursesTaught; List<Student> students;}

public List<Classroom> classes;

基本上,我的数据集将是Controller类中的classes字段,并且两个JTable必须以不同的方式显示内容。
即,表1必须显示类似以下内容:

Classroom Name | Courses
4a             | CS101, CS102, CS103
4b             | BM101, CS102
4c             | I101, CS4100

因此,基本上,每个教室都有课程列表。

Table2应该显示如下内容:

Student Name   | Good?
Mark Spencer   | true
Philippe Mann  | true
Tom Sayer      | false

我应该看到所有教室的所有学生。

如您所见,数据相同,但是显示方式不同。
我想做的是,当我的数据更改时,表也将自动更新。
就目前为止我所了解的,我将必须继承AbstractTableModel并为要显示的数据类型创建两个不同的TableModel。我不明白的是:

一旦发生某些变化,模型将如何获取其数据?
谁应将此更改通知模型?
调用“ fireTableXXXEvent()”足以触发视图刷新是否足够?

我希望我已经足够清楚了...
无论如何,非常感谢!
再见

参考方案

你是对的。您需要2个AbstractTableModels。
假设您具有列表列表类别列表类别作为主要数据源。第一个模型行计数将仅返回列表的size()。第二个将返回每个教室的学生计数总和。两种模型的列数均为2。有效的方法是getValueAt / setValueAt,您必须找到适当的行。对于第一个列表,只需要适当的列表即可。对于第二个表格模型,您必须计算适当的行,然后遍历学生列表。
假设数据库中有一些更改。您检索一个新的列表。您可以找到更改内容,插入/删除/更改了哪些行/列,或者只是替换两个模型中的数据源列表,并触发结构更改事件以让JTable完全刷新内容。
这不是自动更新模型。你可以写例如计时器以每秒/分钟/小时的速度检查更改,或在重新打开显示表格的对话框/框架时刷新。

Java Swing SearchBox模型 - java

我需要使用Java Swing的搜索框,如果单击任何建议,当输入字母时它将显示来自数据库的建议,它将执行一些操作。如果有可能在Java swing中,请提供源代码提前致谢 java大神给出的解决方案 您可以使用DefaultComboBoxModel,输出将是这样。Try this在此代码中,您将找到countries数组,因此您需要从数据库中获取此数组。

Swing-典型桌面应用程序中的并发 - java

这可能是一个广泛的问题,但我想知道单用户桌面应用程序通常在何处使用并发。您如何发现理想情况下(在设计阶段)并发问题?附注:从操作系统理论上来说,并发问题通常发生在无法共享资源(例如打印机)的情况下。不过,我仍然对在编程级别上可能发生的情况感到迷惑。 java大神给出的解决方案 Event Dispatch thread与其他逻辑之间的Swing中可能存在线程…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

Java-如何使Jtextfield充满整个框架 - java

我正在尝试使JTextArea填充整个框架,因此它看起来有点像记事本或textedit。也可以有一个滚动窗格。提前致谢!编辑:JTextArea 参考方案 试试这个 - -import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JTextField; public…