Проблемы при работе с продлением № 2 - PullRequest
0 голосов
/ 21 июня 2020

Название очень запутанное, я знаю. Я хотел создать свою собственную библиотеку пользовательского интерфейса в java, используя swing. Сначала я решил создать код UIButton.

(очень упрощенный):

class UIButton extends JButton {
int x = DEFAULT_X, y = DEFAULT_Y;
int w = DEFAULT_w, h = DEFAULT_H;
UIButton(){
  super("Text Here");
  super.setBounds(x,y,w,h);
}

void setPosition(int x, int y){
  this.x = x;
  this.y = y;
  super.setBounds(x,y,w,h);
}

void setDimensions(int w, int h){
  this.w = w;
  this.h = h;
  super.setBounds(x,y,w,h);
}

void enableMe(){
  super.setVisible(false);
  super.setEnabled(false);
  super.setFocusable(false);
}
...
}

Затем я понял, что этот код будет повторяться, потому что каждому компоненту пользовательского интерфейса нужны setPosition, setDimensions и enableMe (), поэтому я создал класс UIComponent, но вы не можете написать class UIButton extends JButton, UIComponent {...} :( Затем я создал интерфейс UIComponentInter, в котором я поместил все методы по умолчанию, которые отлично работали с методом enableMe (), но не для остальных. UIComponentInter (пришлось обходное решение если подкласс не является частью JComponent):

default void enableMe(){
  if(!(this instanceof JComponent)) return;
  JComponent component = (JComponent) this;
  component.setVisible(true);
  component.setEnabled(true);
  component.setFocusable(true);
}

метод setPosition () требует переменных x и y, но каждая переменная в интерфейсе является final и c.

В настоящее время Я использую класс UIComponent для управления поведением, а класс UIButton действует как прокси для UIComponent, но мне все равно приходится копировать и вставлять много кода, чтобы добавить новые элементы пользовательского интерфейса.

1 Ответ

0 голосов
/ 21 июня 2020

Используйте композицию, а не наследование - вместо этого сделайте ваш класс полем экземпляра типа JButton - user

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