Как извлечь родительский класс из подклассов, которые имеют очень похожую логику? - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь создать пару пользовательских кнопок, которые я в конечном итоге могу добавить в JToolBar.У меня есть один класс, который расширяется от JButton и выглядит так:

public class CustomToolbarJButton extends JButton {
    public void setCustomProperties() {
        this.putClientProperty("Property1", "Value1");
    }

    // Some other CustomToolbarJButton specific code here.
}

У меня есть другой класс, CustomToolbarJToggleButton, который расширяется от JToggleButton и имеет точно такой же код для метода setCustomProperties ().

Мой вопрос заключается в том, можно ли каким-либо образом создать абстрактный родительский класс, от которого в конечном итоге могут наследоваться эти два класса, чтобы я мог перетащить метод setCustomProperties () в этот родительский класс.

Редактировать

Я хотел добавить некоторый контекст к тому, что я в конечном итоге хочу сделать.

Я хотел иметь родительский класс, подобный этому:

public abstract class CustomToolbarButton extends <some-class> {
    public void setCustomProperties() {
        this.putClientProperty("Property1", "Value1");
    }
}

public class CustomToolbarJButton extends CustomToolbarButton {
    // Some other CustomToolbarJButton specific code here.
}

public class CustomToolbarJToggleButton extends CustomToolbarButton {
    // Some other CustomToolbarJToggleButton specific code here.
}

и в конечном итоге добавить кнопки кна панели инструментов я хотел создать такой метод:

public void addCustomButtonToToolbar(boolean standardButtonOrToggleButton, String text) {
    CustomToolbarButton customToolbarButton = standardButtonOrToggleButton ? new CustomToolbarJButton(text) : new CustomToolbarJToggleButton(text);
    customToolbarButton.setCustomProperties();
    this.toolbar.add(customToolbarButton);  // toolbar is a JToolBar. I wanted to add the customToolbarButton directly to it, just like a standard JComponent.
}

Возможно ли что-то подобное?

1 Ответ

0 голосов
/ 08 февраля 2019

Да, вы можете сделать это, используя interface, что очень похоже на abstract class, как это, но только с методами и без полей:

public interface CustomProperties {
    public void setCustomProperties();
}

и:

public class CustomToolbarJButton extends JButton implements CustomProperties {
    public void setCustomProperties() {
        this.putClientProperty("Property1", "Value1");
    }

    // Some other CustomToolbarJButton specific code here.
}

обратите внимание на ключевое слово implements, которое вы можете наследовать от нескольких интерфейсов одновременно ..

, так как я думаю, что вам это может понадобиться, вы можете создать объект типа CustomProperties с его подклассами.

CustomProperties obj = (CustomProperties) new CustomToolbarJButton();

Я надеюсь, что это помогло:)

РЕДАКТИРОВАТЬ: это может помочь, возможно, у вас есть другие требования ..

public interface CustomProperties {
    public void setCustomProperties() {
        this.putClientProperty("Property1", "Value1");
    }
}

.

public class CustomToolbarJButton extends JButton implements CustomProperties {
    // Some other CustomToolbarJButton specific code here.
}

.

public class CustomToolbarJToggleButton extends JToggleButton implements CustomProperties {
    // Some other CustomToolbarJToggleButton specific code here.
}

и это: РЕДАКТИРОВАТЬ:

public void addCustomButtonToToolbar(boolean standardButtonOrToggleButton, String text) {
    CustomProperties customToolbarButton = standardButtonOrToggleButton ? new CustomToolbarJButton(text) : new CustomToolbarJToggleButton(text);
    customToolbarButton.setCustomProperties();
    this.toolbar.add((Component) customToolbarButton);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...