1

我想将一个类设置为 Jpanel 的模型,我已经为 Uni 的一个介绍编程类做了这个,但这是一个非常不优雅的实现。我确定有一个很好的设置方法,但我不知道/忘记了。

我之前使用的方法是将模型类作为参数传递给视图类,然后使用模型来确定它是什么类型的实例,然后根据此数据将特定图标加载到 gui。这是非常低效的,因为它总是必须检查某个位置的对象并重新加载所有内容。

我觉得这应该是相当直截了当的,但还没有找到正确的答案。任何帮助,将不胜感激。

4

3 回答 3

2

我想将一个类设置为 JPanel 的模型。

极好的。这正是每个 GUI 程序员应该做的。

我之前使用的方法是将模型类作为参数传递给视图类,然后使用模型确定它是什么类型的实例,然后根据此数据将特定图标加载到 GUI。

你有正确的想法。模型实例需要传递给 GUI 组件,以便它们可以访问模型的一部分。

在您的特定情况下,模型应该包含获取每个图标的方法,并且 GUI 组件将调用适合该组件的获取图标模型方法。

一般来说,如果您的 JPanel 有文本和按钮组件,那么您的模型应该包含这些文本和按钮组件的内容。如果您的 JPanel 有一个具有自己的数据模型的组件,例如 JTree,那么您可以将 DefaultTreeModel 保留在您的模型类中。

如果你愿意,你可以在你的 GUI 中为每个 JPanel 建立一个模型类。通常,您构建您的 GUI 模型,因此它是合乎逻辑的。

这是我的其他答案之一的真实示例:Spirograph GUI

于 2013-03-17T01:03:32.790 回答
0

在大多数情况下实际上JPanel用作“容器”,并且它没有自己的Model接口,例如JTableJList

于 2013-03-16T21:09:27.040 回答
0

就像他们说的,JPanel 没有模型。

但是,这里有一些种子代码,您可以使用它来尝试伪造它。

public abstract class GPanelModel {
    abstract public void setWhatEver();
    abstract public void getWhatEver();
    abstract public void doWhatEver();
}

public class GPanel<T extends GPanelModel> extends JPanel {
    final T t;
    public GPanel(final T model) {
        t = model;
    }
    public T getModel() {
        return t;
    }
}
于 2013-03-16T21:39:34.240 回答