приведение объекта после метода getclass () - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть событие мыши для компонента Swing, который может иметь 2 различных пользовательских класса: ModelTable и Modelcompte, которые являются компонентами Swing, созданными с помощью графического интерфейса NetBeans Swing, и оба они расширяют JPanel. Они совместно используют некоторые методы и атрибуты.

Component source = (Component) evt.getSource();
Component panel = (Component) (source.getParent()
                                     .getParent()
                                     .getParent()
                                     .getParent()
                                     .getParent());
Class clazz = panel.getClass();
clazz.cast(panel);

Когда я печатаю класс панели, он дает мне правильный класс, но когда я пытаюсь использовать метод этого класса на панели, он не может найти метод ("метод ... в классе Компонент не существует").«).Кажется, что панель все еще состоит из Class Component ...

что я хочу сделать:

if (panel instance of ModelTable){
    panel.setQuantity(1);
}
else if (panel instance of ModelCompte){
    panel.setQuantity(2)
}

Спасибо за вашу помощь!

// and by the way I don't know why I can't directly do this : 
(Component) panel = (Component) (evt.getsource()
                                    .getParent()
                                    .getParent()
                                    .getParent()
                                    .getParent()
                                    .getParent());      

1 Ответ

0 голосов
/ 29 ноября 2018

Кажется, что панель все еще имеет компонент класса ...

Да.Вы исполняете актерский состав, но ничего не делаете с результатом.Это не меняет тип времени компиляции переменной panel.

Если вы знаете, какой метод вы хотите вызвать, вероятно, вы знаете по крайней мере какой-то тип, который объявлен в- приведите к этому типу, используя обычный код без отражения:

Component source = (Component) evt.getSource();
MyPanel panel = (MyPanel) source.getParent()
                                .getParent()
                                .getParent()
                                .getParent()
                                .getParent();

Если у вас есть один и тот же метод, объявленный в нескольких классах, вы можете либо дать им общий суперкласс с этим методом, либо сделатьони реализуют интерфейс, объявляющий этот метод.Затем вы приведете к суперклассу или интерфейсу, после чего вы сможете вызвать метод.(Трудно быть более конкретным в ответе без конкретного примера в вопросе.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...