Visual – Controles – RadioButton, Events, getStateChange – Java

Publicado: 12 de março de 2014 em Java

RadioButton

Em computação, um botão de opção ou botão de rádio (radio button) é um elemento de interface gráfica (isto é um componente widget) com dois estados: selecionado (ativado) e não-selecionado (desativado), quando o usuário pressiona um botão do mouse ou uma tecla como Espaço. Botões de opção são usados num grupo para apresentar um conjunto limitado de escolhas (duas ou mais) que são mutuamente exclusivas. Deste maneira, quando o usuário seleciona um outro botão no mesmo conjunto, o outro botão já selecionado torna-se automaticamente desativado.

Exemplo:

Neste exemplo criamos um grupo de botões de radio que efetua as 4 operações básicas da matemática, usando o evento de item e a verificação do seu estado.

Java

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Radio extends JPanel implements ItemListener, ActionListener {

	// Declara Objetos
	JLabel rotulo;

	JRadioButton soma;
	JRadioButton subtrai;
	JRadioButton multiplica;
	JRadioButton divide;

	JLabel rotulo1;
	JLabel rotulo2;

	JTextField campo1;
	JTextField campo2;

	JButton botao;

	JTextArea texto;

	double total;

	public Radio() {

		// Cria novos Objetos

		rotulo = new JLabel("Escolha um RadioButton ou Alt + A, B, C ou C:");

		soma = new JRadioButton("Soma");
		subtrai = new JRadioButton("Subtrai");
		multiplica = new JRadioButton("Multiplica");
		divide = new JRadioButton("Divide");

		rotulo1 = new JLabel("Numero");
		campo1 = new JTextField("0,00");
		rotulo2 = new JLabel("Numero");
		campo2 = new JTextField("0,00");

		botao = new JButton("OK");

		texto = new JTextArea(5, 20);

		ButtonGroup grupo = new ButtonGroup();

		grupo.add(soma);
		grupo.add(subtrai);
		grupo.add(multiplica);
		grupo.add(divide);

		// Seta atalho do teclado ex: ALT + A ou B ou C
		soma.setMnemonic(KeyEvent.VK_A);
		subtrai.setMnemonic(KeyEvent.VK_B);
		multiplica.setMnemonic(KeyEvent.VK_C);
		divide.setMnemonic(KeyEvent.VK_D);

		// Seta Evento
		soma.addItemListener(this);
		subtrai.addItemListener(this);
		multiplica.addItemListener(this);
		divide.addItemListener(this);
		botao.addActionListener(this);

		// Seta texto não editavel
		texto.setEditable(false);

		// Cria barras de rolagem
		JScrollPane barra = new JScrollPane(texto);

		// Seta restrições para barra de rolagem
		GridBagConstraints c = new GridBagConstraints();
		c.gridwidth = GridBagConstraints.REMAINDER;

		// Seta tamanho do preenchimento para as barras
		c.fill = GridBagConstraints.BOTH;
		c.weightx = 1.0;
		c.weighty = 1.0;

		// cria paineis
		JPanel painel1 = new JPanel();
		JPanel painel2 = new JPanel();
		JPanel painel3 = new JPanel();
		JPanel painel4 = new JPanel();

		// adiciona componentes nos paineis
		painel1.add(rotulo);
		painel2.add(soma);
		painel2.add(subtrai);
		painel2.add(multiplica);
		painel2.add(divide);

		painel3.add(rotulo1);
		painel3.add(campo1);
		painel3.add(rotulo2);
		painel3.add(campo2);
		painel3.add(botao);

		painel4.add(barra, c);

		// adiciona painel e centraliza
		add(painel1, BorderLayout.CENTER);
		add(painel2, BorderLayout.CENTER);
		add(painel3, BorderLayout.CENTER);
		add(painel4, BorderLayout.CENTER);

	}

	public void itemStateChanged(ItemEvent e)

	{
		// Evento de mudança de estado do checkbox

		// captura item celecionado
		Object fonte = e.getItemSelectable();
		int estado = e.getStateChange();

		// coloca o cursor no final do texto para efeito de rolagem
		texto.setCaretPosition(texto.getDocument().getLength());

		// Seleciona o estado sem esta condição o a rotina executa duas vezes
		// A primeira quando o item é selecionado a segunda quando é deselecionado
		// estados: Selected = selecionado - Deselected - deselecionado
		if (estado == ItemEvent.SELECTED) {

			// Define click no checkbox
			if (fonte == soma) {
				texto.append("Soma:" + "\n");
			}

			if (fonte == subtrai) {
				texto.append("Subtração:" + "\n");
			}

			if (fonte == multiplica) {
				texto.append("Multiplicação:" + "\n");
			}

			if (fonte == divide) {
				texto.append("Divisão:" + "\n");
			}

		}

	}

	public static void main(String[] args) {

		// adicona thread do swing
		javax.swing.SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run() {

				// cria formulario
				JFrame formulario = new JFrame("Desenvolvimento Aberto");
				formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

				// monta paineis de componetes no frame
				JComponent componentes = new Radio();
				componentes.setOpaque(true);

				// Seta propriedades do frame
				formulario.setContentPane(componentes);
				formulario.setSize(400, 250);
				formulario.setVisible(true);
			}
		});
	}

	// Evento do botão - OnClick
	public void actionPerformed(ActionEvent e) {

		// coloca o cursor no final do texto para efeito de rolagem
		texto.setCaretPosition(texto.getDocument().getLength());

        // Verifica o objeto selecionado e efetua a operação correspondente

		//Soma
		if (soma.getSelectedObjects() != null) {
			total = Double.parseDouble(campo1.getText())
					+ Double.parseDouble(campo2.getText());
			texto.append(campo1.getText() + " + " + campo2.getText() + " = "
					+ String.valueOf(total) + "\n");
		}

		// Subtração
		if (subtrai.getSelectedObjects() != null) {
			total = Double.parseDouble(campo1.getText())
					- Double.parseDouble(campo2.getText());
			texto.append(campo1.getText() + " - " + campo2.getText() + " = "
					+ String.valueOf(total) + "\n");
		}

		// Multiplicação
		if (multiplica.getSelectedObjects() != null) {
			total = Double.parseDouble(campo1.getText())
					* Double.parseDouble(campo2.getText());
			texto.append(campo1.getText() + " * " + campo2.getText() + " = "
					+ String.valueOf(total) + "\n");
		}

		// Divisão
		if (divide.getSelectedObjects() != null) {
			total = Double.parseDouble(campo1.getText())
					/ Double.parseDouble(campo2.getText());
			texto.append(campo1.getText() + " / " + campo2.getText() + " = "
					+ String.valueOf(total) + "\n");
		}
	}

}
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s