Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
devair1010

Java mover botão em tempo de execução

Recommended Posts

boa noite
   alguém pode me ajudar aqui ,  estou querendo fazer uma interface na linguagem java que mova um botão em tempo de execução assim que clicar no outro botão então preciso também pegar a posição X Y do mouse onde clicou para que o botão se mova até esse ponto .  tenho esse código que funciona , criado no netbeans , comecei clicando em novo projeto e escolhi java / aplicação java e desmarquei a caixa de criar classe principal, depois criei um novo arquivo clicando em java / classe java e em finalizar , mas o botão só se move um pouco a cada clicada no outro botão e eu queria que ele se movesse até o ponto onde clicou com o mouse  :
 

    /*
      criado com ( java -- aplicação java ) e desmarcado a caixa criar classe
      e criado um arquivo novo com ( java --  classe java ) .
     */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class criar_botoes_clase extends JFrame implements ActionListener
{
    JButton b1, b2 ;
    public criar_botoes_clase()          //apenas cria os objetos e só vem aqui huma vez
    {
        setTitle("Acrescentando botões");//titulo da janela
        setBounds(400,150,500,500);      //tamanho e posição da janela
    b1 = new JButton();                  //um botão 
        b1.setText("Sair");              //escrito no botao
        b1.setSize(100,25);              //tamabho e altura do botão
        b1.setLocation(x,200);           //posição do botão na janela
        b1.setBackground(Color.orange);  //cor de fundo do botão
        b1.setForeground(Color.blue);
        b1.setFont(new Font("Sans Serif",Font.BOLD,14));
        /*b1.setBorder(BorderFactory.createBevelBorder(1,Color.white,Color.black));*/
        b1.setEnabled(true);
        b1.addActionListener(this);
        b1.setMnemonic(KeyEvent.VK_S);   //igual a utilizar ALT+S
    b2 = new JButton("");                /*Cadastrar*/
        b2.setSize(100,25);
        b2.setLocation(200,100);
        b2.setFont(new Font("ScriptS",Font.ITALIC,12));
        /*b2.setBorder(BorderFactory.createLineBorder(Color.black,2));*/
        b2.setEnabled(true);
        b2.addActionListener(this);
        b2.setMnemonic(KeyEvent.VK_C);    // igual a utilizar ALT+C
        getContentPane().setLayout(null);
        getContentPane().add(b1);
        getContentPane().add(b2);
    }	
    
    public void actionPerformed(ActionEvent e)//ações de cada Botão
    {  
        x+=10;                            //toda vez que clicar em um botão ele vem aqui
        if(x > 390)x=0;
        b1.setLocation(x,200);            //posição do botão na janela
        if(e.getSource()==b1)
        {
            System.exit(0);
        }	
        if(e.getSource()==b2) 
        {
            /*JOptionPane.showMessageDialog(null, "clicou no botão 2");*/
        }	
    }	
    static int x=50,y=0;
    public static void main (String arg[])
    {   //não fica em loop aqui dentro não 
        JFrame Ex = new criar_botoes_clase();
        Ex.setVisible(true);
    }

}

 

Editado por devair1010

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom para fazer isso o botão a ser clicado deve ter um tamanho grande para quando clicar em cima dele o outro botão aparecer sobre posto. Segue o código abaixo.

import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class criar_botoes_clase extends JFrame implements ActionListener
{
    JButton b1, b2 ;
    
    public criar_botoes_clase()          //apenas cria os objetos e só vem aqui huma vez
    {
        setTitle("Acrescentando botões");//titulo da janela
        setBounds(400,150,500,500);      //tamanho e posição da janela
    b1 = new JButton();                  //um botão 
        b1.setText("Sair");              //escrito no botao
        b1.setSize(100,25);              //tamabho e altura do botão
        b1.setLocation(x,y);           //posição do botão na janela
        b1.setBackground(Color.orange);  //cor de fundo do botão
        b1.setForeground(Color.blue);      //cor da fonte
        b1.setFont(new Font("Sans Serif",Font.BOLD,14)); //configurações da fonte
        /*b1.setBorder(BorderFactory.createBevelBorder(1,Color.white,Color.black));*/
        b1.setEnabled(true);            //botão ativo
        b1.addActionListener(this);     //procura o que o botão faz
        b1.setMnemonic(KeyEvent.VK_S);   //igual a utilizar ALT+S (sair da janela)
    b2 = new JButton("");                /*Cadastrar*/
        b2.setSize(400,400);
        b2.setLocation(0,0);
        b2.setFont(new Font("ScriptS",Font.ITALIC,12));
        /*b2.setBorder(BorderFactory.createLineBorder(Color.black,2));*/
        b2.setEnabled(true);
        b2.addActionListener(this);
        b2.setMnemonic(KeyEvent.VK_C);    // igual a utilizar ALT+C
 
        
        //declara os componetes
        getContentPane().setLayout(null);
        getContentPane().add(b1);
        getContentPane().add(b2);
       
    }	
      
     

    //Pegar posição do mouse
    public void mouseposicao ()
    {
     //Captura o click
     Point p = java.awt.MouseInfo.getPointerInfo().getLocation();
     
     //repassa valores para as variaveis
     x = p.x;//passa posição para as variaveeis
     y = p.y;
     
     //chama a função para mover o botao b1
     moverb1();
    
    }
    
    
    
    
    
    //mover botão b1
    public void moverb1 ()
    {
       x = x-460;
       y = y-200;
       b1.setLocation(x,y);            //posição do botão na janela
    }
    public void actionPerformed(ActionEvent e)//ações de cada Botão
    {
        if(e.getSource()==b1)
        {
             System.exit(0);
        }
        if(e.getSource()==b2)
        {
           // moverb1 ();            
           mouseposicao();            
        }
        
    }
   
    
    static int x=0,y=0; //valor inicial da variavel x
    public static void main (String arg[])
    {   //não fica em loop aqui dentro não 
        JFrame Ex = new criar_botoes_clase();
        Ex.setVisible(true);
    }
    
      
               

}

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@edifesf10 @edifesf10      obrigado ,  seu código ficou bom e funcionou bem ,   mas será que tem como fazer o botão se mover um pixel de cada vez para que ele se mova devagar e não de um lugar para o outro de uma vez ?  pois o que preciso mesmo é ver o botão se deslocando de onde ele está e indo para o ponto onde clico com o mouse , e se é possível não ter esse botão 2 e ao clicar  na janela o botão b1 se mover para lá  .    como seria a função que faz o objeto ficar se movendo .    

      agradeço desde já  .

Editado por devair1010

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem como sim eu fiz assim:

1 Criei um novo form JFrame;

2 Adicionei uma JLabel e renomeei para lb1 - tamanho 300 por 300;

3 Adicionei um JButton e renomeei para b1;

4 Criei uma função - public void mouseposicao ;

 public void mouseposicao ()
    {
        int x = 0, y = 0;
     Point p = java.awt.MouseInfo.getPointerInfo().getLocation();//Captura o click
      x = p.x;//passa posição para as variaveeis
     y = p.y;//passa posição para as variaveeis
    } 

5 No evento MouseEntered da JLabel criei o codigo abaixo;

private void lb1MouseEntered(java.awt.event.MouseEvent evt) {                                 
        b1.setLocation(evt.getX(),evt.getY());
         int z[] = {};//Array para redirecionar de acordo com o movimento
         int x = z[0];//Repassa o valor para y
         int y = z[1]; //Repassa o valor para y
         mouseposicao(); //chama função que faz a movimentação de b1
    }                       

6 fiz o import da biblioteca

import java.awt.Point;

Aqui funcionou perfeitamente, abraços Edifesf

Editado por edifesf10
Faltou Importar a biblioteca
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@edifesf10    muito obrigado pela ajuda , valeu mesmo  !    ainda estou no começo dos estudos  desse java e com seu código deu pra entender melhor como construir códigos ,  mas não sei no que errei pois o botão está pulando do local onde está para o ponto onde clico com o mouse ,   e não estou vendo o botão ir deslizando vagarosamente de onde ele está até o ponto clicado no Jlabel , creio que precisa de uma função que fique sendo executada o tempo todo e dentro dessa função irá mover o botão lentamente até o ponto clicado ,  por favor dê uma olhada no código que fiz e veja no que errei .   fiz como você explicou , criei um novo projeto e desmarquei a caixa de criar classe java  depois criei um novo projeto com um JFrame e nele coloquei um jlabel e um botão e usei esse código aqui  :

package meu.botaoSaltitante;

import java.awt.Point;
public class HumJFrame extends javax.swing.JFrame {
    public HumJFrame() {
        initComponents();
    }
    public void mouseposicao () {
        int x = 0, y = 0;
        Point p = java.awt.MouseInfo.getPointerInfo().getLocation();//Captura o click
        x = p.x;              //passa posição para as variaveeis
        y = p.y;              //passa posição para as variaveeis
    }
    @SuppressWarnings("unchecked")
    private void lb1MouseClicked(java.awt.event.MouseEvent evt) {                                 
        b1.setLocation(evt.getX(),evt.getY());
         int z[] = {};       //Array para redirecionar de acordo com o movimento
         int x = z[0];       //Repassa o valor para y
         int y = z[1];       //Repassa o valor para y
         mouseposicao();     //chama função que faz a movimentação de b1
    }                                
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new HumJFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton b1;
    private javax.swing.JLabel lb1;
    // End of variables declaration                   
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que o seu erro está na inicialização dos componentes da uma olhada acima desta linha - "private void lb1MouseClicked(java.awt.event.MouseEvent evt) {"

 

veja se a função - private void initComponents() { está declara e se está de acordo com o código abaixo:

 


    private void initComponents() {

        lb1 = new javax.swing.JLabel();
        b1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        lb1.setText("lb1");
        lb1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                lb1MouseEntered(evt);
            }
        });

        b1.setText("b1");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(lb1, javax.swing.GroupLayout.PREFERRED_SIZE, 361, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(b1)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(lb1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addGap(31, 31, 31)
                .addComponent(b1)
                .addContainerGap(244, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        
   

Se não estiver declarada então copie o código acima e insira no seu código acima da linha - "private void lb1MouseClicked(java.awt.event.MouseEvent evt) {   "

 

Abraços Edifesf10

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@edifesf10        obrigado pela ajuda , com sua dica consegui fazer funcionar ,    no netbeans  comecei criando um novo projeto java / applicação java e desmarquei a caixa de criar classe principal ,   depois criei um novo arquivo e escolhi forms GUI Swing e form Jframe  coloquei o nome e finalizar  e depois coloquei um jpanel e um Jbutton e cliquei no Jbutton com o botão direito do mouse e modifiquei o nome da variável para b1 , e coloquei esse código e modifiquei o nome da classe e pacote para que fique igual ao que eu coloquei , então o código ficou assim  :

package pac.timer_3;

import javax.swing.Timer;
import javax.swing.JButton;  
import javax.swing.JFrame;  
import java.awt.AWTException;  
import java.awt.Robot;  
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import java.awt.event.InputEvent;  
public class classe_timer_3 extends javax.swing.JFrame {

    public classe_timer_3() {
        initComponents();
        objTimer = new Timer(((100)), taskPerformer);
        objTimer.setRepeats(true); 
        objTimer.start();
    }

    @SuppressWarnings("unchecked")
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        b1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        b1.setText("botão");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(b1)
                .addContainerGap(329, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap(195, Short.MAX_VALUE)
                .addComponent(b1)
                .addGap(100, 100, 100))
        );

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

        pack();
    }// </editor-fold>                        
    ActionListener taskPerformer = new ActionListener() 
    {
        public void actionPerformed(ActionEvent evt) 
        {
            b1.setLocation(x,y);
            x += 10;
            if(x == 100)
                y = 80;
            else
                if(x == 200)
                    y = 50;
                else
                    if(x == 350){
                        objTimer.stop();
                        x = 0;
                }
        }
    };
    static int x,y=100;
    Timer objTimer;
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(classe_timer_3.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(classe_timer_3.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(classe_timer_3.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(classe_timer_3.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new classe_timer_3().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton b1;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration                   
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×