【问题标题】:How to create a custom model that controls the display of check boxes?如何创建控制复选框显示的自定义模型?
【发布时间】:2017-03-20 07:21:06
【问题描述】:

我有一个包含JCheckBox 字段列表的JPanel,我希望它们以特定顺序显示。有人告诉我,可以创建一个视图模型来对这些复选框进行排序。我对 Swing 很陌生,不知道如何进一步进行。我无法在互联网上找到任何来源。有人可以帮我找出实现上述方法的方法。提前致谢。

【问题讨论】:

  • 只需按照您希望它们显示的顺序添加它们。如果您想要更多控制权,可以使用GridBagLayout
  • 不能按我想要的顺序添加它们(因为一些限制)。
  • 然后使用一个布局管理器,它可以让你控制定位,比如 GridBagLayout
  • GridBagLayout 用于屏幕中的视图定位,对吗?我的用例是,我在面板中有复选框列表,它们将在运行时动态启用/禁用。我希望所有这些复选框根据它们的状态动态排序(先启用然后禁用)。
  • 然后,您可能需要一个自定义布局管理器......我不想成为您的最终用户:P

标签: java swing


【解决方案1】:

您似乎想为控制视图中显示的数据创建一个模型。一种方法是为模型创建一个合适的TableModel,并为视图使用JTable。您的TableCellRenderer 可以调节显示器的颜色和启用状态;您对Comparable 的实现将定义排序顺序。

在这场比赛中,exampleclass DataModel extends AbstractTableModel 通过转发到Double 来管理List<Value>Value implements Comparable<Value>。您的实现将为Enabled 添加一个属性,并将其包含在所需方法的实现中。概括地说,

private static class Value implements Comparable<Value> {

    private Boolean selected;
    private Boolean enabled;
    private Double value;

    public Value(Boolean selected, Boolean enabled, Double value) {
        this.selected = selected;
        this.enabled = enabled;
        this.value = value;
    }

    @Override
    public int compareTo(Value v) {…}

    @Override
    public boolean equals(Object v) {…}

    @Override
    public int hashCode() {…}
}

这个相关的example 使用MyObjectManager 的实例来管理单选按钮之间的互斥。

【讨论】:

    猜你喜欢
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多