Boa tarde galera, já pesquisei um tanto sobre isso e estou com alguns problemas para fazer o que quero.
Meu problema é o seguinte, eu preciso criar um botão estilo o do iPod quando esta “bloqueado”, que você clica em cima dele e arrasta para desbloquear.
Tenho um código onde consigo fazer algumas coisas, tipo arrastá-lo, porém não consigo fazer com que o botão volte gradativamente para o local de início e também
não consigo travá-lo para que ele vá até um ponto da tela, por exemplo, eu quero que o botão vá até a metade da tela e depois não vá mais pra frente, porém pra trás ele pode ir.
Segue abaixo o código que estou usando, peguei em um tópico aqui do fórum e fiz algumas modificações.
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class NewMain extends JFrame {
private static final long serialVersionUID = 1L;
private JButton botao;
private int x;
private int y;
private JPanel pTeste;
private int xos;
public NewMain() {
super();
setTitle("Drag & Drop Demo");
setDefaultCloseOperation(EXIT_ON_CLOSE);
botao = new JButton("Arraste-me!");
botao.setBounds(50, 50, 150, 30);
botao.addMouseMotionListener(new Controler());
botao.addMouseListener(new MListener());
pTeste = new JPanel();
pTeste.setBounds(0, 0, 500, 500);
pTeste.add(botao);
this.getContentPane().add(pTeste);
this.setSize(500, 500);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
private class Controler extends MouseMotionAdapter {
@Override
public void mouseDragged(MouseEvent e) {
if (verificaTela(e)) {
botao.setLocation(botao.getX() + (e.getX() - x), botao.getY());
}
}
public boolean verificaTela(MouseEvent e) {
if (botao.getBounds().getMaxX() >= getWidth()) {
xos = e.getXOnScreen();
if (e.getXOnScreen() - xos < 0) {
System.out.println("botao.getX() " + botao.getX());
// System.out.println("e.getX() " + e.getX());
System.out.println("e.getX(2) " + e.getXOnScreen());
} else {
System.out.println(e.getXOnScreen());
System.out.println(xos);
}
}
if (botao.getX() + botao.getWidth() < getWidth() && botao.getBounds().getMinX() > 0) {
return true;
}
return false;
}
}
private class MListener extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
}
@Override
public void mouseReleased(MouseEvent e) {
if (botao.getX() > 50) {
for (int i = botao.getX(); i > 50; i--) {
botao.setLocation(i, 50);
}
} else {
for (int i = botao.getX(); i < 50; i++) {
botao.setLocation(i, 50);
}
}
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new NewMain();
}
});
}
}
Então é isso galera.
Atenciosamente,
Rafael.