[英]java setVisible(true) class that implements same interface
我有一些扩展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;
}
您必须将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);
}
}
如果要检查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
延伸JFrame
和JFrame
已经包含了setVisble
方法,你不需要添加任何额外的方法。
如果使用第二种方法,则可以直接在e
上调用setVisible
,而无需强制转换:
e.setVisible(true);
如果您希望在JFrame
使用其他方法,也可以将它们添加到您的界面中。
第三种方法是将JFrame
直接存储在Selezione
:
public class Selezione {
JFrame frame;
}
但这不是很推荐,因为我们应该在一个类中保持抽象的一致性。
您的问题是字段e的引用类型为Elenco,并且在编译时无法调用其他方法,但只能在该接口中找到那些方法。 如果要调用setVisible,则应将e强制转换为类classe(这是一个糟糕的类名)。 投射后,您可以直接调用setVisible()。 其他方法是在prova方法的类的实现中添加setVisible代码
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.