繁体   English   中英

如何为扩展JDialog的类(或通常的其他类)创建接口

[英]How to create an Interface for a class that extends JDialog (or in general another class)

我正在开发一个利用Swing的Java应用程序。 我有一个扩展JDialog的类,如下所示:

public class customDialog extends JDialog {
    //Custom buttons listeners etc.
}

现在为它创建接口的方式(最佳实践)是什么? 我会写:

public interface customDialogInterface {
    //Custom methods signatures
}

然后在customDialog中使用“实现customDialogInterface”,但是以这种方式,当我在代码中使用customDialogInterface时,就无法访​​问JDialog方法。 JDialog是一个类,因此我无法在我的接口中对其进行扩展。 此外,我无法使用JDialog实现的接口扩展customDialogInterface,因为其中之一是受程序包保护的。

在那些(我想是公地)案件中,正确的处理方式是什么?


更新1:我将尝试解释更好地重新表达我的问题。 有一种编程原理告诉“使用接口而不是具体类的程序”。 在此基础上,如何为CustomDialog创建界面? 如果我做:

public interface CustomDialogInterface {
    public void doA();
    public void doB();
}

比使用CustomDialog的代码中的我有:

CustomDialogInterface myDialog = new CustomDialog();
myDialog.doA();    //OK
myDialog.doB();    //OK
myDialog.setVisible(true);    //ERROR

更新2:我决定再次更新我的问题,因为基于答案似乎还不太清楚。 它没有很多信息,因为它不是真正的代码,这只是一个理论问题。 另外,如果我还找到了可能的解决方案,请以另一种形式在这里再次写:

  1. 在我的应用程序中,我需要一个包含我的信息,字段等的JDialog。如何获取它? 定义一个类:

    class MyImplementation扩展JDialog {public doA(String txt){//这是我实现的特定方法}}

  2. 现在,我要遵循良好的编程规则:“按界面编程,而不按实现编程”,因此我需要一个用于自定义对话框的界面

    interface InterfaceForMyDialog {public doA(String txt); }

  3. 令人遗憾的是,类MyImplementation必须实现接口,因此我更改了上面的伪代码,只需添加并实现

    类MyImplementation扩展JDialog实现InterfaceForMyDialog {public doA(String txt){//这是我实现的特定方法}}

  4. 现在,最后我需要在外部代码的某处(在main方法的某处)使用新对话框,如下所示:

    ... InterfaceForMyDialog myDialogInterface = new MyImplementation(...);

问题:如何使用“ doA(String txt)”方法完成上面的代码以将一些文本设置到我的自定义对话框中,然后显示对话框本身? 我认为使用这种结构是不可能的,我找到了一个使用抽象类的解决方案(见下文)。 如果我错了或者有更好的解决方案,请在这里写下。

正确的是,您只能扩展一个班级; 由于要扩展JDialog,因此可以实现0个或更多接口,但不能扩展另一个类。

如果您的界面有两种方法:

public interface customDialogInterface
{
  public void doA();
  public int  doB();
}

那你的课就可以

public class customDialog extends JDialog implements customDialogInterface

只要customDialog具有方法doA()doB()

注意:按照惯例,类名和接口名都以大写字母开头。 如果您使用CustomDialogCustomDialogInterface那么全世界的Java程序员都会更容易理解代码。

好的,我找到了解决方案。 我没有将CustomDialogInterface声明为接口,而是将其声明为扩展JDialog的抽象类。 然后,我用提供实现的类扩展此抽象类。 如果有更好的解决方案,请告诉我!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM