java setVisible(true)实现相同接口的类

时间:2016-06-07 10:20:50

标签: java interface implements

我有一些扩展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;  

}

3 个答案:

答案 0 :(得分:0)

您必须将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);
    }
}

答案 1 :(得分:0)

如果要检查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的{​​{1}}添加方法:

setVisible

由于interface Elenco { void prova(); void setVisible(boolean visible); } 扩展classeJFrame已包含JFrame方法,因此您无需添加任何其他方法。

如果您使用第二种方法,则可以直接在setVisble上致电setVisible,而无需投射:

e

如果您希望在e.setVisible(true); 中使用其他方法,也可以将它们添加到您的界面中。

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

Selezione

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

答案 2 :(得分:0)

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