2016-06-07 71 views
0

我有一些擴展Jframe並實現相同接口的類。實現相同接口的java setVisible(true)類

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

您必須將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); 
    } 
} 
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稱爲setVisible

interface Elenco { 
    void prova(); 
    void setVisible(boolean visible); 
} 

由於您classe延伸JFrameJFrame已經包含了setVisble方法,你不需要添加任何額外的方法。

如果使用第二種方法,您可以直接在e調用setVisible,不投:

e.setVisible(true); 

如果你想在JFrame使用其他方法,你可以將它們添加到您的界面吧。

第三種方式是直接存儲在JFrameSelezione

public class Selezione { 
    JFrame frame; 
} 

但是,這不是很推薦,因爲我們應該保持在抽象一致的類。

0

你的問題是字段e有引用類型Elenco,並且在編譯時你不能調用除那些接口中找到的其他方法。如果你想調用setVisible,你應該將e賦給class類(這是一個糟糕的類名)。轉換後,您可以直接調用setVisible()。其他方法是將setVisible代碼添加到prova方法的類的實現中