簡體   English   中英

實現相同接口的java setVisible(true)類

[英]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延伸JFrameJFrame已經包含了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM