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;
}
Но это не очень рекомендуется, потому что мы должны поддерживать абстракцию в классе.