Estou tentando fazer um jogo… mas antes de realmente começar o jogo eu quero fazer um Menu do jogo com botoes(Jogar, Configurações), logo do jogo e talvez futuramente outras coisas. E no jogo eu quero fazer um botão para voltar ao Menu
O problema é que quando uso JButton ele não aparece, então eu não faço ideia de como implementar esses botões (nem a parte estética, nem a parte logica ), segue o código simplificado:
publicclassMain{publicstaticvoidmain(String[]args){JFramejanela=newJFrame();Jogojogo=newJogo();Menumenu=newMenu();janela.add(menu);// configuraçoes tamanho titulo }}publicclassJogoextendsJPanel{publicJogo(){super("Joguinzin manero");JButtonbotao=newJButton("Voltar ao menu");add(botao);// isso aqui funciona mas o botao fica por baixo do Graphics}@Overridepublicvoidpaint(Graphicsg){Graphics2Dgrafico=(Graphics2D)g;// desenha o jogo todografico.dispose();}}
Pra ser mais específico e direto segue as duvidas:
Como fazer um Botao de menu e de voltar ao menu?
Como personalizar esse botao(mudar o style dele, quando passar o mouse por cima, ou realmente clicar nele, nao quero um botao padrão)?
Para personalizar um JButton, você pode alterar as propriedades dele, como cor, adicionar uma imagem, bordas, etc. Você também pode estender a classe JButton, criando um botão mais personalizado, que poderá ser reusado com mais facilidade.
Outra opção, talves mais coerente com jogos, criar um botão usando formas geométricas simples (como retângulos) e desenhá-los diretamente com Java2D (no método paintComponent do JPanel, que você estendeu no seu exemplo).
Não tem muito atalho. Tem que estudar um bocado pra entender como essas funcionam para chegar onde você quer.
Abraço.
A
ARandomProgrammer
Obrigado pelas dicas meu caro, vou ler esses artigos e arrumar o código de demonstração ali… mas acho q não fui tao claro, o meu problema é que quando eu adiciono o meu botão ele não reage bem ao método paintComponent… fica por baixo do que ele pintou no frame, inacessível. Quanto a lógica por trás da navegação entre as cenas(menu, jogo em si e futuramente escolha do personagem) tenho duvidas também… Fazer o botão diretamente no paintConponent já era uma opção mas eu preferi deixar em ultimo caso.
Eu já vi o PontoV, me ajudou bastante, mas não fala nada sobre um botão no por cima do Graphics, inclusive foi de lá q eu vim… O viniGodoy é um dos moderadores desse site aqui, já sou fã…
Obrigado pela ajuda <3
T
Solucao aceita
TerraSkilll1 like
Como disse, sem saber o que você tentou fazer, fica difícil saber o que está causando esse problema no seu código.
Veja um exemplo de JFrame com um JPanel personalizado com um botão:
importjavax.swing.*;importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.event.*;publicclassTestePaintextendsJFrame{PainelJogopainel=newPainelJogo();JButtonbotao=newJButton("Clique em mim");publicTestePaint(){super("Janela com botao e paintComponent num JPanel");setSize(500,500);setLocationRelativeTo(null);setDefaultCloseOperation(EXIT_ON_CLOSE);setLayout(newBorderLayout());getContentPane().add(painel,BorderLayout.CENTER);painel.setLayout(newBorderLayout());botao.setBackground(Color.GREEN);painel.add(botao,BorderLayout.SOUTH);botao.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){JOptionPane.showMessageDialog(null,"Fui clicado!");}});}publicstaticvoidmain(String[]args){finalTestePaintjanela=newTestePaint();java.awt.EventQueue.invokeLater(newRunnable(){@Overridepublicvoidrun(){janela.setVisible(true);}});}}
Você realmente precisa dar uma estudada em como funciona o Java Swing para entender como algumas coisas funcionam, por isso foquei em citar esses materiais.
Abraço.
A
ARandomProgrammer
Vc é um deus… vlw msm <3
Vou ter q estudar bastante mesmo. Java é muito grande