Переопределить java.awt. Кнопка - PullRequest
0 голосов
/ 31 августа 2009

Я пытаюсь переопределить поведение кнопки Java по умолчанию и пытаюсь добавить дополнительную метку для кнопки. Я новичок в java GUI и думал, что переопределение метода рисования решит мою проблему, но когда я делаю это и рисую дополнительную метку в методе рисования Button, это выглядит нормально, но моя метка исчезает, если я нажимаю на эту кнопку в моем приложении.

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

Ответы [ 2 ]

0 голосов
/ 03 сентября 2009

Вы не можете переопределить «рисование» в базовых элементах управления AWT, и при этом они все еще работают правильно, потому что, например, в Button большая часть поведения рисования выполняется одноранговыми классами (например, WButton в Windows). ). Я написал много элементов управления AWT для OS / 2 JVM еще в 1.1.x, и я не могу представить, что это работает так, как вы этого хотите, если с AWT все не сильно изменилось (маловероятно).

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

По сути, элементы управления AWT являются «родными», то есть там есть настоящая кнопка Windows и вокруг нее обернут некоторый код Java. Элементы управления Swing - это «чистая Java»; но делегировать большую часть их поведения и почти весь их внешний вид контроллерам пользовательского интерфейса в пакетах внешнего вида.

0 голосов
/ 31 августа 2009

Вот страница, описывающая, как рисование работает в awt , которая может помочь. Однако, если все, что вам нужно, это добавить дополнительную метку к кнопке, вам следует рассмотреть возможность изменения подкласса на состав . Это намного безопаснее. Ваш составной класс может расширять Component и определять свой собственный метод рисования.

class MyButton extends Component {
    private Button button;
    private Label label;

    public MyButton(String label, String buttonLabel) {
        label = new Label(label);
        button = new Button(buttonLabel);
    }

    public paint(Graphics g) {
        label.paint(g);
        button.paint(g);
    }

    ...
}
...