Java SetVisible(true) класс, который реализует тот же интерфейс

У меня есть несколько классов, которые расширяют Jframe и реализуют тот же интерфейс.

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

}

В другом классе у меня есть:

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

В этом классе, как я могу показать класс, который реализует интерфейс elenco?
я не могу сделать e.setVisible(правда);

Я пробую это решение, но оно не работает

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

 }

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

}

3 ответа

Вы должны добавить 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);
    }
}

Ваша проблема в том, что поле e имеет ссылочный тип Elenco, и во время компиляции вы не можете вызывать другие методы, кроме методов, найденных в этом интерфейсе. Если вы хотите вызвать setVisible, вы должны привести e к классу classe (это ужасное имя класса). После приведения вы можете напрямую вызвать setVisible(). Другой метод - добавить код setVisible в реализацию классов метода prova.

Если вы хотите проверить, является ли 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 метод, вам не нужно добавлять дополнительные методы.

Если вы используете второй подход, вы можете позвонить setVisible прямо на eбез актерского состава:

e.setVisible(true);

Если вы хотите использовать другие методы в JFrameВы также можете добавить их в свой интерфейс.

Третий подход заключается в прямом хранении JFrame в Selezione:

public class Selezione {
    JFrame frame;
}

Но это не очень рекомендуется, потому что мы должны поддерживать абстракцию в классе.

Другие вопросы по тегам