Alterar posicao de um JButton em um JPanel?

Salve galera, estou tentando fazer um esquema aqui q eh o seguinte…

Tenho um JPanel e nesse JPanel tenho um JButton, eu quero fazer com que esse JButton a cada 2 segundos mude de posicao com um sorteio em Random e respeitando a area do JPanel.

To tentando algo assim.

int x = btn01.getX();
int y = btn01.getY();

Random r1 = new Random();
Random r2 = new Random();

btn01.setLocation(r1.nextInt(x), r2.nextInt(y));
Thread.sleep(2);

Nao estou conseguindo pegar a posicao do JButton no JPanel dessa maneira e tbm nao consigo colocar uma outra posicao para o mesmo…

Como fazer isso ???

obrigado

use layout null no JPanel

e mude o valor do setBounds(x, y, width, height)

para pegar o valor atual use o getBounds()

[]'s

[quote=mauricioadl]use layout null no JPanel

e mude o valor do setBounds(x, y, width, height)

para pegar o valor atual use o getBounds()

[]'s[/quote]

opa, funcionou blzinha…Agora preciso q o JButton nao saia da area do JPanel. O JButton, caminha pelo JPanel mas tem horas q sai da area e some…

Tentando assim


public class Jogo extends JFrame{
    private JPanel panelNorth, panelCenter;
    private JLabel pontuacao;
    private JButton duck;
    private Integer qtdPontos = 0;

    public Jogo() {
        super("Kill Duck - v1.0b");
        setSize(800,600);
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        //criando paineis
        panelNorth = new JPanel();
        panelNorth.setLayout(new FlowLayout());
        panelNorth.setBorder(BorderFactory.createTitledBorder("Pontuação"));
        
        panelCenter = new JPanel();
        
        
        //pontuacao
        pontuacao = new JLabel("0");
        pontuacao.setForeground(Color.red);
        pontuacao.setFont(new Font("Verdana", 1, 25));
        
        //duck
        duck = new JButton("duck");//new ImageIcon(getClass().getResource("/imagens/pato.png")));
        //duck.setBounds(100, 300, 100, 100);
        duck.addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent e){
                qtdPontos += e.getClickCount();
                pontuacao.setText(String.valueOf(qtdPontos));
            }
        });
        
        
        //add componentes panel
        panelNorth.add(pontuacao);
        panelCenter.add(duck);
        
        //add panels
        add(panelNorth, BorderLayout.NORTH);
        add(panelCenter, BorderLayout.CENTER);
        
        
        setVisible(true);
        startGame();
        
    }
    
    private void startGame(){
        int wPanel = panelCenter.getSize().width;
        int hPanel = panelCenter.getSize().height;
        
        while(isShowing()){
            int x = duck.getBounds().x;
            int y = duck.getBounds().y;

            Random r1 = new Random();
            Random r2 = new Random();

            int xNovo = r1.nextInt(x) + 200;
            int yNovo = r2.nextInt(y) + 200;

            duck.setBounds(xNovo, yNovo, duck.getSize().width, duck.getSize().height);

            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(Jogo.class.getName()).log(Level.SEVERE, null, ex);
            }
            
        }
        
        
     
        
    }
    
    
    
}

Como fazer pro JButton nao sair da area do JPanel ???

obrigado

ele esta saindo do jpanel porque os valores que vc esta passando estao maiores ou menores do q a area do jpanel, faça uma logica q nao deixe isso acontecer.

OLA FERNANDO PAIVA, LEMBRO DE NOSSOS COMENTÁRIOS POR AQUI. QUAL ´É A IDÉIA PARA ESTE SEU PROJETO…

DEIXO MEU NOVO LINK, DE JOGO NOVO
http://www.guj.com.br/java/297085-batalha-naval---fiz-meu-jogo

EMAIL NA ASSINATURA PARA RECEBER, PROJETO 7 JOGOS EM JAVA.

Calcular a área do JPanel, seria base*altura ???

estou tentando fazer assim, mas ainda nao estou conseguindo resolver.

public class KillDuck extends JFrame{
    private JPanel panelNorth, panelCenter, panelSouth;
    private JLabel pontuacao, erros;
    private JButton duck;
    private Integer qtdPontos = 0;
    private Integer qtdErros = 0;

    public KillDuck() {
        super("Kill Duck - v1.0b");
        setSize(800,600);
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        //criando paineis
        panelNorth = new JPanel();
        panelNorth.setLayout(new FlowLayout());
        panelNorth.setBorder(BorderFactory.createTitledBorder("Pontuação"));        
        panelCenter = new JPanel();
        panelSouth = new JPanel();
        panelSouth.setLayout(new FlowLayout());
        panelSouth.setBorder(BorderFactory.createTitledBorder("Erros"));        
        
        //pontuacao
        pontuacao = new JLabel("0");
        pontuacao.setForeground(Color.BLUE);
        pontuacao.setFont(new Font("Verdana", 1, 25));
        
        //erros
        erros = new JLabel("0");
        erros.setForeground(Color.RED);
        erros.setFont(new Font("Verdana", 1, 25));
        
        //duck
        duck = new JButton("duck");//new ImageIcon(getClass().getResource("/imagens/pato.png")));        
        duck.addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent e){
                qtdPontos += e.getClickCount();
                pontuacao.setText(String.valueOf(qtdPontos));
            }
        });
        
        //panel center
        panelCenter.addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent e){                
                qtdErros += e.getClickCount();
                erros.setText(String.valueOf(qtdErros));
            }
        });
        
        
        //add componentes panel
        panelNorth.add(pontuacao);
        panelSouth.add(erros);
        panelCenter.add(duck);
        
        
        //add panels
        add(panelNorth, BorderLayout.NORTH);
        add(panelCenter, BorderLayout.CENTER);
        add(panelSouth, BorderLayout.SOUTH);
        
        
        setVisible(true);
        startGame();
        
    }
    
    private void startGame(){
        //tamanho JPanel center
        int wPanel = panelCenter.getSize().width; 
        int hPanel = panelCenter.getSize().height;
        
        //variaveis randomicas
        Random r1 = new Random();
        Random r2 = new Random();
                
        //area JPanel
        int area = wPanel * hPanel;
                        
        while(isShowing()){
            //posicao atual duck
            int dX = duck.getBounds().x;
            int dY = duck.getBounds().y;
            
            //nova posicao duck
            int dX_New = r1.nextInt(dX) + 200;
            int dY_New = r2.nextInt(dY) + 200;
                        
            //verifica nova posicao para duck dentro do JPanel 
            if((dX_New * dY_New) <= area){
                duck.setBounds(dX_New, dY_New, duck.getSize().width, duck.getSize().height);
            }else{
                duck.setBounds(0, 0, duck.getSize().width, duck.getSize().height);
            }
            

            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(KillDuck.class.getName()).log(Level.SEVERE, null, ex);
            }            
        }
    }
}

como fazer para q o JButton nao saia da área do JPanel ???

obrigado

Opa, resolvi. Fixei um tamanho pra área q o JButton vai percorrer e fiz um teste…

ficou assim.

public class KillDuck extends JFrame{
    private JPanel panelNorth, panelCenter, panelSouth;
    private JLabel pontuacao, erros;
    private JButton duck;
    private Integer qtdPontos = 0;
    private Integer qtdErros = 0;
    private ImageIcon iconeDuck;

    public KillDuck() {
        super("Kill Duck - v1.0b");
        look();
        setSize(800,600);
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        //criando paineis
        panelNorth = new JPanel();
        panelNorth.setLayout(new FlowLayout());
        panelNorth.setBorder(BorderFactory.createTitledBorder(null, " Pontuação ",TitledBorder.CENTER, TitledBorder.DEFAULT_POSITION));        
        panelCenter = new JPanel();               
        panelSouth = new JPanel();
        panelSouth.setLayout(new FlowLayout());
        panelSouth.setBorder(BorderFactory.createTitledBorder(null, " Erros ",TitledBorder.CENTER, TitledBorder.DEFAULT_POSITION));        
        
        //pontuacao
        pontuacao = new JLabel("0");
        pontuacao.setForeground(Color.BLUE);
        pontuacao.setFont(new Font("Verdana", 1, 25));
        
        //erros
        erros = new JLabel("0");
        erros.setForeground(Color.RED);
        erros.setFont(new Font("Verdana", 1, 25));
        
        //duck        
        iconeDuck = new ImageIcon(getClass().getResource("/imagens/patoVerde.jpg"));
        duck = new JButton(iconeDuck); 
        
        duck.addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent e){                 
                qtdPontos += e.getClickCount();
                pontuacao.setText(String.valueOf(qtdPontos));
                duck.setIcon(iconeDuck);                                    
            }
            
            public void mousePressed(MouseEvent e){                 
                duck.setIcon(new ImageIcon(getClass().getResource("/imagens/patoVermelho.jpg")));                
            }
        });
        
        //erros ao clicar no panel center
        panelCenter.addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent e){                
                qtdErros += e.getClickCount();
                erros.setText(String.valueOf(qtdErros));                
            }
            
            public void mouseEntered(MouseEvent e){
                Cursor cursor = Cursor.getDefaultCursor();     
                cursor = Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR); 
                setCursor(cursor);
            }
        });
        
        //altera cursor na area de panel center
        
        
        
        
        //add componentes panel
        panelNorth.add(pontuacao);
        panelSouth.add(erros);
        panelCenter.add(duck);
        
        
        //add panels
        add(panelNorth, BorderLayout.NORTH);
        add(panelCenter, BorderLayout.CENTER);
        add(panelSouth, BorderLayout.SOUTH);
        
        
        setVisible(true);
        startGame();
        
    }
    
    private void startGame(){
        //variaveis randomicas
        Random r1 = new Random();
        Random r2 = new Random();
                
                        
        while(isShowing()){
            //posicao atual duck
            duck.setBounds(650, 300, duck.getSize().width, duck.getSize().height);
            int dX = duck.getBounds().x;
            int dY = duck.getBounds().y;
            
            //nova posicao duck
            int dX_New = r1.nextInt(dX) + 1;
            int dY_New = r2.nextInt(dY) + 1;            
            
            if(dX_New <= 650 && dY_New <= 300){
                duck.setBounds(dX_New, dY_New, duck.getSize().width, duck.getSize().height);            
            }else{
                duck.setBounds(0, 0, duck.getSize().width, duck.getSize().height);            
            }
            

            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(KillDuck.class.getName()).log(Level.SEVERE, null, ex);
            }            
        }
    }
    
    
    
    private void look(){
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(KillDuck.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(KillDuck.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(KillDuck.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnsupportedLookAndFeelException ex) {
            Logger.getLogger(KillDuck.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    
    
}

obrigado