当前位置: 首页 > 面试题库 >

如何绑定列表(一次或多次)?

邓欣可
2023-03-14
问题内容

我遵循Presentation Model模式对一些屏幕进行编码。

  • 我把一些豆子放在一个 ArrayList
  • 我将在中显示此列表的内容,这JTable要归功于AbstractTableModel
  • 我还想同时在组合框(以表单的形式)中显示此列表中的 某些记录*并同时 在JList中显示 其他 记录。 ***
  • 这三个屏幕(及其模型)彼此独立

如何管理在我的列表中添加{一个或多个} /删除{一个或多个}并在各处实时查看更改?

我将要编写自己的ObservableList或在EventDispatcher周围实现该功能…您如何看待?

PS:

  • 我知道在C#BindingList中为此目的提供帮助,那么Java呢?
  • 多亏了,我已经能够显示每个bean的更新PropertyChangeSupport

问题答案:

让您的AbstractTableModel实现ListModel,这两个JComboBox andJList 都可以使用。您可以根据需要将方法转发到默认模型实现。

如何使用表中SharedModelDemo提到的附录:是一个示例,可以帮助您入门。它,虽然你应该做
__
extends DefaultListModel implements TableModel``extends AbstractTableModel implements ListModel

附录:以下是最小实现和三个测试实例的概述,以供参考。我使用了默认的combo和list实现,但是如果需要,可以使用相应的抽象实现。

public class SharedModel extends AbstractTableModel
        implements ComboBoxModel, ListModel {
    private ComboBoxModel comboModel = new DefaultComboBoxModel();
    private ListModel listModel = new DefaultListModel();

    //ComboBoxModel
    @Override
    public void setSelectedItem(Object anItem) {
        comboModel.setSelectedItem(anItem);
    }

    @Override
    public Object getSelectedItem() {
        return comboModel.getSelectedItem();
    }

    // ListModel
    @Override
    public int getSize() {
        return listModel.getSize();
    }

    @Override
    public Object getElementAt(int index) {
        return listModel.getElementAt(index);
    }

    @Override
    public void addListDataListener(ListDataListener l) {
        listModel.addListDataListener(l);
    }

    @Override
    public void removeListDataListener(ListDataListener l) {
        listModel.removeListDataListener(l);
    }

    // TableModel
    @Override
    public int getRowCount() {
        return 0;
    }

    @Override
    public int getColumnCount() {
        return 0;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return null;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                SharedModel sm = new SharedModel();
                JTable table = new JTable(sm);
                JList list = new JList(sm);
                JComboBox check = new JComboBox(sm);
            }
        });
    }
}


 类似资料:
  • 有人说 lrange key 0 -1 这个只是读取啊,可以反复读取,数据不会删除。 lpop一次只能弹出一个。

  • 我有一个Laravel 5.8项目,我需要加入3个表来显示一些结果。 基本上,我已经将所有自定义id存储在一个名为的表中。 例如,这里有两个自定义ID,我需要检索它们的: 所以我试了一下: 但这是错误的,并向我展示了错误: SQLSTATE[42000]:语法错误或访问冲突:1066不唯一 所以我需要这样说: 然后: 我该怎么做呢?

  • 我对Angular的一次性绑定有困难。 假设我想将ngIf与一次性绑定结合使用,如下所示: 在这种情况下,角为if中的表达式创建了一个监视。一旦它被解析为非未定义的值,监视就会被删除。 如果它仅被解析为真实值,则后代html树将被添加到DOM并随后呈现。 现在这一切都很好,但我真的想避免初始监视,只需解析表达式,如果它未定义,只需设置一个监视。原因在我的场景中相当复杂,但基本上我有一些机制,可以暂

  • 问题内容: 我想知道是否可能有一个ng类,其中class一度绑定,并且每个摘要周期评估一次class。 我知道我可以一次绑定完整的ng-class, 但是我需要一次绑定一个特定的表达式 当然,这是行不通的: 有办法吗? 问题答案: 方法1: 方法2:

  • 我正在Windows Server 2008 R2(64位)上运行此操作,并且'ipconfig/all'只显示一个网络适配器/接口(其他网络适配器被禁用)。但是,在其他一些机器上,这个程序实际上会抛出预期的“java.net.bindexception:Address已经在使用:jvm_bind”! 会发生什么事?

  • 问题内容: 自1.3.0-beta.10版本以来,AngularJS具有一项新功能:“懒惰的一次性绑定”。 可以在简单表达式的前面加上,告诉angular在首次评估表达式后停止观看。给出的常见示例如下所示: 类似以下表达式的语法是否类似? 问题答案: 是。您可以在每个表达式前添加,甚至可以在或中添加前缀: 实际上,代码只是检查表达式中的前两个字符是为了激活一次性绑定(然后将其删除,因此甚至不需要括