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

创建基于另一个但具有不同API的Swing组件

林蕴藉
2023-03-14
问题内容

我想基于现有的Swing JComponent创建一个新的Swing
JComponent,但使用不同的API。换句话说,我不想扩展现有组件,因为我不想访问它的API。

这里有一个例子来阐明我的需求:

替换为JCheckBox显示两个按钮ON / OFF。这可以基于 预先配置的
JCommandButtonStrip(此处提供一些信息),但要公开与完全相同的API
JCheckBoxJCommandButtonStrip不得更改其配置。

解决此类问题的最佳方法是什么?

说明:

有人指出,我写的关于API的内容还不清楚。

当然,JComponent有许多公共领域和方法可供每个子类使用。然后,的每个子类都JComponent可以添加自己的公共字段和方法。例如,AbstractButton添加isSelected()方法,而JCommandButtonStrip添加getButtonCount()方法。

所以,我的意思是:我想创建一个基于现有JComponent子类的新子类。除了那些方法之外,我不想被我的班级公开。然后,我想向中添加一些公共方法。MyJComponent``ExistingJComponent``ExistingJComponent``JComponent``MyJComponent``MyJComponent

请注意,我不是在寻找JCommandButtonStrip/ JCheckBox示例的替代方法。我对解决这种问题的一般方法感兴趣。


问题答案:

您可以创建一个扩展JComponent的新类,然后在构造函数内部插入一个复选框。

public class MyCoolCheckbox extends JComponent{
    private JCheckBox checkbox;
    public MyCoolCheckbox(String label) {
        checkbox= new JCheckBox(label);
        this.setLayout(new BorderLayout());
        this.add(checkbox, BorderLayout.CENTER);
    }
}

这显然是不完整的,您可能需要将某些方法委托给孩子。可能会变得凌乱。如果您按alt-
ins键(默认情况下)然后进行委派,然后选择复选框成员并选择要委派的条目,则像IntelliJ IDEA这样的IDE将为您生成所有这些信息。例如:

public void setForeground(Color fg) {
    checkbox.setForeground(fg);
}

public void setBackground(Color bg) {
    checkbox.setBackground(bg);
}
public Color getForeground() {
    return checkbox.getForeground();
}

public Color getBackground() {
    return checkbox.getBackground();
}

请记住,由于子级位于Swing组件树中,因此其他代码也可以访问这些子级,即使它们被标记为私有。

((JCheckBox)myCoolCheckbox.getComponents()[0]).setSelected(true);


 类似资料:
  • Spring boot maven插件正在使用paketo builder构建图像。 我想做的是在这个构建器正在做的事情上添加另一个步骤。我已经创建了自己的构建包,并试图创建包含基本构建包的构建器。 我遇到的第一个问题是,当试图从builder.toml创建一个构建器时,会出现这样的错误: 另一个问题是,即使这样做有效,我想我仍然必须指定来自paketo:base的所有order.group。 是

  • 我试图建立一个专栏,将根据另一个。新列应反映满足某些标准的值,并在值不符合标准的地方放置0。 例如,名为银行余额的列将有负值和正值;新列透支将为相应行提供负值,余额大于0时为0。 最终结果应该是这样的。

  • 基于dataframe列val_1值,查看其他列col_0-10标签前缀,然后创建另一列Mycl。 数据帧看起来像: 应用逻辑后所需的数据帧: 我是trid,但这不起作用:df['mycol']=df['col'df['val_1']。aType(str)] DDL生成DataFrame: 谢谢!

  • 问题内容: 我有2个表:projects,project_types。 如何基于project_type_id创建一个名为projectTypeName的虚拟字段,其名称来自projectType,对于那些project_type_id = 0的字段,它将为“” 我有这个 它正确显示为“ sales”,但我不想一一指定。 谢谢 问题答案: 这对我有用

  • 问题内容: 我有一个看起来像这样的数组。这是一个二维数组。 我想使用此信息来创建一个新的三维数组,如下所示。 请对此有任何帮助。我陷入困境,需要弄清楚如何使用此原始数组创建新数组。因此,基本上,我将每台计算机上的所有作业分组在一起,而这些作业的密钥取决于它们在原始阵列中的状态。因此,如果原始阵列上有一个键为2的作业,而该机上没有其他作业具有更高的键,则它将变成该作业的键0,并使用该机器名创建一个新

  • 问题内容: 我想在数组中的每个索引处创建一个大小相同的数组。用Java做到这一点的最佳方法是什么? 例如,如果为5且值为boolean ,则数组应为: 问题答案: 您可以尝试以下方法: 手动数组填充的第二种方法: