Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.49 KB | None | 0 0
  1. package zadachki.neshto;
  2. import javax.swing.JButton;
  3. import java.awt.Graphics;
  4. import java.awt.Color;
  5. import java.awt.Dimension;
  6. import java.awt.geom.Point2D;
  7. import java.awt.FontMetrics;
  8. import java.awt.event.MouseAdapter;
  9. import java.awt.event.MouseEvent;
  10.  
  11. public class CircleButton extends JButton{
  12.    
  13.     private boolean mouseOver = false;
  14.     private boolean mousePressed = false;
  15.  
  16.     public CircleButton(String text){
  17.         super(text);
  18.         setOpaque(false);
  19.         setFocusPainted(false);
  20.         setBorderPainted(false);
  21.        
  22.         MouseAdapter mouseListener = new MouseAdapter(){
  23.            
  24.             @Override
  25.             public void mousePressed(MouseEvent me){
  26.                 if(contains(me.getX(), me.getY())){
  27.                     mousePressed = true;
  28.                     repaint();
  29.                 }
  30.             }
  31.            
  32.             @Override
  33.             public void mouseReleased(MouseEvent me){
  34.                 mousePressed = false;
  35.                 repaint();
  36.             }
  37.            
  38.             @Override
  39.             public void mouseExited(MouseEvent me){
  40.                 mouseOver = false;
  41.                 mousePressed = false;
  42.                 repaint();
  43.             }
  44.            
  45.             @Override
  46.             public void mouseMoved(MouseEvent me){
  47.                 mouseOver = contains(me.getX(), me.getY());
  48.                 repaint();
  49.             }  
  50.         };
  51.        
  52.         addMouseListener(mouseListener);
  53.         addMouseMotionListener(mouseListener);     
  54.     }
  55.    
  56.     private int getDiameter(){
  57.         int diameter = Math.min(getWidth(), getHeight());
  58.         return diameter;
  59.     }
  60.    
  61.     @Override
  62.     public Dimension getPreferredSize(){
  63.         FontMetrics metrics = getGraphics().getFontMetrics(getFont());
  64.         int minDiameter = 10 + Math.max(metrics.stringWidth(getText()), metrics.getHeight());
  65.         return new Dimension(minDiameter, minDiameter);
  66.     }
  67.    
  68.     @Override
  69.     public boolean contains(int x, int y){
  70.         int radius = getDiameter()/2;
  71.         return Point2D.distance(x, y, getWidth()/2, getHeight()/2) < radius;
  72.     }
  73.    
  74.     @Override
  75.     public void paintComponent(Graphics g){
  76.        
  77.         int diameter = getDiameter();
  78.         int radius = diameter/2;
  79.        
  80.         if(mousePressed){
  81.             g.setColor(Color.LIGHT_GRAY);
  82.         }
  83.         else{
  84.             g.setColor(Color.WHITE);
  85.         }
  86.         g.fillOval(getWidth()/2 - radius, getHeight()/2 - radius, diameter, diameter);
  87.        
  88.         if(mouseOver){
  89.             g.setColor(Color.BLUE);
  90.         }
  91.         else{
  92.             g.setColor(Color.BLACK);
  93.         }
  94.         g.drawOval(getWidth()/2 - radius, getHeight()/2 - radius, diameter, diameter);
  95.        
  96.         g.setColor(Color.BLACK);
  97.         g.setFont(getFont());
  98.         FontMetrics metrics = g.getFontMetrics(getFont());
  99.         int stringWidth = metrics.stringWidth(getText());
  100.         int stringHeight = metrics.getHeight();
  101.         g.drawString(getText(), getWidth()/2 - stringWidth/2, getHeight()/2 + stringHeight/4);
  102.     }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement