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.
raghy
Abril 4, 2013, 3:23am
#5
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