2016-06-07 13 views
0

Ich habe einige Klassen, die Jframe erweitert und die gleiche Schnittstelle implementiert.java setVisible (true) Klasse, die die gleiche Schnittstelle implementiert

public class classe extends JFrame implements Elenco{ 
@Override 
    public void prova(){ 
    ....... 
    }  

} 

In einer anderen Klasse, ich habe:

public class Selezione{ 
Elenco e; 
e.Prova(); 
} 

In dieser Klasse, wie ich Klasse zeigen kann, die Schnittstelle elenco implementiert?
Ich kann nicht e.setVisible (true);

Ich versuche, diese Lösung, aber es funktioniert nicht

public class Selezione{ 
Elenco e; 
public Modifica(){ 
e.Prova(); 

} 

public void Transfert(JFrame frame) { 
    frame = (JFrame) e; 

}

Antwort

0

Sie haben Elenco die setVisible Methode zur Schnittstelle hinzuzufügen. Oder Sie ändern den Typ von Elenco zu JFrame Dies wäre auch mit Gießen möglich.

auch Ihren Code auf diese Weise nicht funktioniert, können Sie es ändern müssen:

public interface Elenco { 
    ... 
    public void setVisible(boolean visible); 
} 

public class Selezione { 
    Elenco e; 

    public void do() { 
     e.prova(); 
     e.setVisible(true); 
    } 
} 
0

Wenn Sie möchten, ob ein Elenco Objekt zu prüfen, ist eigentlich ein JFrame, können Sie den instanceof Operator mit einem verwenden können, wenn Aussage:

if (e instanceof JFrame) { 
    // Here I cast e to type JFrame 
    JFrame frame = (JFrame)e; 
    // Now you can call setVisible! 
    frame.setVisible(true); 
} 

Es ist im Grunde nur eine Besetzung.

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

Da Ihr classe erstreckt JFrame und JFrame enthält bereits die setVisble Methode, Sie keine zusätzlichen Methoden hinzufügen müssen:

Alternativ können Sie eine Methode ElencosetVisible genannt hinzuzufügen.

Wenn Sie die zweite Methode verwenden, können Sie setVisible direkt anrufen auf e, ohne den Darstellern:

e.setVisible(true); 

Wenn Sie in JFrame andere Methoden verwenden möchten, können Sie sie zu Ihrer Schnittstelle hinzufügen können, auch.

Der dritte Ansatz ist direkt ein JFrame in Selezione zu speichern:

public class Selezione { 
    JFrame frame; 
} 

Aber dies nicht zu empfehlen, sehr, weil wir die Abstraktion in einer Klasse konsistent halten sollen.

0

Ihr Problem ist das Feld e hat den Referenztyp Elenco und zur Kompilierzeit können Sie keine anderen Methoden aufrufen als diese, die in dieser Schnittstelle gefunden werden. Wenn Sie setVisible aufrufen möchten, sollten Sie e in die Klassenklasse (was ein schrecklicher Klassenname ist) umwandeln. Nach dem Casting können Sie direkt rectly setVisible() aufrufen. Eine andere Methode wäre, den setVisible-Code in die Klassenimplementierung der prova-Methode

einzufügen