Você está na página 1de 11

Linguagem de Programao Prof.

Samuel Antonio Vieira


Trabalhando com GridBagLayout
O GridBagLayout um layout mais sofisticado, pois permite uma alocao de recursos em
tipos de grade no componente passando as determinaes em X e Y.

Na posio X=1, Y=2, o componente utilizado foi um JLabel com borda e X=1,Y=3 foi
utilizado um novo componente chamado JComboBox.
Basicamente o JFrame est dividido em duas regies, centro e sul, onde no centro est o
panel com GridBagLayout e no Sul um FlowLayout.
Classe FrmOperacoes
1. package com.gui.aritmetica;
2.
3. import
4. import
5. import
6. import
7.
8.
9. public
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.

java.awt.*;
java.awt.event.*;
javax.swing.*;
com.aritmetica.*;
class FrmOperacoes extends JFrame implements ActionListener{
private
private
private
private
private
private
private
private
private
private
private
private
private
private
private

JPanel jpnlCentro;
JPanel jpnlSul;
JLabel rotulo1;
JLabel rotulo2;
JLabel rotulo3;
JLabel rotulo4;
JLabel jlblResultado;
JTextField jtxtNum1;
JTextField jtxtNum2;
JComboBox jcmbOpercao;
JButton jbtnCalcular;
JButton jbtnLimpar;
JButton jbtnSair;
GridBagConstraints gbc;
String[] operacoes = { "Adio", "Subtrao",

1 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.

"Multiplicao", "Diviso" };
public FrmOperacoes() {
setLayout(new BorderLayout());
gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.LAST_LINE_START;
gbc.insets = new Insets(5, 5, 5, 5);
jpnlCentro = new JPanel(new GridBagLayout());
jpnlSul = new JPanel(new FlowLayout());
rotulo1
rotulo2
rotulo3
rotulo4

=
=
=
=

new
new
new
new

JLabel("Nmero 1: ");
JLabel("Nmero 2: ");
JLabel("Resultado: ");
JLabel("Operao: ");

jlblResultado = new JLabel("0");


jlblResultado.setBorder(BorderFactory.createBevelBorder(1));
jlblResultado.setPreferredSize(new Dimension(114,19));
jtxtNum1 = new JTextField(10);
jtxtNum2 = new JTextField(10);
jcmbOpercao = new JComboBox(operacoes);
jbtnCalcular = new JButton("Calcular");
jbtnLimpar = new JButton("Limpar");
jbtnSair = new JButton("Sair");
add(jpnlCentro, BorderLayout.CENTER);
add(jpnlSul, BorderLayout.SOUTH);
gbc.gridx = 0;
gbc.gridy = 0;
jpnlCentro.add(rotulo1,gbc);
gbc.gridx = 1;
gbc.gridy = 0;
jpnlCentro.add(jtxtNum1,gbc);
gbc.gridx = 0;
gbc.gridy = 1;
jpnlCentro.add(rotulo2,gbc);
gbc.gridx = 1;
gbc.gridy = 1;
jpnlCentro.add(jtxtNum2,gbc);
gbc.gridx = 0;
gbc.gridy = 2;
jpnlCentro.add(rotulo3,gbc);
gbc.gridx = 1;
gbc.gridy = 2;

2 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.

jpnlCentro.add(jlblResultado,gbc);
gbc.gridx = 0;
gbc.gridy = 3;
jpnlCentro.add(rotulo4,gbc);
gbc.gridx = 1;
gbc.gridy = 3;
jpnlCentro.add(jcmbOpercao,gbc);
jpnlSul.add(jbtnCalcular);
jpnlSul.add(jbtnLimpar);
jpnlSul.add(jbtnSair);
jbtnCalcular.addActionListener(this);
jbtnLimpar.addActionListener(this);
jbtnSair.addActionListener(this);
setSize(320,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == jbtnCalcular){
//A fazer
}
else if(e.getSource() == jbtnLimpar){
jtxtNum1.setText("");
jtxtNum2.setText("");
jlblResultado.setText("0");
jcmbOpercao.setSelectedIndex(0);
}
else if(e.getSource() == jbtnSair){
System.exit(0);
}
}

3 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


Diagrama de classe
A classe Operacao uma classe abstrata, ela ser base para todas as operaes. Possui um
mtodo abstrato executar() que ser obrigado a ser implementada por todas as suas classes filhas.
Outra novidade a visibilidade do mtodo setResultado(), ele protegido, o que significa que
apenas as classes filhas podero v-lo.
Sobrecarga de mtodos
Quando dois mtodos tm o mesmo nome e assinaturas diferentes chamado de sobrecarga
de mtodo, isso acontece com setNumero1() e setNumero2().

Classe Operacao
1. package com.aritmetica;
2.
3. public abstract class Operacao {
4.
5.
private double numero1;
6.
private double numero2;
7.
private double resultado;
8.
9.
public abstract void executar();
10.
11.
public double getNumero1() {
12.
return numero1;
13.
}
14.
15.

4 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.

public void setNumero1(double numero1) {


this.numero1 = numero1;
}
public void setNumero1(String numero1) {
this.numero1 = Double.parseDouble(numero1);
}
public double getNumero2() {
return numero2;
}
public void setNumero2(double numero2) {
this.numero2 = numero2;
}
public void setNumero2(String numero2) {
this.numero2 = Double.parseDouble(numero2);
}
protected void setResultado(double resultado) {
this.resultado = resultado;
}
public double getResultado() {
return resultado;
}
}

Classe Adicao
1. package com.aritmetica;
2.
3. public class Adicao extends Operacao {
4.
5.
@Override
6.
public void executar() {
7.
double res = 0;
8.
9.
res = getNumero1() + getNumero2();
10.
11.
setResultado(res);
12.
13.
}
14.
}

Classe Subtracao
1. package com.aritmetica;
2.
3. public class Subtracao extends Operacao {
4.
5.
@Override
6.
public void executar() {
7.
double res = 0;
8.

5 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


9.
10.
11.
12.
13.
14.

res = getNumero1() - getNumero2();


setResultado(res);
}
}

Classe Multiplicacao
1. package com.aritmetica;
2.
3. public class Multiplicacao extends Operacao {
4.
5.
@Override
6.
public void executar() {
7.
double res = 0;
8.
9.
res = getNumero1() * getNumero2();
10.
11.
setResultado(res);
12.
13.
}
14.
}

Classe Divisao
package com.aritmetica;
public class Divisao extends Operacao {
@Override
public void executar() {
double res = 0;
try{
res = getNumero1() / getNumero2();
}
catch(Exception ex){
System.out.println("Erro ao dividir.");
System.out.println(ex.getStackTrace());
}
setResultado(res);
}
}

6 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


Codificando o botao calcular
109.

if(e.getSource() == jbtnCalcular){

110.
Operacao objOperacao = null;
111.
112.
switch (jcmbOperacao.getSelectedIndex()) {
113.
114.
case 0: objOperacao = new Adicao();
115.
break;
116.
117.
case 1: objOperacao = new Subtracao();
118.
break;
119.
120.
case 2: objOperacao = new Multiplicacao();
121.
break;
122.
123.
case 3: objOperacao = new Divisao();
124.
break;
125.
126.
case 4: objOperacao = new Modulo();
127.
break;
128.
129.
default:
130.
JOptionPane.showMessageDialog(null, "Escolha
uma opo vlida!");
131.
break;
132.
}
133.
134.
objOperacao.setNumero1(jtxtNum1.getText());
135.
objOperacao.setNumero2(jtxtNum2.getText());
136.
objOperacao.executar();
137.
138.
jlblResultado.setText(String.valueOf(objOperacao.getResu
ltado()));
139.
}

7 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


JOptionPane
JOptionPane so caixas de dilogos simples para a interao com o usurio. Basicamente
existem:
showInputDialog

showMessageDialog

showConfirmDialog

Exemplo:
1. import javax.swing.JOptionPane;
2.
3.
4. public class AplicativoJOp {
5.
6.
/**
7.
* @param args
8.
*/
9.
public static void main(String[] args) {
10.
String msg = "";
11.
int resposta = 0;
12.
13.
//JOptionPane.NO_OPTION quando o usuario seleciona NAO
na caixa de confirmacao.
14.
15.
while(resposta != JOptionPane.NO_OPTION){
16.
17.
msg = JOptionPane.showInputDialog("Digite uma
mensagem");
18.

8 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


JOptionPane.showMessageDialog(null, msg);

19.
20.
21.

resposta = JOptionPane.showConfirmDialog(null,
"Deseja digitar outra mensagem?");

22.
23.
24.
25.
26.
27.

}
}
}

Melhorando as caixas de mensagem:


Outros parmetros que podem ser passados so, logo aps a mensagem, o ttulo e cone a ser
apresentado, estes servem para o input e messagem;
JOptionPane.showInputDialog(null, "Digite o nmero de lados:", "Programa",
JoptionPane.ERROR_MESSAGE)

No confirm, pode-se tambm, apresentar os botes a serem apresentados.


JOptionPane.showConfirmDialog(null, "Deseja digitar outro nmero?", "Pergunta",
JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE)

Ex:
1. import javax.swing.JOptionPane;
2.
3.
4. public class AplicativoFigura {
5.
6.
/**
7.
* @param args
8.
*/
9.
public static void main(String[] args) {
10.
int lados = 0;
11.
int resposta = 0;
12.
String msg = "";
13.
14.
while(resposta != JOptionPane.NO_OPTION){
15.
lados =
Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o nmero de
lados:", "Programa", JOptionPane.ERROR_MESSAGE));
16.
17.
if(lados == 3){
18.
msg = "Tringulo";
19.
}
20.
else if(lados == 4){
21.
msg = "Quadrado ou Retngulo";
22.
}
23.
else if(lados == 5){
24.
msg = "Pentgono";
25.
}
26.
else if(lados == 6){
27.
msg = "Hexgono";
28.
}

9 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.

else if(lados == 7){


msg = "Heptgono";
}
else if(lados == 8){
msg = "Octgono";
}
else{
msg = "Figura desconhecida";
}
JOptionPane.showMessageDialog(null, msg,
"Figuras", JOptionPane.WARNING_MESSAGE);

40.
41.

resposta = JOptionPane.showConfirmDialog(null,
"Deseja digitar outro nmero?", "Pergunta", JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE);
42.
}
43.
44.
}
45.
46.
}

Usando o switch:
uma estrutura de deciso que pode ser utilizada quando necessrio testar a mesma
varivel vrias vezes de forma seguida.
switch (varivel) {
case valor1:
break;
case valor2:
break;
case valorN:
break;
default:
break;
}

Ex:

1. import javax.swing.JOptionPane;
2. public class AplicativoFigura2 {
3.
4.
/**
5.
* @param args
6.
*/
7.
public static void main(String[] args) {
8.
int lados = 0;
9.
int resposta = 0;
10.
String msg = "";
11.

10 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


while(resposta != JOptionPane.NO_OPTION){
lados =
Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o nmero de
lados:",
14.
"Programa",
JOptionPane.ERROR_MESSAGE));
15.
16.
switch (lados) {
17.
case 3: msg = "Tringulo";
18.
break;
19.
20.
case 4: msg = "Quadrado ou Retngulo";
12.
13.

21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.

break;
case 5: msg = "Pentgono";
break;
case 6: msg = "Hexgono";
break;
case 7: msg = "Heptgono";
break;
case 8: msg = "Octgono";
break;
default:
msg = "Figura desconhecida";
break;
}
JOptionPane.showMessageDialog(null, msg,
"Figuras", JOptionPane.WARNING_MESSAGE);

41.
42.

resposta = JOptionPane.showConfirmDialog(null,
"Deseja digitar outro nmero?", "Pergunta",
43.
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE);
44.
}
45.
46.
}
47.
48.
49.
}

11 - proibida a reproduo deste material sem a autorizao do autor.