Помогите пожалуйста доделать программу как сделать чтобы кнопка стала полностью круглой!! - вопрос №2783803

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
import static javafx.scene.paint.Color.color;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import static javax.swing.Spring.scale;
import javax.swing.SwingUtilities;
//////////////////////////////////////////////////////////////////
public class MAIN extends JPanel implements MouseMotionListener//Наследуем главный класс от JPanel и переопределяем слушания мышки
{
protected JButton cmd;//Искомая кнописька
////////////////////////////////////////////
//Фактически создание пользовательского интерфейса GUI запихал в конструктор, так делается в примерах на оф сайте!!!
//////////////////////////////////////////////////////////////////////
MAIN()//Конструктор
{
JFrame frm =new JFrame();//Создание формы
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Выход по Alt+F4
frm.setSize(1000, 1000);//начальный размер формы
frm.add(this);
// this.setLayout(new FlowLayout());

this.add(cmd=new JButton(«СВ»));
cmd.setFocusPainted(false);
// cmd.setIcon(getImageIcon(«a.png»));
cmd.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent arg0) {
cmd.setText(«Ты победил!»);

cmd.setBackground(new Color(1000,255,200));
//cmd.setIcon(getImageIcon(«b.png»));
}




})

;

frm.getContentPane().addMouseMotionListener(this);
frm.setVisible(true);//Показываем окно
}




ImageIcon getImageIcon(String file)
{
return new ImageIcon(file);
}
//////////////////////////////////////////////////////////////////////
//Основная функция
//////////////////////////////////////////////////////////////////////
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new MAIN();//инициализируем элемент нашего класса в отдельном потоке
}
});
}
//////////////////////////////////////////////////////////////////////
//Контроллеры
//////////////////////////////////////////////////////////////////////
public void mouseDragged(MouseEvent e) {
if(e.getModifiers()==16)this.MoveGetdirection(e.getX(), e.getY());

}
public void mouseMoved(MouseEvent e)
{
this.MoveGetdirection(e.getX(), e.getY());
}
//////////////////////////////////////////////////////////////////////
//Функция анализирующая положение кнопки и мыши и действие
//////////////////////////////////////////////////////////////////////
int Rad; //радиус окружности в которой находится кнопка
protected void MoveGetdirection(int x_position,int y_position)//функция анализирует близость мышки к нопке
{
Rad=(int)(this.cmd.getWidth()*1.2);
int x_centerbutton=this.cmd.getLocation().x+(this.cmd.getWidth()/2);//Абсцисса середины кнопки
int y_centerbutton=this.cmd.getLocation().y+(this.cmd.getHeight()/2);//Ордината середины кнопки
int rast=(int) (2*Math.sqrt(Math.pow(x_position-x_centerbutton, 2)+Math.pow(y_position-y_centerbutton, 2)));
if (rast < Rad)
{
int dx = Rad — rast;//приращение по икс
int dy = Rad — rast;//приращение по игрек
//меняем на обратное если вверх и влево
if(x_position>x_centerbutton){dx=-dx;}
if(y_position>y_centerbutton){dy=-dy;}
this.MoveDCmd(dx, dy, x_centerbutton, y_centerbutton);//Далее двигаем кнопку, проверяя есть место для перемещения
}
}
//////////////////////////////////////////////////////////////////////
//Функция анализирующая свободное расстояние для перемещения
//////////////////////////////////////////////////////////////////////
int bonus = 10;
protected void MoveDCmd(int dx, int dy, int x_centerbutton, int y_centerbutton)
{
//если двигать вправо
if (dx > 0) {//если справа есть место
if (x_centerbutton + this.cmd.getWidth() / 2 + dx < this.getWidth()) {
this.cmd.setLocation(this.cmd.getLocation().x += dx, this.cmd.getLocation().y);//Двигаем
}else{
this.cmd.setLocation(bonus, this.cmd.getLocation().y);
}
}
//если двигать вниз
if (dy > 0) {//если внизу есть место
if (y_centerbutton + this.cmd.getHeight() / 2 + dy < this.getHeight()) {
this.cmd.setLocation(this.cmd.getLocation().x, this.cmd.getLocation().y += dy);//Двигаем
}else{
this.cmd.setLocation(this.cmd.getLocation().x,bonus);
}
}
//если двигать влево
if (dx < 0) {//если слева есть место
if (x_centerbutton — this.cmd.getWidth() / 2 > -dx) {
this.cmd.setLocation(this.cmd.getLocation().x += dx, this.cmd.getLocation().y);//Двигаем
}else{
this.cmd.setLocation(this.getWidth()-(this.cmd.getWidth()+bonus),this.cmd.getLocation().y );
}
}
//если двигать вверх
if (dy < 0) {//если вверху есть место
if (y_centerbutton — (this.cmd.getHeight() / 2) > -dy) {
this.cmd.setLocation(this.cmd.getLocation().x, this.cmd.getLocation().y += dy);//Двигаем
}else{
this.cmd.setLocation(this.cmd.getLocation().x,this.getHeight()-(this.cmd.getHeight()+bonus));
}
}
}


}
Ответов пока нет

Глеб Черняк

от 55 p.
Сейчас на сайте
Читать ответы

Олег Николаевич

от 50 p.
Читать ответы

Arturk16

от 50 p.
Эксперт месяца
Читать ответы
Посмотреть всех экспертов из раздела Технологии
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store