ЧаВО по материалам форума
Java на Исходниках.Ру

Составители: Angie, d_k
Редактор: d_k



Создание эффекта отбрасывания тени (Angie)
Результатом данногой программы является круглая кнопка с изображенным на ней рисунком чашечки дымящегося кофе.
(за художеские способности, или вернее -- их отсутсвие, просьба гнилыми бананами не кидать :))

import java.awt.*;
import java.awt.event.*;
class UnButton extends Component implements MouseListener
{
  private boolean isDown=false;
  public UnButton()
  {
    super();
    addMouseListener(this);
    enableEvents(AWTEvent.MOUSE_EVENT_MASK);
  }
  public void drawUn(Graphics g, int x, int y, int w, int h)
  { //Здесь рисуется рисунок, который потом будет на кнопке
    g.drawLine(x+10, h-13, 3*w/4, h-13);
    g.drawLine(x+11, h-12, 3*w/4-1, h-12);
    g.drawLine(x+12, h-11, 3*w/4-2, h-11);
    g.fillOval(w/4, h/2-2, 3*w/6, h/8);
    g.drawLine(w/4, h/2, x+17, h-13);
    g.drawLine(w/4+3*w/6, h/2, 3*w/4-8, h-13);
    g.drawArc(w/2-5, h/3-5, w/6, h/6, -45, 180);
    g.drawArc(w/3, h/4-5, w/6, h/6, 135, 180);
  }
  public void paint (Graphics g)
  { //Создаем саму кнопку с рисунком
    int w=getSize().width, h=getSize().height;
    int d=Math.min(w, h);
    Color c=g.getColor();
    g.setColor(Color.lightGray);
    g.fillArc(0, 0, d, d, 0, 360);
    g.setColor(c);
    if (isDown)
    {
      g.drawArc(0, 0, d, d, 43, 180);
      g.drawArc(1, 1, d-2, d-2, 43, 180);
      drawUn(g, 8, 10, d, d);
    } else
    {
      g.drawArc(0, 0, d, d, 229, 162);
      g.drawArc(1, 1, d-2, d-2, 225, 170);
      drawUn(g, 6, 8, d, d);
    }
    super.paint(g);
  }
  public Dimension getPreferredSize()
  {
    return new Dimension(30, 30);
  }
  public Dimension getMinimumSize()
  {
    return getPreferredSize();
  }
  public Dimension getMaximumSize()
  {
    return getPreferredSize();
  }
  public void mousePressed(MouseEvent e)
  {
    isDown=true;
    repaint();
  }
  public void mouseReleased(MouseEvent e)
  {
    isDown=false;
    repaint();
  }
  public void mouseEntered(MouseEvent e){}
  public void mouseExited(MouseEvent e){}
  public void mouseClicked(MouseEvent e){}
}

public class DrawButton extends Frame
{ // Для сравнения приводится и стандартная кнопка
  DrawButton(String s)
  {
    super(s);
    setLayout(null);
    setBackground(Color.white);
    Button b=new Button("OK");
    b.setBounds(200, 50, 100, 60); add(b);
    UnButton d=new UnButton();
    d.setBounds(50,50,65,65); add(d);
    setSize(400,150);
    setVisible(true);
  }
  public static void main(String[]args)
  {
    Frame f=new DrawButton("The button with a picture");
    f.addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent ev)
      {
        System.exit(0);
      }
    });
  }
}


Содержание