java - 为什么卡片布局键作为对象传递?

标签 java swing enums cardlayout

java.awt.CardLayout.addLayoutComponent(组件组件,对象约束)

“约束指定的对象必须是字符串”,来自 docs.oracle documentation .

既然对象必须是字符串,为什么这个方法要接受对象作为参数呢?这个问题一直困扰着我,因为它让我希望有一种简单的方法可以使用枚举作为卡片布局的键。

public class MainWindow extends JPanel {

private CardLayout cards = new CardLayout();

public MainWindow() {
    setLayout(cards);
    cards.addLayoutComponent(new FirstComp(), MyEnum.LONG_ANNOYING_NAME_ONE);
    cards.addLayoutComponent(new SecondComp(), MyEnum.LONG_ANNOYING_NAME_TWO);
    cards.addLayoutComponent(new ThirdComp(), MyEnum.LONG_ANNOYING_NAME_THREE);
    /**
     * notice no .toString() call on enums. Is there a way to define my
     * enum class so that this functionality is possible?
     **/
}

public void showMethod(MyEnum show) {
    cards.show(this, MyEnum);
}
}
<小时/>
public enum MyEnum {

    LONG_ANNOYING_NAME_ONE, LONG_ANNOYING_NAME_TWO, LONG_ANNOYING_NAME_THREE

}

最佳答案

LayoutManager2 定义了 addLayoutComponent(Component, Object)。第二个参数是 Object,因为不同的布局管理器可以支持不同类型的约束。 CardLayout 实现 LayoutManager2,因此它必须实现定义的方法。

关于java - 为什么卡片布局键作为对象传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23350873/

相关文章:

c - 如何使输入的字母(通过 scanf)按照枚举中定义的方式解释为整数。请引用下面的程序

JOptionPane 上的 Java 阶乘

url 重定向中的 Java HttpUrlConnection 国际字符

java - UnsatisfiedLinkError 加载 OpenCV (Linux)

java - 主方法完成后的 Swing 计时器持久性

java - 使用枚举编程

带有通配符的Java泛型问题

java - 如何为触摸屏编程java虚拟键盘?

java - 无法从内部类访问封闭类的 JPasswordField 对象

ios - 无法在 Objective-C 中将 Swift 类与枚举一起使用