[英]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.