Нужна кнопка, которая изменяет форму с прямоугольной на круглую при наведении курсора.
Круглую кнопку не проблема создать, но вот кнопку, которая изменяет форму, никак не могу сделать.
Круглая кнопка:
public class RoundButton extends JButton
{
public RoundButton(String label)
{
super(label);
Dimension size = getPreferredSize();
// Делаем нашу кнопочку вписанной в квадрат.
// Дабы не получился у нас овал:)
size.width = size.height = Math.max(size.width, size.height);
setPreferredSize(size);
// Не закрашиваем кнопочку.
setContentAreaFilled(false);
}
// Рисуем нашу кнопочку.
protected void paintComponent(Graphics g)
{
if (getModel().isArmed())
{
// Устанавливаем цвет по умолчанию.
g.setColor(Color.lightGray);
}
else
{
g.setColor(getBackground());
}
// Рисуем окружность.
g.fillOval(0, 0, getSize().width-1, getSize().height-1);
// Прорисовываем сам JButton.
super.paintComponent(g);
}
// Рисуем бордюр кнопочки.
protected void paintBorder(Graphics g)
{
g.setColor(getForeground());
g.drawOval(0, 0, getSize().width-1, getSize().height-1);
}
// Определяем принадлежность точки к нашей кнопочки.
Shape shape;
public boolean contains(int x, int y)
{
// Если кнопка изменилась в размере
// создаем новый объект shape.
if (shape == null ||!shape.getBounds().equals(getBounds()))
{
shape = new Ellipse2D.Float(0, 0, getWidth(), getHeight());
}
// Возвращаем true если точка принадлежит
// и false если не принадлежит кнопке.
return shape.contains(x, y);
}
Как я понимаю, в класс нужно встроить MouseListener и должно быть что-то вроде этого:
class RoundButton extends JComponent implements MouseListener {
public RoundButton() {
....
addMouseListener(this);
}
public void paintComponent(Graphics g) {
....
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}
Как это сделать? Буду рад любой помощи.