Movimentando um componente

9 respostas
V

Gente preciso saber como que eu faço o seguinte:

  1. Existe um botão no meu painel.
  2. O usuario pode arrasta-lo e soltar em qualquer lugar.
  3. Como que eu faço para saber qual a coordenada do painel onde se encontra o botão para poder mover este botão, quando eu coloco o evento mousePressed no botao ele pega a coordenada do botao, e nao a coordenada do painel onde se encontra o botao.

Se puder ajudar, agadeço.

9 Respostas

C

Voce tera que pegar o nome do painel e ai pegar as coordenadas

JFrame a = new JFrame();
a.setVisible(true);

a.getX();
a.getY();

imagino ser algo mais ou menos assim

V

Tipo eu teria que fazer algo mais ou menos assim, ele clica no componente, apartir disso a coordenada pra atualizar os novos bounds desse componente vem do painel que ele esta dentro.

tipo algo assim

button.getPainel().getX()…

C

companheiro dentro de um button não ha um panel

dentro de um panel pode haver um button

voce esta confundido um pouco as coisas, da uma olhada na net se nao ha nenhum exemplo disso

C

Com apenas uma pesquisada no google surgiu tanta coisa


http://www.java2s.com/Code/Java/2D-Graphics-GUI/Buffereddrawwithoutflicker.htm


http://javafree.uol.com.br/artigo/8522/Arrastando-componentes.html
http://www.devmedia.com.br/drag-and-drop-aplicacoes-swing-em-java-parte-01/14817
http://javafree.uol.com.br/topic-2025-clique-e-arraste-implementando-mousePressed-mouseMoved.html

da uma olhada nisso ai e pesquisa no google porque da onde sairam esses links tem muitos mais

V

Acho que consegui,

mauseDragged(){ setBounds(setBounds(getParent().getMousePosition().x - getBounds().width / 2, getParent().getMousePosition().y - getBounds().height / 2, getBounds().width, getBounds().height); }

PS: Logicamente não tem um jpanel dentro de um jbutton, mas eu posso pegar o componente que esta abrigando o jbutton e deu certo.
:slight_smile: vlw pela ajuda.

C

E ai funcionou mesmo ?

pode postar a sua aplicação para mim fazer download e ver como ficou a movimentação,

por curiosisdade, posta aew

V

São só estas 3 classes.

Classe Main:

package com.view;

import java.awt.EventQueue;
import javax.swing.JFrame;

public class Main {

	private JFrame jframe_frame;
	private MovelPanel movelPanel;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Main window = new Main();
					window.jframe_frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public Main() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		jframe_frame = new JFrame();
		jframe_frame.setBounds(100, 100, 668, 852);
		jframe_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jframe_frame.getContentPane().setLayout(null);
		movelPanel = new MovelPanel();
		movelPanel.setBounds(10, 11, 632, 792);
		jframe_frame.getContentPane().add(movelPanel);
	}
}
Classe MovelPanel:
package com.view;

import java.awt.Color;

import javax.swing.JPanel;
import javax.swing.border.LineBorder;

public class MovelPanel extends JPanel {
	private static final long serialVersionUID = 1L;
	public SpecialButton button_teste;

	public MovelPanel() {
		setSize(414, 240);
		setLocation(10, 11);
		setLayout(null);
		setBorder(new LineBorder(new Color(0, 0, 0)));
		button_teste = new SpecialButton(10, 10, 80, 23, "TESTE");
		add(button_teste);
		
		SpecialButton button_teste2 = new SpecialButton(10, 10, 80, 23, "TESTE");
		button_teste2.setBounds(144, 72, 80, 23);
		add(button_teste2);
		setVisible(true);

	}
}
Classe SpecialButton:
package com.view;

import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.JButton;

public class SpecialButton extends JButton {
	private static final long serialVersionUID = 1L;
	private boolean isPressed;

	public boolean isPressed() {
		return isPressed;
	}

	public void setPressed(boolean isPressed) {
		this.isPressed = isPressed;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public SpecialButton(int x, int y, int width, int height, String text) {
		setBounds(x, y, width, height);
		setText(text);
		setVisible(true);
		addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(java.awt.event.MouseEvent e) {
				isPressed = true;
			}

			@Override
			public void mouseReleased(java.awt.event.MouseEvent e) {
				isPressed = false;
			}
		});
		addMouseMotionListener(new MouseMotionAdapter() {
			@Override
			public void mouseDragged(MouseEvent evt) {
				if (isPressed) {
					setBounds(getParent().getMousePosition().x - getBounds().width / 2, getParent().getMousePosition().y - getBounds().height / 2, getBounds().width, getBounds().height);
				}
			}
		});
	}
}
M

Totalmente fora do assunto …mas me surgiu essa duvida oportunua:

Vejam só esses dois exemplos:

....getMousePosition().x....
....getBounds().width...

Membros de instancia de Point e Rectangle PUBLICOS :shock:

Pode isso Arnaldo?

E aquele papo de encapsulamento?

Quando esse tipo de pratica é bem vista?

V
  1. Defina-me encapsulamento na POO.
  2. Reflita sobre essa definição.
Criado 19 de julho de 2012
Ultima resposta 23 de jul. de 2012
Respostas 9
Participantes 3