Создание "легкого" компонента
Листинг 10.8. Создание круглой кнопки.
public void paint(Graphics g){ int w = getSize().width, h = getSize().height; int d = Math.min(w, h); // Диаметр круга Color с = g.getColor(); // Сохраняем текущий цвет g.setColor(Color.lightGray); // Устанавливаем серый цвет g.fillArc(0, 0, d, d, 0, 360); // Заливаем круг серым цветом g.setColor(с); // Восстанавливаем текущий цвет if (isDown)( g.drawArc(0, 0, d, d, 43, 180); g.drawArcd, 1, d -2, d -2, 43, 180); drawFlower(g, 8, 10, d, d); }else{ g.drawArc(0, 0, d, -d, 229, 162); g.drawArcd, 1, d -2, d -2, 225, 170); drawFlower(g, 6, 8, d, d); } } public Dimension getPreferredSize(){ return new Dimension(30.30); } public Dimension getMinimumSize() { return getPreferredSize(); } public Dimension getMaximumSize(){ return getPreferredSize(); }
Рис. 10.8. Круглая кнопка
Сразу же надо дать еще одну рекомендацию. "Легкие" контейнеры не занимаются обработкой событий без специального указания. Поэтому в конструктор "легкого" компонента следует включить обращение к методу enableEvents () для каждого типа событий. В нашем примере в конструктор класса FlowerButton полезно добавить строку:
enabieEvents(AWTEvent.MOUSE_EVENT_MASK);
…на случай, если кнопка окажется в "легком" контейнере. Подробнее об этом мы поговорим в главе 12.
В документации есть хорошие примеры создания "легких" компонентов, посмотрите страницу docs\guide\awt\demos\lightweight\index.html.