Baixe o app para aproveitar ainda mais
Prévia do material em texto
© ELFS 139 • Vamos discutir como construir aplicações com interface gráfica de usuário (conhecida como GUI - Graphical User Interface). • Numa interface gráfica existem botões, caixas de texto, painéis, barras de rolagem, e muitos outros componentes com os quais o usuário pode interagir. Java dispõe de APIs apropriadas para a construção de GUIs. 9. Interfaces Gráficas de Usuário © ELFS 140 • Toda interface gráfica em Java tem como superclasse de mais alto nível a classe java.awt.Component. Logo, qualquer objeto presente em uma janela gráfica é um Component. • Basicamente há dois tipos de componentes: n descendentes diretos de Component (CheckBox, Button, Label, ...); n descendentes de Container, que são componentes que podem conter outros componentes como Panel, ScrollPane, Window, ... java.lang.Object java.awt.Component javax.swing.JComponent java.awt.Container 9. Interfaces Gráficas de Usuário © ELFS 141 • Toda interface gráfica requer, pelo menos, um container para acomodar os demais componentes que irão compor a GUI. As classes dos containers possuem métodos apropriados para o desenho de componentes e para o tratamento dos eventos gerados devido à interação com o usuário. • As principais classes containers são: • JFrame: Implementa uma janela gráfica com todas as funcionalidades (redimensionamento, fechamento, minimização, ...) sendo, portanto, a classe base para qualquer aplicativo com GUI. • JDialog: Implementa uma janela gráfica dependente de outra janela. • O posicionamento dos elementos no container é feito de maneira automática por gerenciadores de layout. Cada container tem seu gerenciador de layout padrão. Se não existir um gerenciador de layout associado ao container (layout = null), o posicionamento dos componentes no container deve ser feito manualmente. 9. Interfaces Gráficas de Usuário © ELFS 142 JComponent JMenuBar JList JLabel JComboBox JTextComponent JScrollPane JScrollBar JPopupMenu JPanel JEditorPane JTextArea JTextField JButton JMenuItem JToggleButton JRadioButton JRadioButtonMenuItem JMenu AbstractButton JCheckBoxMenuItem JCheckBox JTextPane JPasswordField 9. Interfaces Gráficas de Usuário Alguns componentes de GUI: © ELFS 143 Exemplo 1: Uma janela sem nada • A GUI será um objeto da classe JFrame (campo privado da classe). • O construtor padrão da classe cria a GUI e define o título e o tamanho da janela. • O que acontece ao fechar a janela? public class Exemplo1 { private JFrame janela; public Exemplo1() { janela = new JFrame("Primeira Janela"); janela.setSize(400,300); janela.setVisible(true); } public static void main(String[] args) { Exemplo1 p = new Exemplo1(); } } Exemplo1.java Os métodos setSize() e setVisible() são obrigatórios. Comente essa linha e verifique o que acontece. 9. Interfaces Gráficas de Usuário © ELFS 144 Exemplo 2: Liberar a JVM ao fechar a janela • Normalmente, o fechamento de uma janela apenas a torna invisível. Com o método setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE), ao fechar a janela será chamado o método exit(), que libera a JVM. public class Exemplo2 { private JFrame janela; public Exemplo2() { janela = new JFrame("Primeira Janela"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setSize(400,300); janela.setVisible(true); } public static void main(String[] args) { Exemplo2 p = new Exemplo2(); } } Exemplo2.java 9. Interfaces Gráficas de Usuário Exemplo 3: Adicionando componentes © ELFS 145 public class Exemplo3 { private JFrame janela; public Exemplo3() { janela = new JFrame("Janela com Componentes"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = janela.getContentPane(); JLabel rotulo = new JLabel("Elemento JLabel"); JButton botao = new JButton("Botão Simples"); c.setLayout(new FlowLayout()); c.add(botao); c.add(rotulo); janela.setSize(400,300); janela.setVisible(true); } public static void main(String[] args) { Exemplo3 p = new Exemplo3(); } } Notar que os componentes são incluídos na área de conteúdo (ContentPane) da janela gráfica. Exemplo3.java 9. Interfaces Gráficas de Usuário O gerenciador FlowLayout acomoda os componentes da esquerda para a direita, na ordem em que são incluídos na janela. © ELFS 146 O Componente JPanel • GUIs complexas exigem componentes colocados em posições específicas. A interface gráfica a seguir, por exemplo, pode ser construída usando-se 4 painéis: superior (P1), inferior (P2), central (P3) e à direita (P4). • Um painel é um contêiner e portanto, pode conter qualquer outro componente, inclusive outros painéis. Cada painel pode ter o seu próprio gerenciador de layout. Assim, pode-se construir GUIs bastante sofisticadas. P1 P2 P3 P4 9. Interfaces Gráficas de Usuário © ELFS 147 Exemplo 4: Janela usando painéis public class Exemplo4 { private JFrame janela; public Exemplo4() { janela = new JFrame("Janela com Componentes"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = janela.getContentPane(); JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JPanel p3 = new JPanel(); JLabel label = new JLabel("Elemento JLabel"); JButton botao = new JButton("Botão simples"); JButton outro = new JButton("Outro botão"); p1.setBackground(Color.yellow); p2.setBackground(Color.white); p1.add(label); p2.add(botao); p3.add(outro); Exemplo4.java Cor de fundo do painel. 9. Interfaces Gráficas de Usuário © ELFS 148 c.setLayout(new BorderLayout()); c.add(p1,BorderLayout.NORTH); c.add(p2,BorderLayout.SOUTH); c.add(p3,BorderLayout.EAST); janela.setSize(400,300); janela.setVisible(true); } public static void main(String[] args) { Exemplo4 p = new Exemplo4(); } } O gerenciador BorderLayout divide o painel de conteúdo em 5 regiões: norte, sul, leste, oeste e centro. 9. Interfaces Gráficas de Usuário © ELFS 149 Gerenciadores de Layout • Os gerenciadores de layout organizam os componentes GUI em um contêiner. São estes gerenciadores que definem o posicionamento e o tamanho dos componentes em um contêiner. • Se o gerenciador de layout for desligado, com setLayout(null), será necessário posicionar cada um dos componentes manualmente, com o método setBounds(x, y, largura, altura). • Os principais gerenciadores de layout são: • FlowLayout • BorderLayout • GridLayout • Outro gerenciador de layout importante: • SpringLayout Gerenciador de layout bem flexível, normalmente utilizado por construtores automáticos de GUI. 9. Interfaces Gráficas de Usuário © ELFS 150 FlowLayout (padrão para JPanel) • Organiza os componentes sequencialmente, linha por linha, da esquerda para a direita, na ordem em que são incluídos. Os componentes podem ser alinhados à esquerda, à direita ou no centro (o padrão). BorderLayout (padrão para JFrame e JDialog) • Organiza os componentes em 5 regiões: Norte, Sul, Leste, Oeste e Centro. Todo o espaço não utilizado pelas regiões é deixado para o centro. Cada uma das regiões só aceita um componente. No caso de haver vários componentes, incluir um JPanel e depois adicionar os componentes ao painel. GridLayout• Organiza os componentes em linhas e colunas, da esquerda para a direita e de cima para baixo. Qualquer componente adicionado a uma célula ocupa toda a célula. 9. Interfaces Gráficas de Usuário © ELFS 151 Exemplo 5: Uso do gerenciador FlowLayout public class Exemplo5 { private JFrame janela; public Exemplo5() { janela = new JFrame("Janela com FlowLayout"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = janela.getContentPane(); JButton b1 = new JButton("Botão 1"); JButton b2 = new JButton("Botão 2"); JButton b3 = new JButton("Botão 3"); c.setLayout(new FlowLayout(FlowLayout.RIGHT)); c.add(b1); c.add(b2); c.add(b3); janela.setSize(400,300); janela.setVisible(true); } public static void main(String[] args) { Exemplo5 p = new Exemplo5(); } } Exemplo5.java 9. Interfaces Gráficas de Usuário © ELFS 152 Exemplo 6: Uso do gerenciador BorderLayout public class Exemplo6 { private JFrame janela; public Exemplo6() { janela = new JFrame("Janela com BorderLayout"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = janela.getContentPane(); JButton b1 = new JButton("Botão 1"); JButton b2 = new JButton("Botão 2"); JButton b3 = new JButton("Botão 3"); JButton b4 = new JButton("Botão 4"); JButton b5 = new JButton("Botão 5"); c.add(b1, BorderLayout.NORTH); c.add(b2, BorderLayout.SOUTH); c.add(b3, BorderLayout.EAST); c.add(b4, BorderLayout.WEST); c.add(b5, BorderLayout.CENTER); janela.setSize(400,300); janela.setVisible(true); } public static void main(String[] args) { Exemplo6 p = new Exemplo6(); } } Exemplo6.java 9. Interfaces Gráficas de Usuário © ELFS 153 Exemplo 7: Uso do gerenciador GridLayout public class Exemplo7 { private JFrame janela; public Exemplo7() { janela = new JFrame("Janela com GridLayout"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = janela.getContentPane(); c.setLayout(new GridLayout(2,2)); JButton b1 = new JButton("Botão 1"); JButton b2 = new JButton("Botão 2"); JButton b3 = new JButton("Botão 3"); JButton b4 = new JButton("Botão 4"); c.add(b1); c.add(b2); c.add(b3); c.add(b4); janela.setSize(400,300); janela.setVisible(true); } public static void main(String[] args) { Exemplo7 p = new Exemplo7(); } } Exemplo7.java 9. Interfaces Gráficas de Usuário © ELFS 154 Exercícios: Criar as GUIs a seguir. 9. Interfaces Gráficas de Usuário
Compartilhar