JRadioButton

11 respostas
gqferreira

Olá pessoal!
Estou com uma duvidazinha… Não encontrei pelo “BUSCA”…

Como mudar a orientação do texto de um JRadioButton? direita, esquerda, cima, baixo…
Outra: Quando você deixa um JRadioButton no estado enable(false) ele muda de cor, fica meio acinzentado, como deixa-lo enable(false) sem que isso ocorra? Sei como fazer isso com JTextField mas não com JRadioButton…

Valeu pessoal! :thumbup: :thumbup: :thumbup:

11 Respostas

douglas_vidotto

e aí gqferreira?? Tudo bem?

Você pode usar o método “setHorizontalTextPosition(SwingConstants.algumaDirecao)” para mudar a posiçao do texto em relaçao ao botao

ex:

JRadioButton button = new JRadioButton("Teste"); button.setHorizontalTextPosition(SwingConstants.LEFT);//Deixa o texto a esquerda do botao button.setHorizontalTextPosition(SwingConstants.RIGHT);//Deixa o texto a direita do botao

Quanto ao enable(false) eu não sei se entendi oque você quer, mas o objetivo do botão ficar dessa maneira é para deixar claro para o usuário que não é possível clicar ali

gqferreira

Tudo bem Douglas…
E você??

Bom amigo… dá uma olhada nessa imagem.
Quero buscar alguns dados do usuário e mostrar em um mini formulário. Para mostrar se o usuário é casado ou não resolvi usar JRadioButton porque achei feio colocar um JTextField.
Para os JTextField’s eu consegui “mascara-los” para faze-los parecer “normal”, mas eles estão em editable(false). Com o radioButton eu não consigo fazer o mesmo. Nesse print eles não estão boloqueados, mas quando os bloqueio, ficam feios…acinzentados como todo componente bloqueado…como deixa-lo “normal”???

gqferreira

Ops… :oops: :oops: :oops: :oops:
Esqueci da imagem :lol: :lol: :lol:

douglas_vidotto

Aqui tudo blz tb..

Tem um jeito de fazer. Você pode fazer o seguinte. Você pode colocar na escuta do evento o método setSelected(false). Aí dessa maneira toda vez que o usuário clicar no botão, ele se auto desseleciona(nem sei se essa palavra existe, hehehe :? ), dando a impressao que o botao nao pode ser selecionado

Ficaria algo assim:
JRadioButton button = new JRadioButton("Teste");
button.addItemListener(this); //No caso de sua própria classe ser a ouvinte do evento

//etc

//Aqui você sobrescreve o método itemStateChanged
public void itemStateChanged(ItemEvent event)
{
button.setSelected(false);
}

Eu fiz um teste aqui e deu certo. Acho que ficou do jeito que voce quer, espero ter ajudado :D

Abraços!

gqferreira

Não entendi amigo...

Quando disparar o evento os JRadioButton's deve ficarem des-selecionados??(des-selecionados= :hunf: :? :hunf: Deve estar errado também) para (tentar) ajudar:
public static void busca(String username)
	{
		String nome,idade,casado,data;
		try
		{
			String sql = "select * from login where user = '"+username+"'";
			if (BD.getConnectionAccess())
			{
				BD.setResultSet(sql);
				BD.resultSet.next();
				nome = BD.resultSet.getString(3);
				idade = BD.resultSet.getString(4);
				casado = BD.resultSet.getString(5);
				data = BD.resultSet.getString(14);

				if (casado.equals("Sim"))
				{
					Remover.rbSim.setSelected(true);
					Remover.rbNao.setSelected(false);
				}

				else
				{
					Remover.rbNao.setSelected(true);
					Remover.rbSim.setSelected(false);
				}
				Remover.tfDataEntrada.setText(data);
				Remover.tfIdade.setText(idade);
				Remover.tfNome.setText(nome);
				Remover.tfUSernameInfo.setText(username);
				BD.resultSet.close();

			}	
		}
		catch(SQLException ex)
		{
			JOptionPane.showMessageDialog(null,"Esse username não é cadastrado no sistema", "Username inválido", JOptionPane.WARNING_MESSAGE);
			ex.printStackTrace();
			
		}
Quando clico no botão localizar, o evento invoca esse método de outra classe que preenche o mini formulário...
douglas_vidotto

Hehe, não sei se entendi direito... vamos lá...

Você gostaria que o usuário não pudesse clicar no radioButton "sim" e "não" da figura?? Só que para deixar o botão desabilitado ele fica aquele cinza. Então você gostaria que ele ficasse desabilitado só que de forma normal, certo? Do jeito que te passei, o botão ainda fica "selecionável", mas no tratamento do evento ele des-seleciona o botão, dando a impressão que ele não pode ser selecionado. Vou deixar o código do teste que fiz aqui para você dar uma olhada. O botão deve ficar desabilitado até que o usuário realize determinadas ações para depois habilitá-lo?? Se for isso, acredito que você deva fazer uma verificação no itemStateChanged. Se o usuário ainda não completou todas as ações, então dispara o setSelected(false). Se ele já terminou, aí você trata o evento normalmente:

public void itemStateChanged(ItemEvent event){

if(aindaTemCoisasAFazer)
  button.setSelected(false)
else
   //faz as coisas que o botao tem que fazer
}

Abaixo o código de como fica o botão:

import javax.swing.*;
import java.awt.event.*;

public class TesteBotao implements ItemListener {
    
    private JFrame frame;
    private JRadioButton button;
    
    public static void main(String [] args){
        
       TesteBotao tb = new Identificadores();
       tb.go();
    }
      
    public void go(){
        frame = new JFrame();
        button = new JRadioButton();
        button.setText("test");
        button.setHorizontalTextPosition(SwingConstants.LEFT);
        button.addItemListener(this);
        frame.getContentPane().add(button);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(100,100);
        frame.setVisible(true);
    }

   public void itemStateChanged(ItemEvent event){
        
        button.setSelected(false);
    }
  
    
}

Se não for isso, passa a função dos seus botões de rádio para eu ter uma idéia mais clara do que eles fazem e o porque e até quando ele devem ficar desabilitados. Assim acho que posso ter uma ideia melhor.

Abraços!

gqferreira

Os botões de rádio nunca ficarão “selecionáveis” e nunca terá nem um evento assoiciado a ele. Eles apenas servem para mostrar um resultado >> casado ou solteiro.

É aquele método lá que os preenche de acordo com o que consta no banco de dados.

douglas_vidotto

entendi…bom, para cada botao voce pode fazer mais ou menos oque fez nos seus metodos:

//para o botao sim: if(casados.equals("sim") button.setSelected(true); else button.setSelectec(false);

//Para o botao nao a mesma coisa so que ao contrario if(casados.equals("sim")) button.setSelected(false); else button.setSelected(true);

sendo que estas comparaçoes estejam dentro do tratamento do evento, dessa forma seus valores nunca irão mudar…

gqferreira

sim…mas isso eu já fiz… o problema é que dessa forma você está definindo quem estará false ou true mas o usuário poderá alterar com o mouse, então bloqueio ele fica acinzenta, esse é o problema = acinzentado. Como fazer ele ficar com a aparencia de botão selecionável, liberado… estando bloqueado…

douglas_vidotto

É que eu acho que não fui claro. Compila esse código abaixo e veja como ficaram os botões. Da uma olhada nos tratamentos dos eventos, acho que com o código é melhor do que eu falando.

//Compila e roda esse programa. Os botões tem que ser assim?
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class TestaBotoes {
    
    private JFrame frame;
    private JRadioButton noButton;
    private JRadioButton yesButton;
    private String casados;
    public static void main(String [] args){
        
       TestaBotoes tb = new TestaBotoes();
       tb.go();
    }
      
    public void go(){
        casados = "sim"; //Imagine que tenha buscado um "sim" no banco
        frame = new JFrame();
        
        noButton = new JRadioButton();
        noButton.setText("Nao");
        noButton.setHorizontalTextPosition(SwingConstants.RIGHT);
        noButton.addItemListener(new NoButtonHandler());
        frame.getContentPane().add(noButton, BorderLayout.WEST);
        
        yesButton = new JRadioButton("Sim");
        yesButton.setSelected(true); //Isso você ja tem no seu código
        yesButton.setHorizontalTextPosition(SwingConstants.RIGHT);
        yesButton.addItemListener(new YesButtonHandler());
        frame.getContentPane().add(yesButton, BorderLayout.EAST);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(100,100);
        frame.setVisible(true);
    }

   //Para deixar o código do jeito que quer, voce tem que fazer isso aqui
   private class YesButtonHandler implements ItemListener{
       public void itemStateChanged(ItemEvent event){
           if(casados.equals("sim"))
               yesButton.setSelected(true);
           else
               yesButton.setSelected(false);
       }
   }//fim da classe yesButton
   
   private class NoButtonHandler implements ItemListener{
       public void itemStateChanged(ItemEvent event){
           if(casados.equals("nao"))
               noButton.setSelected(true);
           else
               noButton.setSelected(false);
       }
   }
}
gqferreira

Valeu Douglas!!! Agora pudi entender e funcionou!

Valeu! :thumbup: :thumbup: :thumbup:

Criado 31 de janeiro de 2009
Ultima resposta 1 de fev. de 2009
Respostas 11
Participantes 2