Clique com mouse em movimento

4 respostas
kirill

Eai galera mais uma vez estou com uma duvida,
desta vez não sei se ela é tão trivial e nem sei se existe solucão.
Não sei se vocês já perceberam isto mas eu percebi isto fazendo um trabalho de
computacão gráfica onde o professor pediu para que eu implementasse
um aplicativo do tipo paint mas bem simplificado.
Então, o problema é o seguinte, eu tenho um JFrame,
dentro dele tenho um JPanel, neste JPanel eu devo desenhar um poligono com um
numero de pontos definido pelo usuario, eu usei a classe GeneralPath.
E funcionou tudo certo e tal. Só que eu percebi que se o mouse estiver em movimento e voce clicar
no JPanel com o BUTTON1 para que seja selecionado um ponto do polígono, este ponto não é detectado.
Ou seja, o que eu quero dizer é será que a linguagem possui esta limitação ?!
A unica maneira que eu consigo detectar o click do mouse, é com ele parado.
Vou passar um exemplo simples para que voces vejam.
Eh bem simples, quando vc clica no JPanel, deve aparecer a coordenada do clique atraves do System.out.
Aí está a classe.

public class teste extends javax.swing.JFrame {

    /** Creates new form teste */
    public teste() {
        initComponents();
        jPanel1.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e){
                System.out.println("x "+e.getX());
                System.out.println("y "+e.getY());
            }
        });
    }

   
    
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setBackground(new java.awt.Color(102, 102, 255));

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 376, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 274, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }

   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new teste().setVisible(true);
            }
        });
    }
    
    private javax.swing.JPanel jPanel1;    

}

Valeeeeu galera, pela atenção, se alguem tiver uma ideia de como resolver este problema estarei muito grato.
P.S. usando c++ com openGL e FLTK, este problema não acontece. E como todos sabem se por ex. usando Windows ou Linux
voce fizer isso na area de trabalho, vc consegue detectar este clicks com o mouse em movimento. Ambos sistemas escritos em C++.

4 Respostas

ViniGodoy

Use o método mouseDown e não o mouseClick.

Só é considerado click se o usuário pressionar e soltar o mouse praticamente no mesmo lugar. Com o mouse up, ele usará como click o lugar onde o mouse parou. Com o mouseDown, onde o mouse desceu.

viniciusfaleiro

ViniGodoy:
Use o método mouseDown e não o mouseClick.

Só é considerado click se o usuário pressionar e soltar o mouse praticamente no mesmo lugar. Com o mouse up, ele usará como click o lugar onde o mouse parou. Com o mouseDown, onde o mouse desceu.

Ja tive esse problema… resolvi com mouseReleased

ViniGodoy

Ops, é mousePressed e released mesmo. heehehhehe

kirill

Vaaaleu irmaos,
funcionou perfeitamente como eu queria.
Eh so capturar os pontos usando mousePressed mesmo.
Gracias.

Criado 12 de março de 2010
Ultima resposta 13 de mar. de 2010
Respostas 4
Participantes 3