Page 1 of 36. 1/5/2014 Interface Gráfica em JAVA - Java Interface. http://javainterface.wikidot.com/interfacejava 1/36.
1/5/2014
Interface Gráfica em JAVA - Java Interface
Java Interface
Create account or Sign in Search this site
example menu
Search
contact
Interface Gráfica em JAVA Java
Update My Java Chitika | Opt out?
Alunos Gustavo de Almeida Neves Rafael Santos Leite Tarcísio Santos Professor Eduardo Manuel de Freitas Jorge Interface Gráfica de JAVA Para que o usuário possa interagir com a aplicação é necessário que haja uma interface para que este acione as funcionalidades do programa. JAVA fornece classes que são utilizadas para construir interfaces gráficas com usuário que ajudam na interação deste com a máquina e deixam os programas mais robustos e elegantes. Essas classes encontram-se agrupadas em dois grandes pacotes: java.awt e javax.swing, onde encontramos classes de janelas, botões, menus, painéis, botões de opções, entre outros componentes, que podem ser estendidos e utilizados em nossas aplicações. Neste tutorial será discutido alguns dos componentes mais importantes do pacote javax.swing, além dos layouts utilizados e de como é feito o tratamento de evento. Os itens abordados neste tutorial são descritos abaixos: • • • • • • • • • • • • • • • • • •
JFrame JPanel JLabel JButton JTextField JTextArea JScrollPane JCheckBox JCheckBox JComboBox JList JTable JToolBar JMenuItem, JMenu e JMenuBar JDialog, JInternalFrame e JDesktopPane JOptionPane: showMessageDialog e showConfirmDialog Layouts: FlowLayout, GridLayout, BorderLayout e GridBagLayout Tratamento de Eventos
Para melhor compreensão do conteúdo, este tutorial apresentará dois experimentos práticos. No primeiro experimento serão utilizados os componentes básicos do pacote javax.swing, e no segundo será montada uma interface de uma aplicação desktop simples, que implementa uma agenda, e neste experimento será posto em prática os conceitos visto neste tutorial. Definindo uma janela Definição de uma janela é dada através da classe JFrame, que serve como container para outros componentes, como botões, imagens ou painéis. O JFrame possui atributos que definem uma janela, como barra de título e borda. O código abaixo cria um objeto do tipo JFrame. Exemplo 1: Instanciando um JFrame.
http://javainterface.wikidot.com/interfacejava
1/36
1/5/2014
Interface Gráfica em JAVA - Java Interface
import javax.swing.*; public class JanelaJFrame { public static void main(String[] args){ instancia um objeto do tip o JFrame JFrame janela = new JFrame("Minha Primeira Janela"); /*setDefaultCloseOperation defini o que fazer quando * a janela for fechada: * EXIT_ON_CLOSE finaliza o aplicativo * DISPOSE_ON_CLOSE devolve os recursos ao sistema * HIDE_ON_CLOSE oculta a janela * DO_NOTHING_ON_CLOSE usuário indica se a janela será fechada*/ janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setSize(800,600);define o tamanho da janela janela.setVisible(true);//exibe a janela } } Definindo um container Para acrescentar componentes em uma janela é necessário um container. O container mais simples é o JPanel. Exemplo 2: Utilizando o JPanel.
public class JanelaJFrame extends JFrame { public janelaJFrame(){ JPanel pane = new JPanel(); this.setContentPane(pane); //define um container para o JFrame this.setSize(800, 600); this.setVisible(true); } public static void main(String[] args){ JFrame janela = new JFrame("Minha Primeira Janela"); } } Criando componentes JLabel : Utilizado como rótulo para exibição de texto e ícones. Exemplo 3: Montando uma interface com o JLabel. import java.awt.*; import javax.swing.*; public class JanelaJFrame extends JFrame { JLabel label1; JLabel label2; JLabel label3; JLabel label4 = new JLabel("Rótulo 4", JLabel.CENTER); public JanelaJFrame(){ label1 = new JLabel("Testando rótulos com JAVA"); texto no construtor //texto com posição definida label2 = new JLabel("Texto Centralizado", JLabel.CENTER); /*getClass().getResource(arg) procura por um arquivo na pasta onde * o aplicativo é chamado. Geralmente esse local é onde contém os * arquivos .class que são os arquivo compilados para bytecode http://javainterface.wikidot.com/interfacejava
2/36
1/5/2014
Interface Gráfica em JAVA - Java Interface
* ImageIcon é um objeto que armazena uma imagem*/ ImageIcon img = new ImageIcon(this.getClass().getResource("JAVA.png")); //texto com imagem label3 = new JLabel("JAVA - Interface Gráfica", img, JLabel.RIGHT); Container pane = this.getContentPane(); //captura o painel do JFrame pane.setLayout(new GridLayout(4, 1));define o layout do painel pane.add(label1); pane.add(label2); pane.add(label3); pane.add(label4); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(300, 200); this.setVisible(true); } public static void main(String[] args){ JanelaJFrame janela = new JanelaJFrame(); } }
Figura 1: funcionamento do JLabel JButton: Componente que representa um botão. Utilizado para executar comandos. Exemplo 4: Utilizando o JButton. import java.awt.*; import javax.swing.*; public class JanelaJFrame extends JFrame { JButton button1 = new JButton("Abrir"); JButton button2 = new JButton("Novo"); JButton button3 = new JButton("Fechar"); public JanelaJFrame(){ Container pane = this.getContentPane(); //captura o painel do JFrame pane.setLayout(new FlowLayout(FlowLayout.CENTER)); //define o layout pane.add(button1); pane.add(button2); pane.add(button3); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(300, 150); this.setVisible(true); } public static void main(String[] args){ http://javainterface.wikidot.com/interfacejava
3/36
1/5/2014
Interface Gráfica em JAVA - Java Interface
JanelaJFrame janela = new JanelaJFrame(); } }
Figura 2: funcionamento do JButton JTextField: Componente utilizado como campo de texto. Exemplo 5: Instanciando e utilizando o JTextField. impo rt java.awt.*; import javax.swing.*; public class JanelaJFrame extends JFrame { //caixa de texto com tamanho especificado JTextField texto1 = new JTextField(10); JTextField texto2 = new JTextField(25); //caixa de texto com texto inicial JTextField texto3 = new JTextField("ESCREVA SEU TEXTO AQUI!!", 30);
public JanelaJFrame(){ Container pane = this.getContentPane(); //captura o painel do JFrame pane.setLayout(new FlowLayout(FlowLayout.LEFT)); //define o layout pane.add(texto1); pane.add(texto2); pane.add(texto3); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(360, 150); this.setVisible(true); } public static void main(String[] args){ JanelaJFrame janela = new JanelaJFrame(); } }
http://javainterface.wikidot.com/interfacejava
4/36
1/5/2014
Interface Gráfica em JAVA - Java Interface
Figura 3: utilização do JTextField JTextArea: Campos de texto que podem possuir mais de uma linha. Exemplo 6: Utilização do JTextArea. import java.awt.*; import javax.swing.*; public class JanelaJFrame extends JFrame { //define o número de linhas e o número de colunas do JTextArea JTextArea texto1 = new JTextArea(5, 30); //coloca um texto inicial JTextArea texto2 = new JTextArea("Comentários", 10, 30);
public JanelaJFrame(){ Container pane = this.getContentPane(); //captura o painel do JFrame pane.setLayout(new FlowLayout(FlowLayout.CENTER)); //define o layout pane.add(texto1); pane.add(texto2); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(360, 320); this.setVisible(true); } public static void main(String[] args){ JanelaJFrame janela = new JanelaJFrame(); } }
Figura 4: criando interfaces com o JTextArea JScrollPane: São painéis de rolagem que permitem que os componentes exibam mais conteúdo do que o espaço ocupado. Exemplo 8: Mostrando o funcionamento do JScrollPane. import java.awt.*; http://javainterface.wikidot.com/interfacejava
5/36
1/5/2014
Interface Gráfica em JAVA - Java Interface
import javax.swing.*; public class JanelaJFrame extends JFrame { //define o número de linhas e o número de colunas do JTextArea JTextArea texto1 = new JTextArea(15, 30); //Painel de Rolagem JScrollPane scrollpane = new JScrollPane(texto1);
public JanelaJFrame(){ Container pane = this.getContentPane(); //captura o painel do JFrame pane.setLayout(new FlowLayout(FlowLayout.CENTER)); //define o layout //quebra de linha automática texto1.setLineWrap(true);
//define a política de utilização da barra de rolagem horizontal scrollpane.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); //define a política de utilização da barra de rolagem vertical scrollpane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); pane.add(scrollpane); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(360, 320); this.setVisible(true); } public static void main(String[] args){ JanelaJFrame janela = new JanelaJFrame(); } }
Figura 5: utilizando o JScrollPane Experimento prático 1: Neste experimento será colocado em prática os conhecimentos adquiridos até o momento, mostrando de http://javainterface.wikidot.com/interfacejava
6/36
1/5/2014
Interface Gráfica em JAVA - Java Interface
forma simples o projeto de uma interface gráfica utilizando os componentes básicos do pacote javax.swing. import java.awt.*; import javax.swing.*; public class JFrameLog extends JFrame{ private JLabel labelNome; private JLabel labelSenha; private JLabel labelComent; private JTextField textNome; //Cria um campo de texto que exibe um caracter no lugar do texto digitado //geralmente utilizado como campo de senha private JPasswordField textSenha; private JTextArea textComent; private JButton buttonOk; private JButton buttonCancelar; private JScrollPane paneComent; public JFrameLog(){ super("Exemplo prático - Interface Login"); //Rótulos labelNome = new JLabel("Nome"); labelSenha = new JLabel("Senha"); labelComent = new JLabel("Comentário"); //Campos de Texto textNome = new JTextField(25); textSenha = new JPasswordField(25); //define qual caracter será exibido //no lugar do texto digitado textSenha.setEchoChar('*'); textComent = new JTextArea(10, 25); textComent.setLineWrap(true); //Painel de rolagem paneComent = new JScrollPane(textComent, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); //Botões buttonOk = new JButton("OK"); buttonCancelar = new JButton("Cancelar"); //Captura painel do JFrame Container pane = this.getContentPane(); //define o layout pane.setLayout(new FlowLayout(FlowLayout.LEFT)); //adiciona componentes ao painel pane.add(labelNome); pane.add(textNome); pane.add(labelSenha); pane.add(textSenha); pane.add(labelComent); pane.add(paneComent); pane.add(buttonOk); pane.add(buttonCancelar); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(310, 380); this.setResizable(false); //não pode ter seu tamanho redefinido this.setVisible(true); } public static void main(String[] args){ JFrameLog log = new JFrameLog(); } }
http://javainterface.wikidot.com/interfacejava
7/36
1/5/2014
Interface Gráfica em JAVA - Java Interface
Figura 6: Resultado obtido no experimento prático 1 JCheckBox: é um tipo de caixa de seleção. Exemplo 9: Utilizando o JCheckBox. import java.awt.*; import javax.swing.*; public class JFrameExemplo extends JFrame{ private JLabel label = new JLabel("Linguagem em que programo:"); private JCheckBox checkJava; private JCheckBox checkCSharp; private JCheckBox checkVB; public JFrameExemplo(){ //O JCheckBox possui vários construtores: //JCheckBox(String)define o texto //JCheckBox(String, boolean) define o texto e o estado //JCheckBox(Icon) define uma imagem //JCheckBox(Icon, boolean) define uma imagem e o estado //JCheckBox(String, Icon) define o texto e uma imagem //JCheckBox(String, Icon, boolean) define o texto, imagem e o estado checkJava = new JCheckBox("Java"); checkCSharp = new JCheckBox("CSharp"); checkVB = new JCheckBox("Visual Basic"); Container pane1 = this.getContentPane(); JPanel pane2 = new JPanel(new FlowLayout(FlowLayout.LEFT)); JPanel pane3 = new JPanel(new FlowLayout(FlowLayout.CENTER)); pane1.setLayout(new GridLayout(2, 1)); pane2.add(label); pane3.add(checkJava); pane3.add(checkCSharp); pane3.add(checkVB); pane1.add(pane2); http://javainterface.wikidot.com/interfacejava
8/36
1/5/2014
Interface Gráfica em JAVA - Java Interface
pane1.add(pane3); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(310, 120); this.setResizable(false); //formulário não pode ter seu tamanho //redefinido this.setVisible(true); } public static void main(String[] args){ JFrameExemplo exemplo = new JFrameExemplo(); } }
Figura 7: utilização do JCheckBox JRadioButton: Tipo de caixa de opção. Exemplo 10: Utilizando o JRadioButton. import java.awt.*; import javax.swing.*; public class JFrameExemplo extends JFrame{ private JLabel label = new JLabel("Qual linguagem você tem mais conhecimento: "); //JRadioButton possui os mesmos construtores de JCheckbox private JRadioButton[] linguagem = new JRadioButton[3]; //o buttongroup agrupa componentes //se o componentes possui o atributo Selected então //apenas um componente dentro desse buttongroup poderá ter //o estado Selected como verdadeiro private ButtonGroup group = new ButtonGroup(); public JFrameExemplo(){ linguagem[0] = new JRadioButton("JAVA"); linguagem[1] = new JRadioButton("C#"); linguagem[2] = new JRadioButton("VB"); Container pane = this.getContentPane(); pane.setLayout(new GridLayout(4, 1)); pane.add(label); for (int i = 0; i < linguagem.length; i++){ group.add(linguagem[i]); pane.add(linguagem[i]); } this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(310, 200); this.setResizable(false); //formulário não pode ter seu tamanho redefinido http://javainterface.wikidot.com/interfacejava
9/36
1/5/2014
Interface Gráfica em JAVA - Java Interface
this.setVisible(true); } public static void main(String[] args){ JFrameExemplo exemplo = new JFrameExemplo(); } }
Figura 8: Interface com JRadioButton JComboBox: É uma caixa de combinação que fornece uma lista drop-down que mostra as opções e permite a escolha de apenas um item. Exemplo 11: Utilizando o JComboBox import javax.swing.*; public class JFrameExemplo extends JFrame{ private JLabel labelMes = new JLabel("Informe o Mês:"); private JLabel labelAno = new JLabel("Informe o Ano:"); /*JComboBox apresenta uma lista drop-down com as opções. O JComboBox pode ter seu texto editado ou não Quando ele não editado os únicos valores que ele aceita são os valores presentes na lista drop-down*/ private JComboBox comboMes = new JComboBox(); private JComboBox comboAno = new JComboBox(); public JFrameExemplo(){ super("Testando JComboBox"); Container pane1 = this.getContentPane(); pane1.setLayout(new GridLayout(2,1)); JPanel pane2 = new JPanel(new FlowLayout(FlowLayout.LEFT)); JPanel pane3 = new JPanel(new FlowLayout(FlowLayout.LEFT)); comboMes.addItem("JANEIRO"); comboMes.addItem("FEVEIRO"); comboMes.addItem("MARÇO"); comboMes.addItem("ABRIL"); comboMes.addItem("MAIO"); comboMes.addItem("JUNHO"); comboMes.addItem("JULHO"); comboMes.addItem("AGOSTO"); comboMes.addItem("SETEMBRO"); comboMes.addItem("OUTUBRO"); comboMes.addItem("NOVEMBRO"); comboMes.addItem("DEZEMBRO"); for (int i = 1990; i