Arquivo da categoria ‘Java’

A classe JPasswordField, uma subclasse de JTextField, fornece campos de texto especializados para a entrada de senha. Por razões de segurança, um campo de senha não mostra os caracteres que o usuário digita. Em vez disso, o campo apresenta um outro caractere, como um asterisco ‘*’. Como outra medida de segurança, um campo de senha armazena o seu valor como um array de caracteres, e não como uma string.

JOptionPane

Torna mais fácil abrir uma caixa de diálogo padrão que solicita aos usuários para um valor ou informa os de algo.

ShowMessageDialog

Diz o usuário sobre algo que aconteceu.

Aspas Simples e Aspas Duplas

Em algumas linguagens de programação usa-se aspas simples para escrever textos literais para uma variável, outras linguagens usam aspas duplas. Em algumas linguagens modernas usa-se ambos os tipos de aspas. Em Java aspas duplas significam caracteres literais no formato String, aspas simples significam caracteres literais no formato Char. No exemplo abaixo a variável contendo a senha recuperada precisa ser uma array do tipo Char, tente colocar os caracteres em aspas duplas e verá o erro: String e Char não são tipos compatíveis, aspas simples transformam os literais em tipos Char suprimindo o erro do compilador.

password

Senha

 

Exemplo:

Neste exemplo criamos uma caixa de texto especifica para manipular senhas, e usamos seus recursos de validação para imprimir uma mensagem na tela para o usuário.

Java

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;


public class Senha implements ActionListener 

{   
	// Declara Componentes
	JFrame menssagem;
	JLabel rotulo;
	JPasswordField senha;
	JButton botao;
	
	// Cria painel com componentes
	public Container criaPainel()
	{
		JPanel painel = new JPanel(new BorderLayout());
		
		rotulo = new JLabel("Insira uma senha com 8 caracteres:");
		
		senha = new JPasswordField(8);
				
		botao = new JButton("Ok");
		botao.addActionListener(this);
		
		painel.add(rotulo, BorderLayout.PAGE_START);
		painel.add(senha, BorderLayout.CENTER);
		painel.add(botao, BorderLayout.PAGE_END);
		
		painel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
					
		return painel;
	}
	
    public void actionPerformed(ActionEvent arg0) {
    	
    	// Captura ação do botão
    	if (arg0.getSource() == botao )
    	{
    		// Recupera senha do componente de senha
    		char[] psenha = senha.getPassword();
    		
    		// Verifica a senha
    		if (verificaSenha(psenha)) 
    		{
    			// Manda uma menssagem usando um componente de caixa de dialogo
    			JOptionPane.showMessageDialog(menssagem, 
    					"A senha está correta!");
    		}
    		
    		else
    		{
    			JOptionPane.showMessageDialog(menssagem, 
    					"A senha está incorreta!");
    		}
    	}
				
	}
    
    public boolean verificaSenha(char[] psenha)
    {
		
    	// Verifica Senha
    	boolean correto = true;
    	
    	// Retorna senha de alguma fonte dentro de um array
    	// Neste caso nossa senha ficticia é fixa.
    	
    	// Aspas simples indicam que os literais são do formato char e não string
    	char [] rsenha = { 'd', 'a', 'a', 'b', 'e', 'r', 't', 'o' } ;
    	
    	if (psenha.length != rsenha.length) 
    	{
    		correto = false;
    	}
    	
    	else
    	{
    		for (int i = 0; i < rsenha.length; i++)
    		{
    			if (psenha[i] != rsenha[i])
    			{
    				correto = false;
    			}
    		}
    	}
    	
    	
    	return correto;
    	
    }
	
    // Cria GUI
	public static void criaGUI()
	{
		JFrame formulario = new JFrame("DA - JPassword");
		formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Senha pass = new Senha();
		
		formulario.setContentPane(pass.criaPainel());
		
		formulario.setSize(300,130);
		formulario.setVisible(true);
	}

	// Chama GUI
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			
			@Override
			public void run() {
				
				criaGUI();
				
			}
		});

	}

}

Visual – JPopUpMenu – Menu de Contexto – Java

Publicado: 28 de março de 2014 em Java

PopUpMenu

Um menu de contexto ou um menu pop-up é um menu em uma interface gráfica do usuário (GUI) que aparece em cima de interação do usuário, como uma operação de clique com o botão direito do mouse. Um menu de contexto oferece um conjunto limitado de opções que estão disponíveis no estado atual, ou contexto, do sistema operacional ou aplicativo. Normalmente, as opções disponíveis são as ações relacionadas com o objeto selecionado.

Os menus de contexto foram introduzidos no ambiente Smalltalk do computador Xerox Alto, onde eram chamados menus pop-up. O sistema operacional NEXTSTEP desenvolveu a ideia, incorporando a funcionalidade em que o botão do meio ou o da direita traziam o menu principal na posição do mouse, eliminando a necessidade de mover o ponteiro por toda a tela. Esse menu principal era vertical e mudava de acordo com o texto da operação do sistema.

Exemplo:

Neste exemplo criamos um objeto JPopUpMenu atrelado no contexto de um objeto JPanel e usamos eventos do mouse e do menu pop-up para lhe atribuir funcionalidades.

Java

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;

public class PopUp implements MouseListener 

{
	// Declara Componentes
	JLabel titulo;
	JLabel rodape;
	JPanel painel;
	JPopupMenu pMenu;
	JMenuItem item;
	
	// Declara variaveis
	String acao = "Você clicou no: ";
	
	// Declara painel
	public Container criaPainel()
	{
		// Cria painel
		painel = new JPanel(new BorderLayout()); 
		painel.setOpaque(true);
		
		// Cria Labels
		titulo = new JLabel("Clique com o botão direito no formulario");
		rodape = new JLabel(acao);
		
		// Cria layout
		painel.add(titulo, BorderLayout.PAGE_START);
		painel.add(rodape, BorderLayout.PAGE_END);
		
		// Cria popupmenu
		pMenu = new JPopupMenu();
		
		// Cria itens do menu e eventos
		item = new JMenuItem("Item 1");
		item.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0)
			{
				
				rodape.setText(acao + "Item 1");
				
			}
		});
		
		pMenu.add(item);
		
		item = new JMenuItem("Item 2");
		item.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0)
			{
				
				rodape.setText(acao + "Item 2");
				
			}
		});
		
		pMenu.add(item);
		
		// Cria separador
		pMenu.add(new JSeparator());
		
		item = new JMenuItem("Item 3");
		item.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0)
			{
				
				rodape.setText(acao + "Item 3");
				
			}
		});
		
		pMenu.add(item);
		
		painel.addMouseListener(this);
		
		
		return painel;
	}
	
	// Declara GUI
	public static void criaGUI()
	{
		// Cria formulario
		JFrame formulario = new JFrame("PopUp Menu");
		formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// Cria classe popupmenu
		PopUp menu = new PopUp();
		
		// Adiciona painel ao formulario
		formulario.setContentPane(menu.criaPainel());
		
		// Adiciona propriedades ao formulario
		formulario.setSize(400, 300);
		formulario.setVisible(true);
		
	}


	// Cria Eventos para o mouse

	@Override
	public void mouseClicked(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent arg0)
	{
		// verifica se o evento foi disparado no painel 
		if (arg0.getSource() == painel )
		{
			pMenu.show(painel, arg0.getX(), arg0.getY());
		}
		
	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	
	// Cria GUI
	public static void main(String[] args)
	{
	
		javax.swing.SwingUtilities.invokeLater(new  Runnable() {
			
			@Override
			public void run()
			{
				criaGUI();			
				
			}
		});

	}

}

Em computação e telecomunicações, um menu é uma lista de opções ou comandos apresentados a um operador por um computador ou sistema de comunicações . Os menus são, por vezes, hierarquicamente organizado, permitindo uma navegação através de diferentes níveis da estrutura do menu.  A seleção de um item do menu com uma seta irá expandi-lo, mostrando um segundo menu (o sub-menu) com opções relacionadas com a entrada selecionada. É possível adicionar outros componentes ao menu como ícones de imagem, um componente de botões de radio e até mesmos botões de cheque.

JMenubar

Uma implementação de uma barra de menu. Você pode adicionar objetos JMenu para a barra de menu para a construção de um menu.

JMenu

Uma implementação de um menu uma janela pop-up contendo JMenuItems que é exibido quando o usuário seleciona um item no JMenuBar. Um JMenu também pode conter JSeparators.

JSeparator

JSeparator fornece um componente de uso geral para a implementação de linhas divisórias mais comumente usado como um divisor entre os itens de menu que os divide em grupos lógicos.

JMenuItem

Uma implementação de um item em um menu. Um item de menu é essencialmente um botão em uma lista. Quando o usuário seleciona o botão, a ação associada ao item de menu é executado.

Exemplo:

Neste exemplo criamos um menu com seus sub-menus e seus respectivos eventos.

Java

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;

public class CriaMenu
{
	// Declara componentes
	JLabel texto;

	// Cria o menu completo
	public JMenuBar criaMenu()
	{
		// Declara componentes do menu genericamente
		JMenuBar barraMenu;
		JMenu menu;
		JMenu submenu;
		JMenuItem menuItem;

		// Cria barra do Menu
		barraMenu = new JMenuBar();

		// Cria menu
		menu = new JMenu("Menu 1");

		// Adiciona menu a barra
		barraMenu.add(menu);

		// Cria item do menu
		menuItem = new JMenuItem("Item do Menu 1", KeyEvent.VK_I);

		// Cria evento do item
		menuItem.addActionListener(new ActionListener()
		{

			@Override
			public void actionPerformed(ActionEvent e)
			{
				texto.setText("Você cliquou no item: 1 do menu 1");

			}
		});

		// Adiciona item ao Menu
		menu.add(menuItem);

	    // Repete processo para o segundo item
		menuItem = new JMenuItem("Item do Menu 2", KeyEvent.VK_T);
		menuItem.addActionListener(new ActionListener()
		{

			@Override
			public void actionPerformed(ActionEvent e)
			{
				texto.setText("Você cliquou no item: 2 do menu 1");

			}
		});

		menu.add(menuItem);

		// Repete processo para o terceiro item
		menuItem = new JMenuItem("Item do Menu 3", KeyEvent.VK_E);
		menuItem.addActionListener(new ActionListener()
		{

			@Override
			public void actionPerformed(ActionEvent e)
			{
				texto.setText("Você cliquou no item: 3 do menu 1");

			}
		});
		menu.add(menuItem);

		// Adiciona um separador de menu
		menu.addSeparator();

		// Repete processo para o quarto item
		menuItem = new JMenuItem("Item do Menu 4", KeyEvent.VK_M);
		menuItem.addActionListener(new ActionListener()
		{

			@Override
			public void actionPerformed(ActionEvent e)
			{
				texto.setText("Você cliquou no item: 4 do menu 1");

			}
		});
		menu.add(menuItem);

		// SubMenu
		// para criar um submenu cria-se um novo menu.
		// e adiciona um item 

		// Cria um submenu (novo menu)
		submenu = new JMenu("Item com Submenu");

		// Cria um item e seu evento
     	menuItem = new JMenuItem("Item do Submenu", KeyEvent.VK_U);
		menuItem.addActionListener(new ActionListener()
		{

			@Override
			public void actionPerformed(ActionEvent e)
			{
				texto.setText("Você cliquou no item: 1 do sub menu");

			}
		});

		// Adiciona item ao submenu
		submenu.add(menuItem);

		// Adiciona submenu ao menu
		menu.add(submenu);

		// Cria um segundo menu
		menu = new JMenu("Menu 2");

		// Cria item para o segundo menu e seu evento
		menuItem = new JMenuItem("Item do menu 2", KeyEvent.VK_D);
		menuItem.addActionListener(new ActionListener()
		{

			@Override
			public void actionPerformed(ActionEvent e)
			{
				texto.setText("Você cliquou no item: 1 do menu 2");

			}
		});

		// Adiciona item ao menu
		menu.add(menuItem);

		// Adiciona menu a barra de menus
		barraMenu.add(menu);

		// retorna menu completo
		return barraMenu;

	}

	// Cria um painel
	public Container criaPainel()
	{
		// Cria painel e suas propriedades
		JPanel painel = new JPanel(new BorderLayout());
		painel.setOpaque(true);

		// Cria um componente de texto
		texto = new JLabel("Você cliquou no item:");

	    // Adiciona componente ao painel
		painel.add(texto, BorderLayout.PAGE_END);

		/// Retorna Painel
		return painel;
	}

	// Cria GUI
	public static void criaGUI()
	{
		// Cria formulario e suas propriedades
		JFrame formulario = new JFrame("Desenvolvimento Aberto");
		formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// Cria Menu
		CriaMenu menu = new CriaMenu();

		// Adiciona barra de menus na GUI
		formulario.setJMenuBar(menu.criaMenu());

		// Adiciona painel na GUI
		formulario.setContentPane(menu.criaPainel());

		// Adiciona propriedades ao formulario
		formulario.setSize(400, 300);
		formulario.setVisible(true);		

	}

	public static void main(String[] args)
	{
		javax.swing.SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run()
			{

				// Monta GUI
				criaGUI();
			}
		});

	}

}

Visual – JSLider, Ticks – Java

Publicado: 23 de março de 2014 em Java

Slider

Um controle deslizante, também conhecido como Track Bar, é um objeto de interface gráfica (GUI) com o qual o usuário pode definir um valor movendo um indicador, geralmente de uma forma horizontal. Em alguns casos, o usuário também pode clicar em um ponto no controle deslizante para alterar a configuração.

Ticks

Os Ticks são os riscos de marcação do Slider e indicam a quantidades de valores que você pode diminuir ou aumentar deslizando o botão do Slider. Os Ticks são opcionais você pode mostra-los ou não usando a propriedade SetPaintTicks, você também pode configurar a quantidade e o espaçamento das marcas do Sider e mostrar suas legendas.

Exemplo:

Neste exemplo criamos um Slider e mudamos suas propriedades para que mostres as marcações e legendas de suas posições.

Java

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;

public class Slider extends JPanel implements ActionListener
{
	// Declara componentes
	JLabel titulo;
	JLabel valor;
	JSlider slider;
	JButton botao;

	// Declara variaveis
	int sMin = 0;
	int sMax = 50;
	int sPos = 25;
	String mostraValor = "Valor escolhido é: ";

	Slider()
	{
		// Cria componentes
		titulo = new JLabel("Desenvolvimento Aberto - JSlider");
		valor = new JLabel(mostraValor);
		slider = new JSlider(JSlider.HORIZONTAL, sMin, sMax, sPos);
		botao = new JButton("Ok");

		// Adiciona propriedades ao componentes
		slider.setMajorTickSpacing(10);
		slider.setMinorTickSpacing(1);
		slider.setPaintTicks(true);
		slider.setPaintLabels(true);

		botao.addActionListener(this);

		// Cria layout
		GridLayout layout = new GridLayout(0,1,5,10);

		setLayout(layout);

		// Adiciona componentes no painel
		add(titulo);
		add(valor);
		add(slider);
		add(botao);

		setBorder(BorderFactory.createEmptyBorder(20,20,20,20));

	}

	public void actionPerformed(ActionEvent arg0)
	{
		// Evento do botão
		if (arg0.getSource() == botao)
		{
			valor.setText(mostraValor + String.valueOf(slider.getValue()));
		}

	}

	 private static void mostraGui()
	    {
	        // Cria GUI
		    JFrame formulario = new JFrame("JSlider");
	        formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	        JComponent painel = new Slider();
	        painel.setOpaque(true);

	        formulario.setContentPane(painel);
	        formulario.pack();
	        formulario.setVisible(true);
	    }

	public static void main(String[] args)
	{

		// Mostra GUI
		javax.swing.SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run() {

				mostraGui();

			}
		});

	}
}

Em computação, um Spinner  é um elemento de interface gráfica  que permite aumentar ou diminuir um valor, geralmente, de um parâmetro numérico (por exemplo, tamanho ou data) de um objeto quando o usuário pressiona os botões do Spinner. O Spinner normalmente é  usado em conjunto com caixa de texto que permitem inserir ou editar dados diretamente. Dependendo do gerenciador de janela ou aplicação em uso, existem muitos estilos de apresentação gráfica de Spinner.

NumberModel

É uma classe associada ao Spinner que permite parametrizar um modelo baseado em números.

ListModel

É uma classe associada ao Spinner que permite parametrizar um modelo baseada em Arrays.

DateModel

É uma classe associada ao Spinner que permite parametrizar um modelo baseada em datas.

Calendar

A classe Calendar é uma classe abstrata que fornece métodos para a conversão entre um instante específico no tempo e um conjunto de campos de calendário, como YEAR, MONTH, DAY_OF_MONTH, hora, e assim por diante, e para manipular os campos de calendário, como obter a data da próxima semana.

Exemplo:

Neste programa desenvolvemos três modelos de Spinners baseados em cada um dos seus SpinnerModels e extraímos seus valores para uma saída de tela.

Java

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.Date;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
import javax.swing.SpinnerListModel;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;

public class Spinner extends JPanel implements ActionListener
{
	// Declara Labels
	JLabel titulo;
	JLabel texto;
	JLabel numero;
	JLabel lista;
	JLabel ano;

	// Declara Spinners
	JSpinner spinner1;
	JSpinner spinner2;
	JSpinner spinner3;

	// Declara modelos de Spinner
	SpinnerModel numeros;
	SpinnerModel estacao;
	SpinnerModel data;

	// Declara Botão
	JButton botao;

	// Declara Array
	String[] tEstacao = {"Primavera", "Verão", "Outono", "Inverno"};

	Spinner()
	{
		// Cria Componentes
		titulo = new  JLabel("Desenvolvoimento Aberto - JSpinner");
		texto = new JLabel("Texto:");
		numero = new JLabel("Incio= 1, min= 0, max= 10, alimeta= 1");
		lista = new JLabel("Lista de estações do ano");
		ano = new JLabel("inicio= ano atual, min= -10, max= +10, alimenta= 1");

		// Cria Modelos de Spinner
	    numeros = new SpinnerNumberModel(1, 0, 10, 1);
	    estacao = new SpinnerListModel(tEstacao);

	    // Cria um calendario e assoia a um modelo de spinner
	    Calendar calendario =  Calendar.getInstance();
	    Date dataInicial = calendario.getTime();

	    calendario.add(calendario.YEAR , -10);
	    Date minData = calendario.getTime();

	    calendario.add(calendario.YEAR , +20);
	    Date maxData = calendario.getTime();

	    // Cria modelo de Spinner
	    data = new SpinnerDateModel(dataInicial, minData, maxData , 1);

	    // Cria Spinners
		spinner1 = new JSpinner(numeros);
		spinner2 = new JSpinner(estacao);
		spinner3 = new JSpinner(data);

		// Cria botão e seu evento on click
		botao = new JButton("OK");
		botao.addActionListener(this);

		// Cria um Layout
		GridLayout layout = new GridLayout(0,1,5,5);
		setLayout(layout);

		// Adiciona componentes ao painel
		add(titulo);
		add(texto);
		add(numero);
		add(spinner1);
		add(lista);
		add(spinner2);
		add(ano);
		add(spinner3);
		add(botao);

		// Cria uma borda no painel
		setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

	}

	public void actionPerformed(ActionEvent arg0) {

		// Evento on click do botão
		if (arg0.getSource() == botao)
		{
			texto.setText("Numero: " + String.valueOf(spinner1.getValue()) + " " +
					      "Texto: "  + String.valueOf(spinner2.getValue()) + " " +
					      "Data: "   + String.valueOf(spinner3.getValue()));
		}

	}

	 private static void mostraGui()
	    {
		    // Cria Formulario, adiciona suas propriedades e associa seus componentes
	        JFrame formulario = new JFrame("Lista de Música");
	        formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	        JComponent painel = new Spinner();
	        painel.setOpaque(true);

	        formulario.setContentPane(painel);
	        formulario.pack();
	        formulario.setVisible(true);
	    }

	public static void main(String[] args) {

		// Cria GUI.
		javax.swing.SwingUtilities.invokeLater(new  Runnable()
        {
            @Override
            public void run()
            {
                mostraGui();

            }
        });
   }
}

Combo Box

Em computação, uma caixa de combinação é um elemento de interface gráfica. Um JComboBox, que permite ao usuário escolher uma das várias opções, pode ter duas formas muito diferentes. A forma padrão é a caixa de combinação não editável, que conta com um botão e uma lista suspensa de valores. A segunda forma, chamada de caixa de combinação editável, possui um campo de texto com um pequeno botão confinando-o. O usuário pode digitar um valor no campo de texto ou clique no botão para exibir uma lista drop-down.

List Box

Em computação, uma caixa de listagem é um elemento de interface gráfica. Uma JList apresenta ao usuário um grupo de itens, exibidos em uma ou mais colunas. As listas podem ter muitos itens, por isso eles são muitas vezes colocados em painéis de rolagem.

MouseListener

A interface do ouvinte para receber eventos do mouse (pressionando , soltando, clique, entrada e saída) em um componente.

Mouse Adapter

É uma classe abstrata no qual o adaptador é usado para receber eventos de mouse. Os métodos dessa classe estão vazios. Esta classe existe como conveniência para a criação de objetos do ouvinte.

Mouse Clicked

É uma void da classe  Mouse Adapter chamada quando o botão do mouse foi clicado (pressionado e liberado) em um componente.

Exemplo:

Neste exemplo escrevemos um combobox e um listbox que interagem entre si por seus eventos.

Java

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;

public class ComboList extends JPanel implements ActionListener
{
	// Declara componentes
	JLabel titulo;
	JLabel tmusica;
	JLabel tcombo;
	JLabel tlista;
	JComboBox combo;
	JList lista;

	// Construtor da classe
	public ComboList()
	{

		// Declara uma array com o conteudo da lista
		String[] itens = { "Satisfaction" , "Paint it Black" , "Wild Horses", "Brown Sugar",
				           "Sympathy for the Devil", "Start Me Up"} ;

		// Cria componentes
		titulo =  new JLabel("Rolling Stones :");
		tmusica = new JLabel("Musica");
		tcombo = new JLabel("Combobox - Escolha uma Opção");
		tlista = new JLabel("ListBox - Duplo click em uma Opção");

		// Adiciona propriedades ao componentes
		combo = new JComboBox<>(itens);
		combo.setSelectedIndex(0);
		combo.addActionListener(this);

		lista = new JList<>(itens);
		lista.setSelectedIndex(0);

		// Cria um ouvinte do mouse para o componente
		lista.addMouseListener(new MouseAdapter()
		{
			// declara o evento para o click do mouse
			public void mouseClicked(MouseEvent e)
			{
				if (e.getClickCount() == 2)
				{
					int indice = lista.getSelectedIndex();
					combo.setSelectedIndex(indice);
				}
			}
		});

		// declara o layout da tela
		setLayout(new BoxLayout(this , BoxLayout.Y_AXIS));

		// adiciona componentes ao painel
		add(titulo);
		add(tmusica);
		add(Box.createRigidArea(new Dimension(0,10)));
		add(tlista);
		add(Box.createRigidArea(new Dimension(0,5)));
		add(lista);
		add(Box.createRigidArea(new Dimension(0,10)));
		add(tcombo);
		add(Box.createRigidArea(new Dimension(0,5)));
		add(combo);
		setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

	}

	// Evento do clique do combobox
	public void actionPerformed(ActionEvent e)
	{
		JComboBox escolha = (JComboBox)e.getSource();
		int indice = (int)escolha.getSelectedIndex();
		String texto = (String)escolha.getSelectedItem();
		lista.setSelectedIndex(indice);
		tmusica.setText( texto );
	}

	// Monta a interface grafica
	private static void mostraGui()
	{
		JFrame formulario = new JFrame("Lista de Música");
		formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JComponent painel = new ComboList();
		painel.setOpaque(true);

		formulario.setContentPane(painel);
		formulario.pack();
		formulario.setVisible(true);
	}

	public static void main(String[] args)
	{
		//  inicializa a tela
		javax.swing.SwingUtilities.invokeLater(new  Runnable()
		{

			@Override
			public void run()
			{
				mostraGui();

			}
		});
	}
}

Diferentemente do Eclipse (IBM),  o NetBeans possui uma IDE gráfica que em seus primórdios foi baseada na IDE do Delphi (Borland), para quem conhece Delphi já sabe que a sua interface de GUI RAD foi um dos seus pontos fortes. O NetBeans adotado pela Sun e agora pela Oracle, possui uma magnifica e produtiva IDE para Java.

Há até uma certa disputa entre as duas IDEs e a preferencia dos desenvolvedores, se por um lado o Eclipse lhe proporciona um código mais limpo e mais leve, o NetBeans sem duvida lhe dará mais produtividade. Você precisa entender que o NetBeans assim o Eclipse não são apenas uma IDE e sim uma plataforma, apesar de serem famosos por proporcionarem uma IDE Java, cada um possui um proposito diferente.

O Eclipse é uma plataforma baseada em plug-ins que permite expansão infinita de suas funcionalidades, permitindo que à partir da plataforma Eclipse outros softwares sejam criados, como por exemplo o IBM Data Studio. O NetBeans é uma plataforma dedicada a desenvolvimento de softwares desktop proporcionando técnicas de desenvolvimento modulares prometendo reduzir o tempo de desenvolvimento de aplicações gráficas em até um ano a menos que outras plataformas.

Disputas a parte, você que esta começando pode escolher por conta própria a sua interface preferida e decidimos lhe ajudar a escolher a melhor forma para criar seus programas em Java.

Para baixar o NetBeans você pode ir diretamente no site da Oracle ou : https://netbeans.org/downloads/index.html

Desenvolvemos o mesmo programa baseado na diferença de escrita de código para as duas IDEs Java. Para ver o mesmo programa desenvolvido para a IDE Eclipse use o link abaixo:

IDE Eclipse: https://desenvolvimentoaberto.wordpress.com/2014/03/12/visual-controles-radiobutton-events-getstatechange-java/

Design First, Code Later em Java  Free Design
No Construtor de GUIs da IDE, você pode construir seus formulários simplesmente colocando os componentes onde quiser, como se você estivesse usando o posicionamento absoluto. O GUI Builder descobre quais são atributos de layout  necessários e, em seguida, gera o código para você automaticamente. Você não precisa se ​​preocupar com inserções, âncoras, preenchimentos, e assim por diante .

Para referencia de como deve ficar o seu projeto e o design de seu programa utilize a imagem abaixo:

IDE_NetBeans

NetBeans

  1. Crie um novo Projeto Java Application chamado JDevAberto e clique em Next.
  2. Deixe marcado o checkbox Criar Classe Principal, mas apague o conteúdo do campo de edição, o deixando em branco, em seguida clique em Finalizar.
  3. Já na IDE com o projeto aberto, clique com o botão direito no projeto escolha novo JFrame e o nomeie para JDevAberto_Main
  4. Na janela de propriedades do JFrame clique em Title coloque: “Desenvolvimento Aberto”.
  5. Coloque um JPanel e modifique sua largura e altura até atingir metade do JFrame.
  6. Com o JPanel selecionado, clique em Border na janela de propriedades.
  7. Em Borda com Titulo, coloque o titulo: “Escolha uma opção ou pressione Alt A, B, C ou D” e clique em OK.
  8. Arraste quatro Botões de Radio e em sua respectiva propriedade Text, nomei cada um dos elementos como: Somar, Subtrair, Multiplicar, Dividir.
  9. Na propriedade Mnemonic de cada botão coloque respectivamente as letras : A, B, C e D.
  10. Coloque um Grupo de Botões no JPanel, ele ficara invisivel no formulario.
  11. Clique em cada RadioButton e na propriedade buttonGroup escolha o grupo de botões.
  12. Coloque dois JLabel na tela e dois Campos de textos.
  13. Coloque o valor 0 na propriedade Text dos campos e nomeie a propriedade Texts dos Labels para : Numero
  14. Coloque um botão na tela, mude sua propriedade Text para “OK” e o alinhe ao lado dos labels e campos de texto.
  15. Coloque uma Area de Texto e modifique sua largura e altura para que complete a parte inferior da tela.
  16. No modo Design, na barra de ferramentas ao lado da paleta Histórico, clique no botão Visualizar Design para ver as funcionalidades da sua GUI.
  17. Clique no botão Run na barra de ferramentas para rodar sua aplicação.

Finalização

Neste ponto sua aplicação já possui o design mas ainda nenhuma funcionalidade, precisamos programar os eventos de cada botão, para isso de um duplo clique em cada RadioButton e um duplo clique no botão.

O NetBeans criou para você os eventos automaticamente, agora só precisamos olhar o código abaixo e completar os eventos em nosso programa, após a finalização seu programa deve funcionar como na imagem abaixo:

pCalc

Exemplo:

Este é o código criado automaticamente acrescentado do código dentro dos eventos para a funcionalidade do programa, para visualizar os  eventos de um modo mais fácil, procure o bloco de código  que está marcado com o comentário:  “//************** DA”.

Java

// *
// * To change this license header, choose License Headers in Project Properties.
// * To change this template file, choose Tools | Templates
// * and open the template in the editor.
// */

// **
// *
// * @author Desenvolvimento Aberto
// */
public class JDevAberto_Main extends javax.swing.JFrame {

   //**
   //* Creates new form JDevAberto_Main
   //*/
    public JDevAberto_Main() {
        initComponents();
    }

    //**
    // * This method is called from within the constructor to initialize the form.
    // * WARNING: Do NOT modify this code. The content of this method is always
    // * regenerated by the Form Editor.
    // */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        buttonGroup1 = new javax.swing.ButtonGroup();
        jPanel1 = new javax.swing.JPanel();
        jRadioButton1 = new javax.swing.JRadioButton();
        jRadioButton2 = new javax.swing.JRadioButton();
        jRadioButton3 = new javax.swing.JRadioButton();
        jRadioButton4 = new javax.swing.JRadioButton();
        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Desenvolvimento Aberto");

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Escolha uma opção ou pressione Alt A, B, C ou D"));

        buttonGroup1.add(jRadioButton1);
        jRadioButton1.setMnemonic('A');
        jRadioButton1.setText("Somar");
        jRadioButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton1ActionPerformed(evt);
            }
        });

        buttonGroup1.add(jRadioButton2);
        jRadioButton2.setMnemonic('B');
        jRadioButton2.setText("Subtrair");
        jRadioButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton2ActionPerformed(evt);
            }
        });

        buttonGroup1.add(jRadioButton3);
        jRadioButton3.setMnemonic('C');
        jRadioButton3.setText("Multiplicar");
        jRadioButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton3ActionPerformed(evt);
            }
        });

        buttonGroup1.add(jRadioButton4);
        jRadioButton4.setMnemonic('D');
        jRadioButton4.setText("Dividir");
        jRadioButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton4ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(15, 15, 15)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jRadioButton1)
                    .addComponent(jRadioButton2)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(jRadioButton3)
                        .addComponent(jRadioButton4, javax.swing.GroupLayout.Alignment.LEADING)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jRadioButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jRadioButton2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jRadioButton3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jRadioButton4))
        );

        jLabel1.setText("Numero:");

        jTextField1.setText("0");

        jTextField2.setText("0");

        jLabel2.setText("Numero:");

        jButton1.setText("OK");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 87, Short.MAX_VALUE))
                    .addComponent(jScrollPane1))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 162, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

//************** DA
// Preencha os Eventos a seguir:

    private void jRadioButton4ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        jTextArea1.append("Dividir:\n");
    }

    private void jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        jTextArea1.append("Somar:\n");
    }

    private void jRadioButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        jTextArea1.append("Subtrair:\n");
    }

    private void jRadioButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        jTextArea1.append("Multiplicar:\n");
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:

        double total;

        if (jRadioButton1.getSelectedObjects() != null)
        {
            total = Double.parseDouble(jTextField1.getText()) +
                    Double.parseDouble(jTextField2.getText());

            jTextArea1.append(jTextField1.getText()  + " + " + jTextField2.getText() +
                              " = " + String.valueOf(total)+ "\n");

        }

        if (jRadioButton2.getSelectedObjects() != null)
        {
            total = Double.parseDouble(jTextField1.getText()) -
                    Double.parseDouble(jTextField2.getText());

            jTextArea1.append(jTextField1.getText()  + " - " + jTextField2.getText() +
                              " = " + String.valueOf(total)+ "\n");

        }

        if (jRadioButton3.getSelectedObjects() != null)
        {
            total = Double.parseDouble(jTextField1.getText()) *
                    Double.parseDouble(jTextField2.getText());

            jTextArea1.append(jTextField1.getText()  + " * " + jTextField2.getText() +
                              " = " + String.valueOf(total) + "\n");

        }

        if (jRadioButton4.getSelectedObjects() != null)
        {
            total = Double.parseDouble(jTextField1.getText()) /
                    Double.parseDouble(jTextField2.getText());

            jTextArea1.append(jTextField1.getText()  + " / " + jTextField2.getText() +
                              " = " + String.valueOf(total) + "\n");

        }
    }

 //************** DA
// Fim dos Eventos

    //**
    //* @param args the command line arguments
    //*/
    public static void main(String args[]) {
        //* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        //* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
        //* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
        //*/
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(JDevAberto_Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(JDevAberto_Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(JDevAberto_Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(JDevAberto_Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new JDevAberto_Main().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JRadioButton jRadioButton1;
    private javax.swing.JRadioButton jRadioButton2;
    private javax.swing.JRadioButton jRadioButton3;
    private javax.swing.JRadioButton jRadioButton4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration
}

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");
		}
	}

}

Checkbox

A classe JCheckBox fornece suporte para os botões da caixa de seleção.

TextArea

A classe JTextArea fornece um componente que exibe várias linhas de texto, permitindo opcionalmente o usuário editar o texto.

ScrollPane

A JScrollPane fornece uma visão de rolagem de um componente. Quando a tela é limitada, use um painel de rolagem para exibir um componente que é grande ou um cujo tamanho pode mudar dinamicamente. Outros recipientes utilizados para economizar espaço na tela incluem painéis divididos por abas e painéis.

KeyEvent (mnemônico)

Geralmente a letra sublinhada no texto de cada componente mostra o mnemônico – a alternativa de teclado – para cada componente. Na maioria das GUIs Fell and Look, o usuário pode clicar em um componente, pressionando a tecla Alt e o mnemônico. Por exemplo, Alt+M. O KeyEvent é responsável pela definição do atalho no teclado, exemplo, KeyEvent.VK_M

GridBagConstraints

Uma classe que simplesmente armazena as informações para cada componente adicionado.  A propriedade Fill determina como redimensionar o componente.

Exemplo:

Neste exemplo criamos três componentes checkbox e uma caixa de texto a cada mudança do estado de cada checkbox adicionamos o texto correspondente a caixa de texto, para outros detalhes leia os comentários no código

Java

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class MontaGUI extends JPanel implements  ItemListener
{
	// Declara Objetos
	JLabel rotulo;
	JCheckBox opc1;
	JCheckBox opc2;
	JCheckBox opc3;
	JTextArea texto;

	public MontaGUI()
	{
		// Cria novos Objetos
		rotulo = new JLabel("Escolha um Checkbox ou Alt + A, B ou C:");
		opc1 = new JCheckBox("Opção 1:");
		opc2 = new JCheckBox("Opção 2:");
		opc3 = new JCheckBox("Opção 3:");
		texto = new JTextArea(5,20);

		// Seta atalho do teclado ex: ALT + A ou B ou C
		opc1.setMnemonic(KeyEvent.VK_A);
		opc2.setMnemonic(KeyEvent.VK_B);
		opc3.setMnemonic(KeyEvent.VK_C);

		// Seta Evento
		opc1.addItemListener(this);
		opc2.addItemListener(this);
		opc3.addItemListener(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();

		// adiciona componentes nos paineis
		painel1.add(rotulo);
		painel2.add(opc1);
		painel2.add(opc2);
		painel2.add(opc3);
		painel3.add(barra,c );

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

	}

	public void itemStateChanged(ItemEvent e)
	{
		// Evento de mudança de estado do checkbox

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

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

		// Define click no checkbox
		if (fonte == opc1)
		{
			texto.append("Você clicou no CheckBox 1" + "\n");
		}

		if (fonte == opc2)
		{
			texto.append("Você clicou no CheckBox 2" + "\n");
		}

		if (fonte == opc3)
		{
			texto.append("Você clicou no CheckBox 3" + "\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  MontaGUI();
				componentes.setOpaque(true);

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

}

Por default o Eclipse não possui uma perspectiva para Design-Time para componentes AWT e SWING do Java, então escrever códigos de layout à mão pode ser um desafio. Se você não estiver interessado em aprender todos os detalhes de gerenciamento de layout, você pode preferir usar uma ferramenta de Design Time para definir o seu GUI. Uma dessas ferramentas é a da IDE do NetBeans.

Desenvolvedores puristas preferem escrever os layouts na mão, estes deixam o código mais limpo e mais leve e as vezes até mais rápido  do que IDEs de Design Time, que criam um arquivo extra para gerenciar os componentes e suas posições na tela.

Java AWT e Swing possuem muitas classes especificas para o design da GUI chamadas de Layout Manager:

  • BorderLayout
  • BoxLayout
  • CardLayout
  • FlowLayout
  • GridBagLayout
  • GridLayout
  • GroupLayout
  • SpringLayout

Cada uma das classes acima possui suas caracteristas especificas, neste post usaremos uma das mais flexiveis e que ainda possui uma classe de utilidades para adicionar mais poder a suas caracteristicas originais.

Mais informações sobre as classes de layout: http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

SpringLayout

SpringLayout é um gerenciador de layout muito flexível que pode emular muitas das características de outros gerenciadores de layout. SpringLayout é, no entanto, de muito baixo nível e, como tal, você realmente só deve usá-lo com um construtor de GUI, ao invés de tentar codificar um gerenciador de layout na mão.

SpringLayout faz o seu trabalho através da definição de relações direcionais, ou restrições, entre as bordas de componentes. Por exemplo, você pode definir a borda esquerda de um componente é uma distância fixa (5 pixels, por exemplo) a partir da margem direita do outro componente.

Spring Utilities

Faz com que os componentes sejam dispostos com o mesmo tamanho lado a lado usando coluna e linha ou também que sejam dispostos em tamanhos diferentes utilizando colunas e linhas.

Action Listner

Toda vez que o usuário digita um caractere ou aperta um botão do mouse, ocorre um evento. Qualquer objeto pode ser notificado do evento. Tudo que o objeto tem que fazer é implementar a interface apropriada e ser registrado como um ouvinte de evento sobre a origem do evento apropriado.

JFrame

É um recipiente de nível superior JFC / Swing, um JFrame contém uma JRootPane como seu único filho. O painel de conteúdo fornecido pelo painel de raiz deve, como regra, conter todos os componentes não-menu apresentados pelo JFrame.

JLabel

Um objeto JLabel pode exibir texto, uma imagem, ou ambos, definir o alinhamento vertical e horizontal e etc.

JTextFielfd

É um componente leve que permite a edição de uma única linha de texto.

JButton

É uma implementação de um botão. Os botões podem ser configurados, e até certo ponto controlados por Ações. Usando uma ação com um botão tem muitos benefícios além de configurar diretamente um botão

Exemplo:

Neste exemplo desenvolvemos um programa visual para concatenar duas Strings, usamos os controles básicos para criar uma janela visual com os componentes de entrada e botões, também utilizamos layouts e a classe Spring Utilities para o design da tela.

Classe #1 – Java

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;

 class GUI implements ActionListener
{
	 // Declara Componentes
	 static JLabel label = new JLabel("Concatena Strings");
	 static JTextField jtexto1 = new JTextField("Digite um palavra");
	 static JTextField jtexto2 = new JTextField("Digite um palavra");
	 static JButton botao = new JButton("Somar");
	 static JLabel resultado = new JLabel("Resultado");

	public void inicalizaComponentes()
	{
        // Seta Valores para componentes e Cria Evento
		// uma void não estatica é necessario para o action listner
		botao.setToolTipText("Clique aqui para somar os valores acima.");
        botao.addActionListener(this);
	}

	 static void addPainel (Container painel)

	 {
		// Cria um layout
		SpringLayout layout  = new SpringLayout();

        // Adiciona layout no container
		painel.setLayout(layout);

        // Adiciona componentes no container
		painel.add(label);
        painel.add(jtexto1);
        painel.add(jtexto2);
        painel.add(botao, painel);
        painel.add(resultado);

        // Utiliza Oracle Spring Utilities
        SpringUtilities.makeCompactGrid(painel, 5, 1, 5, 5, 5, 5);

	 }

	public static void main(String[] args) {

		// Especifica Thread do Swing
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {

            	// Cria um frame
            	JFrame formulario = new JFrame("Desenvolvimento Aberto");

            	// Adiciona o frame no container com os objetos
            	addPainel(formulario.getContentPane());

            	//inicializa os componentes
            	GUI comp = new GUI();
            	comp.inicalizaComponentes();

            	// Seta propriedades do formulario
            	formulario.setSize(300, 200);
                formulario.setVisible(true);

            }
        });

	}

	// Evento do botão
	public void actionPerformed(ActionEvent e)
	{
		String r =  jtexto1.getText() +  jtexto2.getText();
		resultado.setText(r);
	}

}

Classe #2 – SpringUtilities

/*
 * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Oracle or the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

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

/*
 * A 1.4 file that provides utility methods for
 * creating form- or grid-style layouts with SpringLayout.
 * These utilities are used by several programs, such as
 * SpringBox and SpringCompactGrid.
 */
public class SpringUtilities {
    /*
     * A debugging utility that prints to stdout the component's
     * minimum, preferred, and maximum sizes.
     */
    public static void printSizes(Component c) {
        System.out.println("minimumSize = " + c.getMinimumSize());
        System.out.println("preferredSize = " + c.getPreferredSize());
        System.out.println("maximumSize = " + c.getMaximumSize());
    }

    /*
     * Aligns the first <code>rows</code> * <code>cols</code>
     * components of <code>parent</code> in
     * a grid. Each component is as big as the maximum
     * preferred width and height of the components.
     * The parent is made just big enough to fit them all.
     *
     * @param rows number of rows
     * @param cols number of columns
     * @param initialX x location to start the grid at
     * @param initialY y location to start the grid at
     * @param xPad x padding between cells
     * @param yPad y padding between cells
     */
    public static void makeGrid(Container parent,
                                int rows, int cols,
                                int initialX, int initialY,
                                int xPad, int yPad) {
        SpringLayout layout;
        try {
            layout = (SpringLayout)parent.getLayout();
        } catch (ClassCastException exc) {
            System.err.println("The first argument to makeGrid must use SpringLayout.");
            return;
        }

        Spring xPadSpring = Spring.constant(xPad);
        Spring yPadSpring = Spring.constant(yPad);
        Spring initialXSpring = Spring.constant(initialX);
        Spring initialYSpring = Spring.constant(initialY);
        int max = rows * cols;

        //Calculate Springs that are the max of the width/height so that all
        //cells have the same size.
        Spring maxWidthSpring = layout.getConstraints(parent.getComponent(0)).
                                    getWidth();
        Spring maxHeightSpring = layout.getConstraints(parent.getComponent(0)).
                                    getHeight();
        for (int i = 1; i < max; i++) {
            SpringLayout.Constraints cons = layout.getConstraints(
                                            parent.getComponent(i));

            maxWidthSpring = Spring.max(maxWidthSpring, cons.getWidth());
            maxHeightSpring = Spring.max(maxHeightSpring, cons.getHeight());
        }

        //Apply the new width/height Spring. This forces all the
        //components to have the same size.
        for (int i = 0; i < max; i++) {
            SpringLayout.Constraints cons = layout.getConstraints(
                                            parent.getComponent(i));

            cons.setWidth(maxWidthSpring);
            cons.setHeight(maxHeightSpring);
        }

        //Then adjust the x/y constraints of all the cells so that they
        //are aligned in a grid.
        SpringLayout.Constraints lastCons = null;
        SpringLayout.Constraints lastRowCons = null;
        for (int i = 0; i < max; i++) {
            SpringLayout.Constraints cons = layout.getConstraints(
                                                 parent.getComponent(i));
            if (i % cols == 0) { //start of new row
                lastRowCons = lastCons;
                cons.setX(initialXSpring);
            } else { //x position depends on previous component
                cons.setX(Spring.sum(lastCons.getConstraint(SpringLayout.EAST),
                                     xPadSpring));
            }

            if (i / cols == 0) { //first row
                cons.setY(initialYSpring);
            } else { //y position depends on previous row
                cons.setY(Spring.sum(lastRowCons.getConstraint(SpringLayout.SOUTH),
                                     yPadSpring));
            }
            lastCons = cons;
        }

        //Set the parent's size.
        SpringLayout.Constraints pCons = layout.getConstraints(parent);
        pCons.setConstraint(SpringLayout.SOUTH,
                            Spring.sum(
                                Spring.constant(yPad),
                                lastCons.getConstraint(SpringLayout.SOUTH)));
        pCons.setConstraint(SpringLayout.EAST,
                            Spring.sum(
                                Spring.constant(xPad),
                                lastCons.getConstraint(SpringLayout.EAST)));
    }

    /* Used by makeCompactGrid. */
    private static SpringLayout.Constraints getConstraintsForCell(
                                                int row, int col,
                                                Container parent,
                                                int cols) {
        SpringLayout layout = (SpringLayout) parent.getLayout();
        Component c = parent.getComponent(row * cols + col);
        return layout.getConstraints(c);
    }

    /*
     * Aligns the first <code>rows</code> * <code>cols</code>
     * components of <code>parent</code> in
     * a grid. Each component in a column is as wide as the maximum
     * preferred width of the components in that column;
     * height is similarly determined for each row.
     * The parent is made just big enough to fit them all.
     *
     * @param rows number of rows
     * @param cols number of columns
     * @param initialX x location to start the grid at
     * @param initialY y location to start the grid at
     * @param xPad x padding between cells
     * @param yPad y padding between cells
     */
    public static void makeCompactGrid(Container parent,
                                       int rows, int cols,
                                       int initialX, int initialY,
                                       int xPad, int yPad) {
        SpringLayout layout;
        try {
            layout = (SpringLayout)parent.getLayout();
        } catch (ClassCastException exc) {
            System.err.println("The first argument to makeCompactGrid must use SpringLayout.");
            return;
        }

        //Align all cells in each column and make them the same width.
        Spring x = Spring.constant(initialX);
        for (int c = 0; c < cols; c++) {
            Spring width = Spring.constant(0);
            for (int r = 0; r < rows; r++) {
                width = Spring.max(width,
                                   getConstraintsForCell(r, c, parent, cols).
                                       getWidth());
            }
            for (int r = 0; r < rows; r++) {
                SpringLayout.Constraints constraints =
                        getConstraintsForCell(r, c, parent, cols);
                constraints.setX(x);
                constraints.setWidth(width);
            }
            x = Spring.sum(x, Spring.sum(width, Spring.constant(xPad)));
        }

        //Align all cells in each row and make them the same height.
        Spring y = Spring.constant(initialY);
        for (int r = 0; r < rows; r++) {
            Spring height = Spring.constant(0);
            for (int c = 0; c < cols; c++) {
                height = Spring.max(height,
                                    getConstraintsForCell(r, c, parent, cols).
                                        getHeight());
            }
            for (int c = 0; c < cols; c++) {
                SpringLayout.Constraints constraints =
                        getConstraintsForCell(r, c, parent, cols);
                constraints.setY(y);
                constraints.setHeight(height);
            }
            y = Spring.sum(y, Spring.sum(height, Spring.constant(yPad)));
        }

        //Set the parent's size.
        SpringLayout.Constraints pCons = layout.getConstraints(parent);
        pCons.setConstraint(SpringLayout.SOUTH, y);
        pCons.setConstraint(SpringLayout.EAST, x);
    }
}