我有一些扩展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;
}
答案 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);
}
扩展classe
和JFrame
已包含JFrame
方法,因此您无需添加任何其他方法。
如果您使用第二种方法,则可以直接在setVisble
上致电setVisible
,而无需投射:
e
如果您希望在e.setVisible(true);
中使用其他方法,也可以将它们添加到您的界面中。
第三种方法是直接在JFrame
中存储JFrame
:
Selezione
但这不是非常推荐的,因为我们应该将抽象保持在一致的类中。
答案 2 :(得分:0)
您的问题是字段e具有引用类型Elenco,并且在编译时您不能调用其他方法,而是在该接口中找到的方法。如果你想调用setVisible,你应该将e转换为class classe(这是一个糟糕的类名)。在转换之后你可以调用dirrectly setVisible()。其他方法是在类的prova方法实现中添加setVisible代码