Baixe o app para aproveitar ainda mais
Prévia do material em texto
© ELFS 74 • 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 classes apropriadas para a construção de GUIs. © ELFS 75 • Toda interface gráfica em Java tem como superclasse a classe Component (que pertence ao pacote java.awt). Logo, qualquer componente presente em uma janela gráfica é um objeto da classe Component. • Vamos considerar, basicamente, os componentes da classe JComponent como: JButton, JLabel, JCheckBox, JFrame, JPanel, JList, JMenu, JRadioButton, JScrollPane, ... • Alguns destes componentes são contêineres, ou seja, componentes que acomodam outros componentes, por exemplo, JPanel. java.lang.Object java.awt.Component javax.swing.JComponent java.awt.Container © ELFS 76 • A janela de uma interface gráfica é construída a partir de uma classe descendente da classe java.awt.Window. • As duas principais classes para construção de GUIs 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. • As classes JFrame e JDialog também são contêineres, pois irão acomodar todos os demais componentes que irão compor a GUI. • O posicionamento dos elementos num contêiner é 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), então o posicionamento dos componentes no contêiner deverá ser feito manualmente. © ELFS 77 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. © ELFS 78 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 Exemplo 3: Adicionando componentes © ELFS 79 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 O gerenciador FlowLayout acomoda os componentes da esquerda para a direita, na ordem em que são incluídos na janela. © ELFS 80 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 © ELFS 81 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. © ELFS 82 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. © ELFS 83 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. © ELFS 84 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. © ELFS 85 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© ELFS 86 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 © ELFS 87 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
Compartilhar