我不明白如何将程序的核心与程序的 GUI 部分分开。实际上,网络上的所有示例都表明任何 GUI 操作都必须使用 SwingUtilities.invokeLater() 方法执行。
问题是我不明白如何使用此方法仅处理我的 GUI 部分以及核心和 GUI 如何进行通信。
例如,我有一个类具有一些计算的 GUI 显示的责任:
public class GUI {
private JFrame window;
public GUI() {
window = null;
}
public void createWindow(int width, int height) {
window = new JFrame();
...
window.setVisible(true);
}
public void displayResults(Calcul results) {
/* Some Swing actions. */
}
}
我有我的程序的核心:
public class Core {
public static void main(String[] args) {
GUI gui = new GUI();
Calcul calculs = new Calcul();
while (true) {
/* Make some calculations. */
/* Put results into calcul. */
displayResults(calculs);
}
}
}
我知道这种架构并不理想,但我不得不使用它。我的问题是,我是否使用 EDT 将 GUI 部分和核心部分分开?而且,如果答案是肯定的,我该怎么做?
如果可能的话,我需要 EDT 调用对使用 GUI 类的用户是透明的。
编辑:
GUI 类的以下转换是否具有预期的行为?
public class GUI {
private JFrame window;
public GUI() {
window = null;
}
public void createWindowEDT(final int width, final int height) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
createWindow(width, height);
}
}
);
}
private void createWindow(final int width, final int height) {
window = new JFrame();
...
window.setVisible(true);
}
public void displayResultsEDT(final Calcul results) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
displayResultsEDT(results);
}
}
);
}
private void displayResults(final Calcul results) {
/* Some Swing actions. */
}
}