• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

joaorosa

[resolvido] mostrar uma imagem numa interface

4 mensagens neste tópico

boas malta...

eu tenho de desenvolver um pequeno jogo em java, a nível académico. basicamente quando se carrega num botão, ele gera 3 números que equivalem a x de pontos, mas irá mostrar uma imagem em vez do número. o jogo chama-se ganancioso. ainda estou no ínicio, e o meu problema prende-se com o facto de não conseguir mostrar as imagens quando carrego no botão jogar...

aqui fica o código:

//classe ganancioso
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Ganancioso extends JFrame {
  public static int nPlayers = 0, nJogador = 1, pJ1 = 0, pJ2 = 0, pJ3 = 0, pJ4 = 0;
  public static JTextField qJogadores = new JTextField(2);
  public static JButton b1, b2, bJogadores;
  public static Icon as = new ImageIcon("imgs/as.png");
  public static Icon rei = new ImageIcon("imgs/rei.png");
  public static Icon dama = new ImageIcon("imgs/dama.png");
  public static Icon valete = new ImageIcon("imgs/valete.png");
  public static Icon dez = new ImageIcon("imgs/dez.png");
  public static Icon nove = new ImageIcon("imgs/nove.png");
  public static Graphics g;
  JPanel p1 = new JPanel();
  public static JPanel p2 = new JPanel();
  JPanel p3 = new JPanel();
  JPanel p4 = new JPanel();
  
  public Ganancioso (String nome){
    Container framePane = this.getContentPane();
    
    framePane.setLayout(new BorderLayout());
    p3.setLayout(new GridLayout(5,1));
    p4.setLayout(new FlowLayout(FlowLayout.CENTER));
    
    p1.add(new Label("Jogador nº" + nJogador));
    
    p3.add(new Label("Pontuação"));
    p3.add(new Label("Jogador nº1: " + pJ1));
    p3.add(new Label("Jogador nº2: " + pJ2));
    p3.add(new Label("Jogador nº3: " + pJ3));
    p3.add(new Label("Jogador nº4: " + pJ4));
    
    b1 = new JButton("Jogar");
    p4.add(b1);
    b2 = new JButton("Escrever");
    p4.add(b2);
    
    framePane.add(p1, BorderLayout.NORTH);
    framePane.add(p2, BorderLayout.CENTER);
    framePane.add(p3, BorderLayout.EAST);
    framePane.add(p4, BorderLayout.SOUTH);
    this.setSize(400,350);
    this.setVisible(true);
    
    ActionListener lisJogadores = new JogadoresListener();
    b1.addActionListener(lisJogadores);
    b2.addActionListener(lisJogadores);
  }
  public static void rePinta(){
    for(int i=0;i<3;i++){
      switch(JogadoresListener.d[i]){
        case 1: as.paintIcon(p2, g, 5, 5);
        break;
        
        case 2: rei.paintIcon(p2, g, 5, 5);
        break;
        
        case 3: dama.paintIcon(p2, g, 5, 5);
        break;
        
        case 4: valete.paintIcon(p2, g, 5, 5);
        break;
        
        case 5: dez.paintIcon(p2, g, 5, 5);
        break;
        
        case 6: nove.paintIcon(p2, g, 5, 5);
        break;
      }
    }
  }
  public static void main (String[] args){
    Ganancioso g = new Ganancioso("Jogo do Ganancioso");
  }
}

//classe jogadoresListener
import java.awt.*;
import java.awt.event.*;

public class JogadoresListener implements ActionListener {
  public static int[] d = new int[3];
  public void actionPerformed(ActionEvent e) {
    if(e.getSource().equals(Ganancioso.b1))
      lancaDados();
    else if(e.getSource().equals(Ganancioso.b2))
      aponta();
  }
  public static void lancaDados(){
    for(int i=0;i<d.length;i++){
      d[i] = (int)Math.round(Math.random()) * 5 + 1;
    }
    Ganancioso.rePinta();
    if(d[0] == 6 && d[1] == 6 && d[2] == 6)
      reiniciarScore();
  }
  public static void aponta(){
  }
  public static void reiniciarScore(){
  }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aí uma salganha que nem te digo. Atributos públicos que deviam ser privados, métodos estáticos que só fazem sentido ser de instância, o mesmo listener adicionado a em dois sítios para fazer duas coisas diferentes... enfim. Respondendo simplesmente à tua pergunta, a forma mais fácil de colocares uma imagem é dentro de uma JLabel. Colocas um JLabel no centro, retiras-lhe o texto e alternas o ícone dela conforme precises.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

agora no inicio é normal esta salgalhada... mas que método é que posso utilizar para alterar o icone, conforme o número?

cps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora