gpt4 book ai didi

java - 是否可以在接口(interface)中使用 setLayout() 以便 "force"实现类以使用特定布局?

转载 作者:行者123 更新时间:2023-12-01 10:03:19 25 4
gpt4 key购买 nike

我仍在学习界面,所以我的问题可能有点基本!

我已经read a bit about interfaces并试图玩弄他们。我提出的一个用例是“强制”实现类使用某种布局。

示例:

我有几个扩展 JPanel 的类(page1、page2...)。它们都通过构造函数中的 setLayout(new MigLayout()) 使用 MigLayout。如果您忘记设置 MigLayout,这些类可能仍然有效,可能看起来仍然相当正常,或者有时会完全损坏。因此,最好始终为所有类设置相同的布局。

我的想法是,创建一个接口(interface)并在其中放入一些在类中使用的方法,尤其是 setLayout(new MigLayout()) 方法,这样您就不会忘记使用它类中的方法。

但这会给我错误:

Syntax error on token "setLayout", @ expected before this token

我还尝试在界面中使用匿名内部类:

ForcedLayout testLayout = new ForcedLayout(){
{
setLayout(new MigLayout());
}};

但我没有找到任何方法在实现类中使用 testLayout 并因此强制布局。

所以:

  • 是否可以通过接口(interface)“强制”实现类使用特定布局?
  • 使用这种方法有意义吗? (方法 = 我使用接口(interface)是为了不忘记使用某些方法)

最佳答案

由于所有类都扩展了 JPanel,因此您可以创建自己的 MigLayoutPanel 来扩展 JPanel 并具有 MigLayout > 已经设置。

public abstract class MigLayoutPanel extends JPanel {

public MigLayoutPanel() {
this(new MigLayout());
}

private MigLayoutPanel(LayoutManager layout) {
super(layout);
}

@Override
public void setLayout(LayoutManager layout) {
if(!(layout instanceof MigLayout)){
throw new UnsupportedOperationException("not allowed to change the layout");
}
}
}

现在您可以自定义类了。

public class MyPanel extends MigLayoutPanel {
....
}
<小时/>

接口(interface)只是声明或定义一个契约(方法集),具体的子类必须实现所有这些契约。 Java 7 支持Default Methods这使您能够在界面本身中添加默认功能。

注意:这不是完整的证明解决方案。任何子类都可以重写它。

关于java - 是否可以在接口(interface)中使用 setLayout() 以便 "force"实现类以使用特定布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36643718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com