Controlando Imagens através de JRadioButton

11 respostas
alissonlw

Opa eae galera..
Bem sou novo aqui no Fórum, andei olhando por cima, e não cheguei a achar alguma tópico que esclareca especificamente minha dúvida...

Tenho que fazer um classe na qual, eu tenha 3 RadioButtons, onde cada um é um país...
Por ex:
Brasil
Japão
Itália..

Continuando, conforme eu seleciono um país tenque exibir a bandeira do mesmo....
Ai vem a questão não consigo fazer o JRadio exibir a imagem...
Ja tentei de várias maneiras, andei pesquisando alguns métodos na net, mais não consegui, queria ver se alguém pode me dar uma ajuda...
Segue o código de como estou fazendo...

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
    public class TelaExUm extends JFrame{
        public TelaExUm(){
        setTitle("EXERCÍCIO 1");
        setBounds(250,140,600,600);
        setLayout(null);
        
        ButtonGroup bpExercicioUm = new ButtonGroup();
        final JRadioButton rbBrasil = new JRadioButton("Brasil");
        JRadioButton rbItalia = new JRadioButton("Italia");
        JRadioButton rbJapao = new JRadioButton("Japao");

        bpExercicioUm.add(rbBrasil);
        bpExercicioUm.add(rbItalia);
        bpExercicioUm.add(rbJapao);
        
        rbBrasil.setBounds(45,50,100,25);
        rbItalia.setBounds(45,260,100,25);
        rbJapao.setBounds(45,460,100,25);
        
        ImageIcon Brasil = new ImageIcon("Brasil");
        JLabel lbBrasil = new JLabel(Brasil);
        lbBrasil.setBounds(50,50,150,50);
  
        add(rbBrasil);
        add(rbItalia);
        add(rbJapao);

        setVisible(true);
    }
}
Agradeço desde já!

11 Respostas

samirrolemberg

cria um quarto componente (um jlabel) que servirá apenas para a exibição de uma imagem.

use o itemStateChanged (implementando no seu radio) para quando houver uma mudança para um radio especifico vc trocar a imagem desse jlabel pela imagem que vc quer.

alissonlw

Haveria possibilidade de você esclarecer um pouco melhor? Se possível exemplificar?
Não consegui entender…
Grato

samirrolemberg

vamos denovo.

vc tera 3 radios e 1 label.

nesse label todos os radios (quando selecionados) irão alterar o conteúdo do label pela imagem correspondente ao radio.

pra facilitar implemente o itemStateChanged nos seus Radios. assim toda vez que o usuario selecionar uma opção vc muda o conteudo do label com a imagem que vc quer.

//isto é o que vc implementa em cada radio
			botaoRadio1.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {
                        //aqui vc implementa a mudança da imagem - com a imagem correspondente que vc quer
                                   meuLabel.setText(botaoRadio1.getText());
				}
			});

nesse exemplo o radio selecionado irá escrever o seu texto em um label.

alissonlw

Bem, tenho certeza que estou me perdendo na hora de informar o local da imagem, e onde busca-lá, fiz desse jeito e não apontou erro, simplesmente não exibiu a imagem?
Onde estaria o erro?
Grato

final ImageIcon Brasil = new ImageIcon("C:\brasil.jpg");
        final JLabel lbImagem = new JLabel();
        lbImagem.setBounds(50,50,150,50);
        
        rbBrasil.addItemListener(new java.awt.event.ItemListener() {   
            public void itemStateChanged(java.awt.event.ItemEvent e) {   
                lbImagem.setIcon(Brasil);
            }
        });
alissonlw

Lamento dizer, mais o principal foco é puxar a imagem e não setar o texto, continuo sem resolução ainda, quero saber como jogar a imagem, onde colocar o diretório ou coisa assim…
Vlw

samirrolemberg

então subentende-se que: se funciona com texto também funciona com a imagem.

nem sempre vc vai encontrar a solução pra tudo de cara num forum cara. mas o mais simples já fizemos.

troca o metodo de texto por um metodo que seta a imagem aí.

eu realmente tenho boa vontade pra parar aqui e tentar ajudar.

só não tenho tempo pra fazer isso que vc tá pedindo.

quer uma dica: usa uma ide aí (netbeans ou eclipse) e adiciona uma foto nesse label pela ide.

copia o codigo de adição pra dentro do evento do radio button.

um pouquinho de malandragem faz bem tb!

outra coloca a imagem dentro de um pacote ou cria no projeto um local pra adicionar imagens. e não linka ela direto do “c:”. já que se a aplicação mudar de lugar ou o diretorio vc vai ter problemas com a imagem.

alissonlw

Bem ainda to me debatendo pra faze a imagem aparece, eu entendi seu raciocinio de que se texto funciona imagem tbm, pensei a mesma coisa, porém ainda nao consegui resolver, vou ver outra maneiras, de qualquer forma vlw a ajuda…
Caso eu consigo eu posto como consegui…

samirrolemberg

lembrei de um pronto aqui. tenta isso.

meuLabel.setIcon(new ImageIcon(getClass().getResource("/imagens/minhaImagem.png")));
alissonlw

Opa, já deu algum sinal, porém deu um erro na hora em que clico no RadioButton Brasil, agora postando, acho que me dei conta do motivo, vou dar uma verificada…
Grato

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at javax.swing.ImageIcon.<init>(ImageIcon.java:205) at TelaExUm$1.itemStateChanged(TelaExUm.java:30) at javax.swing.AbstractButton.fireItemStateChanged(AbstractButton.java:2046) at javax.swing.AbstractButton$Handler.itemStateChanged(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireItemStateChanged(DefaultButtonModel.java:455) at javax.swing.JToggleButton$ToggleButtonModel.setSelected(JToggleButton.java:272) at javax.swing.ButtonGroup.setSelected(ButtonGroup.java:164) at javax.swing.JToggleButton$ToggleButtonModel.setSelected(JToggleButton.java:254) at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:289) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6504) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6269) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4860) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2713) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:680) at java.awt.EventQueue$4.run(EventQueue.java:678) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

samirrolemberg

provavelmente ele não está achando o caminho da imagem.

testa com o caminho da unidade mesmo pra ver se está funcionando:

meuLabel.setIcon(new ImageIcon(getClass().getResource("c:\\minhaImagem.png")));
alissonlw

Opa deu certo…
Vlw

Criado 5 de outubro de 2011
Ultima resposta 17 de out. de 2011
Respostas 11
Participantes 2