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.
Como fazer pro JButton nao sair da area do JPanel ???
obrigado
M
mauricioadl
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.
R
raghy
OLA FERNANDO PAIVA, LEMBRO DE NOSSOS COMENTÁRIOS POR AQUI. QUAL ´É A IDÉIA PARA ESTE SEU PROJETO…
EMAIL NA ASSINATURA PARA RECEBER, PROJETO 7 JOGOS EM JAVA.
F
fernandopaiva
Calcular a área do JPanel, seria base*altura ???
estou tentando fazer assim, mas ainda nao estou conseguindo resolver.
publicclassKillDuckextendsJFrame{privateJPanelpanelNorth,panelCenter,panelSouth;privateJLabelpontuacao,erros;privateJButtonduck;privateIntegerqtdPontos=0;privateIntegerqtdErros=0;publicKillDuck(){super("Kill Duck - v1.0b");setSize(800,600);setResizable(false);setLocationRelativeTo(null);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//criando paineispanelNorth=newJPanel();panelNorth.setLayout(newFlowLayout());panelNorth.setBorder(BorderFactory.createTitledBorder("Pontuação"));panelCenter=newJPanel();panelSouth=newJPanel();panelSouth.setLayout(newFlowLayout());panelSouth.setBorder(BorderFactory.createTitledBorder("Erros"));//pontuacaopontuacao=newJLabel("0");pontuacao.setForeground(Color.BLUE);pontuacao.setFont(newFont("Verdana",1,25));//erroserros=newJLabel("0");erros.setForeground(Color.RED);erros.setFont(newFont("Verdana",1,25));//duckduck=newJButton("duck");//new ImageIcon(getClass().getResource("/imagens/pato.png"))); duck.addMouseListener(newMouseAdapter(){publicvoidmouseReleased(MouseEvente){qtdPontos+=e.getClickCount();pontuacao.setText(String.valueOf(qtdPontos));}});//panel centerpanelCenter.addMouseListener(newMouseAdapter(){publicvoidmouseReleased(MouseEvente){qtdErros+=e.getClickCount();erros.setText(String.valueOf(qtdErros));}});//add componentes panelpanelNorth.add(pontuacao);panelSouth.add(erros);panelCenter.add(duck);//add panelsadd(panelNorth,BorderLayout.NORTH);add(panelCenter,BorderLayout.CENTER);add(panelSouth,BorderLayout.SOUTH);setVisible(true);startGame();}privatevoidstartGame(){//tamanho JPanel centerintwPanel=panelCenter.getSize().width;inthPanel=panelCenter.getSize().height;//variaveis randomicasRandomr1=newRandom();Randomr2=newRandom();//area JPanelintarea=wPanel*hPanel;while(isShowing()){//posicao atual duckintdX=duck.getBounds().x;intdY=duck.getBounds().y;//nova posicao duckintdX_New=r1.nextInt(dX)+200;intdY_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(InterruptedExceptionex){Logger.getLogger(KillDuck.class.getName()).log(Level.SEVERE,null,ex);}}}}
como fazer para q o JButton nao saia da área do JPanel ???
obrigado
F
fernandopaiva
Opa, resolvi. Fixei um tamanho pra área q o JButton vai percorrer e fiz um teste…
ficou assim.
publicclassKillDuckextendsJFrame{privateJPanelpanelNorth,panelCenter,panelSouth;privateJLabelpontuacao,erros;privateJButtonduck;privateIntegerqtdPontos=0;privateIntegerqtdErros=0;privateImageIconiconeDuck;publicKillDuck(){super("Kill Duck - v1.0b");look();setSize(800,600);setResizable(false);setLocationRelativeTo(null);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//criando paineispanelNorth=newJPanel();panelNorth.setLayout(newFlowLayout());panelNorth.setBorder(BorderFactory.createTitledBorder(null," Pontuação ",TitledBorder.CENTER,TitledBorder.DEFAULT_POSITION));panelCenter=newJPanel();panelSouth=newJPanel();panelSouth.setLayout(newFlowLayout());panelSouth.setBorder(BorderFactory.createTitledBorder(null," Erros ",TitledBorder.CENTER,TitledBorder.DEFAULT_POSITION));//pontuacaopontuacao=newJLabel("0");pontuacao.setForeground(Color.BLUE);pontuacao.setFont(newFont("Verdana",1,25));//erroserros=newJLabel("0");erros.setForeground(Color.RED);erros.setFont(newFont("Verdana",1,25));//duck iconeDuck=newImageIcon(getClass().getResource("/imagens/patoVerde.jpg"));duck=newJButton(iconeDuck);duck.addMouseListener(newMouseAdapter(){publicvoidmouseReleased(MouseEvente){qtdPontos+=e.getClickCount();pontuacao.setText(String.valueOf(qtdPontos));duck.setIcon(iconeDuck);}publicvoidmousePressed(MouseEvente){duck.setIcon(newImageIcon(getClass().getResource("/imagens/patoVermelho.jpg")));}});//erros ao clicar no panel centerpanelCenter.addMouseListener(newMouseAdapter(){publicvoidmouseReleased(MouseEvente){qtdErros+=e.getClickCount();erros.setText(String.valueOf(qtdErros));}publicvoidmouseEntered(MouseEvente){Cursorcursor=Cursor.getDefaultCursor();cursor=Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR);setCursor(cursor);}});//altera cursor na area de panel center//add componentes panelpanelNorth.add(pontuacao);panelSouth.add(erros);panelCenter.add(duck);//add panelsadd(panelNorth,BorderLayout.NORTH);add(panelCenter,BorderLayout.CENTER);add(panelSouth,BorderLayout.SOUTH);setVisible(true);startGame();}privatevoidstartGame(){//variaveis randomicasRandomr1=newRandom();Randomr2=newRandom();while(isShowing()){//posicao atual duckduck.setBounds(650,300,duck.getSize().width,duck.getSize().height);intdX=duck.getBounds().x;intdY=duck.getBounds().y;//nova posicao duckintdX_New=r1.nextInt(dX)+1;intdY_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(InterruptedExceptionex){Logger.getLogger(KillDuck.class.getName()).log(Level.SEVERE,null,ex);}}}privatevoidlook(){try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}catch(ClassNotFoundExceptionex){Logger.getLogger(KillDuck.class.getName()).log(Level.SEVERE,null,ex);}catch(InstantiationExceptionex){Logger.getLogger(KillDuck.class.getName()).log(Level.SEVERE,null,ex);}catch(IllegalAccessExceptionex){Logger.getLogger(KillDuck.class.getName()).log(Level.SEVERE,null,ex);}catch(UnsupportedLookAndFeelExceptionex){Logger.getLogger(KillDuck.class.getName()).log(Level.SEVERE,null,ex);}}}