Технологии

Помогите пожалуйста доделать программу как сделать чтобы кнопка стала полностью круглой!! - вопрос №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));
}
}
}


}

февраль 25, 2018 г.

  • Всего ответов: 0

Похожие вопросы

Решено

Полное форматирование ssd

август 21, 2013 г.

Технологии

как установить win 7 в asus x541n

декабрь 23, 2017 г.

Технологии