【问题标题】:java setVisible(true) class that implements same interface实现相同接口的java setVisible(true) 类
【发布时间】:2016-10-07 04:42:54
【问题描述】:

我有一些扩展 Jframe 并实现相同接口的类。

public class classe extends JFrame implements Elenco{
@Override
   public void prova(){
   .......
   }       

}

在另一个班级我有:

 public class Selezione{
 Elenco e;
 e.Prova();
 }

在这个类中,我如何展示实现接口 elenco 的类?
我不能做 e.setVisible(true);

我尝试了这个解决方案,但它不起作用

 public class Selezione{
Elenco e;
 public Modifica(){
 e.Prova();

 }

public void Transfert(JFrame frame) {
   frame = (JFrame) e;  

}

【问题讨论】:

    标签: java interface implements


    【解决方案1】:

    如果要检查Elenco 对象是否实际上是JFrame,可以将instanceof 运算符与if 语句一起使用:

    if (e instanceof JFrame) {
        // Here I cast e to type JFrame
        JFrame frame = (JFrame)e;
        // Now you can call setVisible!
        frame.setVisible(true);
    }
    

    基本上只是一个演员表。

    或者,您可以向Elenco 添加一个名为setVisible 的方法:

    interface Elenco {
        void prova();
        void setVisible(boolean visible);
    }
    

    由于您的classe 扩展了JFrameJFrame 已经包含setVisble 方法,您不需要添加任何额外的方法。

    如果您使用第二种方法,您可以直接在e 上调用setVisible,无需演员:

    e.setVisible(true);
    

    如果您想使用JFrame 中的其他方法,也可以将它们添加到您的界面中。

    第三种方法是直接在Selezione中存储一个JFrame

    public class Selezione {
        JFrame frame;
    }
    

    但这不是很推荐,因为我们应该保持类中的抽象一致。

    【讨论】:

      【解决方案2】:

      您的问题是字段 e 具有引用类型 Elenco 并且在编译时您不能调用其他方法,但在该接口中找到的方法除外。如果你想调用 setVisible,你应该将 e 转换为 class classe(这是一个糟糕的类名)。投射后,您可以直接调用 setVisible()。其他方法是在类的 prova 方法实现中添加 setVisible 代码

      【讨论】:

        【解决方案3】:

        您必须将setVisible 方法添加到接口Elenco。 或者您将类型从 Elenco 更改为 JFrame 这也可以通过强制转换实现。

        您的代码也不能这样工作,您必须将其更改为:

        public interface Elenco {
            ...
            public void setVisible(boolean visible);
        }
        
        public class Selezione {
            Elenco e;
        
            public void do() {
                e.prova();
                e.setVisible(true);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-04-08
          • 2014-10-25
          • 2021-10-18
          • 1970-01-01
          • 1970-01-01
          • 2021-09-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多