[RESOLVIDO] JPanel Coordenadas

Boa tarde pessoal.

Estou fazendo um programinha básico e necessito saber como setar as coordenadas do meu jPanel.
Por exemplo:

Tenho um jFrame e nesse adicionei um jPanel.
Quando faço um evento de mouseListener, pego a posição do eixo x e do eixo y de acordo com a posição do mouse.
Mas percebo que a posição do mouse é em relação à resolução da minha tela, ex:
800 X 600

Gostaria de pegar o posicionamento do mouse com relação do meu jPanel, por exemplo, se o jpanel tem um tamanho de 100 X 100, quero definir pontos como se fosse um plano cartesiano mesmo, onde o ‘0’ fosse no centro, a altura do eixo y de 100 e do eixo x de 100.
Entenderam?

Será que tem como fazer isso?

Caso não saibam, já agradeço a atenção.

Att.

Então adiciona um MouseListener usando o método do JPanel.

Boa noite. Bem Henrique, talvez eu tenha me expressado mal.

Tenho um Mouse Listener. Ele pega as coordenadas e tudo. Contudo são coordenadas do JPANEL com relação a RESOLUCAO da minha tela.

Por exemplo, se a resolução é de 800 X 600, quando clico por exemplo no centro do JPANEL, o evento terá as coordenadas de 400 X 300 (EXEMPLO).

entende?
Eu gostaria de modificar essas coordenas. Gostaria por exemplo que no centro, tivesse 0 X 0 como se fosse um plano cartesiano, entende?

Será que há solução pra isso?

[quote=willer]Boa noite. Bem Henrique, talvez eu tenha me expressado mal.

Tenho um Mouse Listener. Ele pega as coordenadas e tudo. Contudo são coordenadas do JPANEL com relação a RESOLUCAO da minha tela.

Por exemplo, se a resolução é de 800 X 600, quando clico por exemplo no centro do JPANEL, o evento terá as coordenadas de 400 X 300 (EXEMPLO).

entende?
Eu gostaria de modificar essas coordenas. Gostaria por exemplo que no centro, tivesse 0 X 0 como se fosse um plano cartesiano, entende?

Será que há solução pra isso?[/quote]

Rapaz não estou entendendo isso ai não, coloca um trecho desse código seu ai pra clarear as idéias pois a principio imaginei uma coisa meio diferente.

Henrique, me desculpe, porque não estou conseguindo me expressar direito.
Então, para facilitar, peguei uma imagem na internet. O que quero implementar nada mais é que um plano cartesiano, como a figura abaixo, entende?

Quero que a partir do método MouseListener eu possa encontrar exatamente um ponto, por exemplo o ponto A como da figura, que possui os pontos (x = -2) e (y = 3), formando a coordenada (-2, 3). E quando eu passasse o mouse pelo ponto B ele me trouxesse (4, -3), e assim por diante.
Só quero determinar um limite para esse plano cartesiano, entre o eixo das ordenadas e das abcissas.

A questão que falei sobre a resolução da tela foi uma forma que encontrei de exemplificar. Pois, quando se tem um evento de mouse sobre um jPanel por exemplo, conseguimos pegar as coordenadas corretas, com relação a tela, de acordo com o pixel clicado. (Mas isso foi só um exemplo).

Será que ainda assim pode me ajudar?
Desde já muito obrigado!

Sempre em relação ao sistema de coordenadas do painel, basta subtrair o vetor de coordenada do ponto onde o click ocorreu do vetor de coordenadas do centro.

Digamos que seu centro tenha sido desenhado em [color=red]400,300[/color]. Um clique em [color=blue]600,250[/color] teria as coordenadas:
[color=blue]600[/color]-[color=red]400[/color], [color=blue]250[/color]-[color=red]300[/color] = (200, -50) no novo sistema.

Se você pretender obter o ponto central do JPanel, esse ponto será as dimensões do painel / 2.

Para mais informações sobre vetores e sistemas de coordenadas:
http://www.pontov.com.br/site/arquitetura/54-matematica-e-fisica/132-o-uso-de-vetores-nos-jogos
http://www.pontov.com.br/site/arquitetura/54-matematica-e-fisica/238-matrizes-e-transformacoes-parte-1
http://www.pontov.com.br/site/arquitetura/54-matematica-e-fisica/267-matrizes-e-transformacoes-parte-2

Outra coisa. Ao postar tópicos, leia com atenção a lista de fóruns disponíveis. Nem tudo é java básico.
No seu caso, a dúvida é de interface gráfica.

Godoy muito obrigado pelas dicas. Agora tenho um norte sim!!!

Me desculpe, mas como sou iniciante, pensei que fosse algo básico, por isso postei nesse fórum.
Terei mais atenção da próxima vez!

Mas de toda forma, muitíssimo obrigado.

Assim que fizer, posto o código aqui!

Att.

Outro detalhe. No seu sistema de coordenadas y é invertido em relação ao do JPanel (no painel o 0 está no topo, e os números crescem até a base).

Nesse caso, o calculo correto seria:
600-400, 600-250-300 = (200, 50)

O que estamos fazendo aqui é subtraindo o tamanho do painel (600) da coordenada y, para inverte-la.

Aaa… bacana… saber isso…
então posso fazer uma função para setar as coordenadas passadas pelo mouse de acordo com essa “formula” !!!

ex pseudo Codigo…

//Passar o valor do clique
public void funcaoCalcula(double x, double y){

//CENTRO: 400, 300

double centroX = 400.0;
double centroY = 300.0;

//CLIQUE:
//x = 600 y = 250

double valorX = x - centroX;
double valorY = x - y - centroY;

}

uma dúvida… para funcionar como um plano cartesiano… eu poderia modificar o valor do centro também?
Por exemplo:
meu centro é 400,300

eu poderia com essa função jogar (0,0) ??

Essa foi a forma que encontrei para realizar as operações. Sendo assim, o centro do JPANEL ficou com valor 0,0 e as extremidades com valores divididos:
EX:
jPanel (600,600)

Centro: 0,0

Extremos
X : 300
-X : -300
Y : 300
-Y : -300

Godoy, muito obrigado pela ajuda!
Consegui, e vou dar o tópico como encerrado.


private double centroX;
private double centroY;
private double valorX;
private double valorY;

    public void centroPanel() {
        int w = jPanelTeste.getWidth();
        int h = jPanelTeste.getHeight();

        centroX = w / 2;
        centroY = h / 2;

        System.out.println(" Tamanho Painel X  : " + w);
        System.out.println(" Tamanho Painel Y  : " + h);
        System.out.println(" Centro Painel X      : " + w / 2);
        System.out.println(" Centro Painel Y      : " + h / 2);
    }

    /**
     * Funcao para calcular os pontos do mouse de acordo com a coordenada
     * do clique
     * @param x
     * @param y
     */
    public void calculaPontoMouse(int x, int y) {
       
         valorX = x - centroX;

        //O valor do Y passado é negativo para que o exito Y se inverta, como se fosse
       //um plano cartesiano
        valorY = -y + centroY;

    }