Duvida no jRadioButton

4 respostas
W

Ola gente to com uma duvida no jRadionButton e eu escolho um Masculino e um femenino quando eu aperto no Masculino salva beleza no banco e aperto no Femenino salva também mais eu nao sei como se o cliente aperta em uma opção e não pode apertar no outro e quando salvar desabilitar o jRadioButton por que quando eu faço isso so sai o nome do lado não apaga dentro do jRadioButton.

if(jMasculino.isSelected()){
                c1.setSexo(jMasculino.getText());
            }
            if(jFemenino.isSelected()){
                c1.setSexo(jFemenino.getText());

Esse e codigo que ta salvando no banco e dentro que faço essas coisa que eu quero fazer ?
Muito Obrigado.

4 Respostas

davidbuzatto

Use um ButtonGroup para agrupar seus JRadioButtons.

[]'s

will702

Você deve relacionar todos os JRadioButtons.Pode fazer isso usando um ButtonGroup para relacionar os JRadioButtons.
Primeiramente importe a classe javax.swing.ButtonGroup.o código todo fica assim

private JRadioButton JRadioButton1;//italicBoldJRadioButton da classe
        private JRadioButton JRadioButton2;//javax.swing.JRadioButton
        private ButtonGroup radioGroup;//Cria o objeto ButtonGroup

        radioGroup = new ButtonGroup();//Constrói o ButtonGroup
        radioGroup.add(JRadioButton1);//e relaciona todos os
        radioGroup.add(italicJRadioButton2);//JRadioButtons
W

Valeu gente resolvido muito obrigado :slight_smile:

discorpio

Boa tarde a todos.

Sinceramente eu acho esse componente ButtonGroup muito pobre de recursos, então eu resolvi criar o meu próprio componente ButtonGroup que além de agrupar, cria também automaticamente RadioButtons dentro de um JPanel e ainda coloca o título.

Eu o implementei em duas classes, a primeira para diagramar os RadioButtons dentro do JPanel, e a segunda cria os RadioButtons dentro do JPanel, vamos a elas:

// Classe de diagramação de componentes  
import java.awt.Color;   
import java.awt.Component;   
import java.awt.Dimension;   
import java.awt.Font;   
import java.awt.GridBagConstraints;   
import java.awt.GridBagLayout;   
import java.awt.Insets;   
import javax.swing.BorderFactory;   
import javax.swing.border.Border;   

public class ContentLayout extends JPanel {   
  
        // Definição do Layout e constraints do Layout   
        private GridBagLayout layout;   
        private GridBagConstraints constraints;   
        private Dimension size;   
        public final int horizontal = GridBagConstraints.HORIZONTAL;   
        public final int both = GridBagConstraints.BOTH;   
  
        //Construtor do objeto (como o mesmo nome da classe)   
        public ContentLayout(){   
             layout = new GridBagLayout();   
             setLayout(layout);   
             constraints = new GridBagConstraints();   
             constraints.weightx = 0;   
             constraints.weighty = 0;   
             constraints.insets = new Insets(5,5,5,5);   
        }   
  
        // Método que acrescenta o componente no panel   
        public void addComponent(Component comp, int row, int column, int width, int height, int fill){   
             constraints.fill = fill;   
             constraints.gridx = column;   
             constraints.gridy = row;   
             constraints.gridwidth = width;   
             constraints.gridheight = height;   
             layout.setConstraints(comp, constraints);   
             add(comp);   
        }   
  
        // Método que cria uma borda quadrada, indicando cor e espessura da borda   
        public void setBorder(Color color, int thickness){   
            super.setBorder(BorderFactory.createLineBorder(color, thickness));   
        }   
        
        // Método que coloca um título no panel sem borda   
        public void setTitleBorder(String title){   
            setBorder(BorderFactory.createTitledBorder(title));   
        }   
        
        // Método que coloca um título no panel com borda   
        public void setTitleBorder(String title, Color color, int thickness){   
            setBorder(BorderFactory.createLineBorder(color, thickness));   
            setBorder(BorderFactory.createTitledBorder(getBorder(), title));   
        }   
  
        // Método que define a font de todos os componentes inseridos   
        public void setFontAllComp(String type, int size){   
            Font font = new Font(type,0,size);   
            for (int i=0; i<getComponentCount(); i++){   
                  getComponent(i).setFont(font);   
            }   
        }  
}

// Classe do componente RadioButton
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JRadioButton;

public class GroupRadioButton extends ContentLayout implements MouseListener {
    
   private Integer row, col, columns; 

   public GroupRadioButton(){
        super();
        row = 0;
        col = -1;
        columns = 1;
   } 

   public GroupRadioButton(Integer columns){
        super();
        row = 0;
        col = -1;
        this.columns = columns;
   }  

  public void addButton(String radiotext) {
        col++;
        if (col > (getColumns()-1)){
                col = 0;
                row++;
        }
        JRadioButton radiobtn = new JRadioButton(radiotext);
        radiobtn.setActionCommand(radiotext);
        radiobtn.addMouseListener(this);
        addComponent(radiobtn,row,col,1,1,horizontal);
   } 

   public void addButtons(String[] radiostext){
        for (int i = 0; i < radiostext.length; i++){
                addButton(radiostext[i]);
        }
   } 

   public Integer getButtonCount(){
        return getComponentCount();
   } 

   public void clearSelection(){
        for (int i = 0; i < getComponentCount(); i++){
                getRadioButton(i).setSelected(false);
        }
   }
        
   public Integer getSelected(){
        Integer sel = -1;
        for (int i = 0; i < getComponentCount(); i++){
                if (getRadioButton(i).isSelected()){
                    sel = i;
                    break;
                }
        }
        return sel;
   } 

   public void setSelectedIndex(int index){
        clearSelection();
        if (index >= 0){
            getRadioButton(index).setSelected(true);
        }
   }  

  public void setSelectedItem(String radioname){
        clearSelection();
        for (int i = 0; i < getComponentCount(); i++){
             if (radioname.equals(getRadioButton(i).getActionCommand())){
                   getRadioButton(i).setSelected(true);
                   break;
             }
        }
  }  

  public Integer getColumns() {
        if (columns <= 0) columns = 1;
        return columns;
  } 

   public void setColumns(Integer columns) {
        this.columns = columns;
   } 

   public JRadioButton getRadioButton(int index){
        if (index >= 0){
                return (JRadioButton)getComponent(index);
        } else {
                return null;
        }
    }

    public void addButtonActionListener(ActionListener listen){
                for (int i = 0; i < getComponentCount(); i++){
                     getRadioButton(i).addActionListener(listen);
                }
    }

    public Boolean isSelected(){
        if (getSelected() >= 0){
                return true;
        } else {
                return false;
        }
    } 

   @Override
        public void setEnabled(boolean enabled) {
        super.setEnabled(enabled);
        for (int i = 0; i < getComponentCount(); i++){
                getRadioButton(i).setEnabled(enabled);
        }
    } 

   public void mouseClicked(MouseEvent e) {
        // Evento não utilizado porém precisa ser declarado
   } 

   public void mousePressed(MouseEvent e) {
        if (isEnabled()) clearSelection();
   }

   public void mouseReleased(MouseEvent e) {
        if (isEnabled()){
                JRadioButton btn = (JRadioButton)e.getSource();
                btn.setSelected(true);
        }
   } 

   public void mouseEntered(MouseEvent e) {
        // Evento não utilizado porém precisa ser declarado
   } 

   public void mouseExited(MouseEvent e) {
        // Evento não utilizado porém precisa ser declarado
   }
}

Repare que com o GroupRadioButton, voce não precisa nem criar os RadioButtons, basta voce acrescentar os nomes dos mesmos um a um no método addButton(String radiotext) ou todos de uma vez atraves de um vetor de strings no método addButtons(String[] radiostext). Voce pode instanciá-lo de duas formas, a seguir:

// Instancição normal com uma coluna padrão
GroupRadioButton grc = new GroupRadioButton(); 

// Ou especificando colunas
GroupRadioButton grc = new GroupRadioButton(3)

// Ou instanciando padrão e depois setando as colunas
GroupRadioButton grc = new GroupRadioButton(); 
grc.setColumns(3);

Vamos a um exemplo prático:

import componentes.GroupRadioButton;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class FramePrincipal extends JFrame implements ActionListener {

        private JButton btndesmarcar;
        private JTextField text;
        private GroupRadioButton grc;

        public FramePrincipal(){
            setLayout(new BorderLayout());
            String[] radiotxt = {
                "MasterCard",
                "Visa",
                "Cheque",
                "Débito automático",
                "Dinheiro",
                "Boleto bancário",
                "Reserva"
            };
            grc = new GroupRadioButton(4);
            grc.setTitle("Condição de pagamento", Color.BLUE, 2);
            grc.addButtons(radiotxt);
            grc.addButtonActionListener(this);
            add(grc, BorderLayout.NORTH);
            btndesmarcar = new JButton("Desmarcar");
            btndesmarcar.addActionListener(this);
            add(btndesmarcar, BorderLayout.CENTER);
            text = new JTextField();
            add(text, BorderLayout.SOUTH);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setLocationRelativeTo(null);
            pack();
            setVisible(true);
        }

        public void actionPerformed(ActionEvent e) {
            if (e.getSource()==btndesmarcar){
                grc.clearSelection();
                text.setText("");
            } else {
                text.setText(e.getActionCommand());
            
             }
        }

}

Rode esse programa e veja se tem utilidade pra você.

Criado 13 de março de 2011
Ultima resposta 14 de mar. de 2011
Respostas 4
Participantes 4