Descubra o Código (Aplicativo em Swing)


Sejam bem vindos de volta senhoras e senhores!
Primeiramente gostaria de explicar o motivo pelo qual me ausentei todo esse tempo. Fiquei doente. Quando estava prestes a voltar ao batente, começaram as provas finais na Faculdade e tive que enfiar a cara nos livros. Então, finalmente quando terminaram as provas, me dei merecidas férias de estudos (férias de trabalho nunca) e agora estou aqui de volta, para estudar bastante até o final do ano e compartilhar meus conhecimentos com vocês.

Vamos recomeçar os trabalhos com um programinha bem simples em Java Swing – mas bem interessante.
Se trata de um Frame com vários campos numéricos, que, quando colocada a numeração correta, liberam um botão para a abertura de um novo Frame.



Acredito que visualizando antes ver o código seja mais interessante. Para baixar clique aqui.

Vamos para a prática. Teremos 4 Classes: Main, Desktop, Numero e JanelaTexto.

Começando com o Main:

 Java |  copy code |? 
01
02
public class Main extends JFrame{
03
 
04
	public Main(){
05
		super("Descubra o Código");//define o título do JFrame
06
		setResizable(false);//Não deixa mudar o tamanho do Frame
07
		this.setBounds(100, 100, 390, 180);//Seta o tamanho e posição do frame.
08
		this.add(new Desktop());//adiciona um Desktop ao frame
09
	}
10
 
11
	public static void main(String[] args) {
12
		Main main = new Main();//intancia um novo main
13
		main.setVisible(true);//seta visível
14
	}
15
 
16
}
17

Depois com o Desktop:

 Java |  copy code |? 
01
02
public class Desktop extends JDesktopPane{
03
	Numero numero1;//numero 1
04
	Numero numero2;//numero 2
05
	Numero numero3;//numero 3
06
	Numero numero4;//numero 4
07
	Numero numero5;//numero 5
08
	Numero numero6;//numero 6
09
	Numero numero7;//numero 7
10
	Numero numero8;//numero 8
11
	public Desktop(){
12
 
13
		numero1 = new Numero(20,20,2,0);//instancia numero no numero1
14
		numero2 = new Numero(50,20,0,1);//instancia numero no numero2
15
		numero3 = new Numero(80,20,0,2);//instancia numero no numero3
16
		numero4 = new Numero(110,20,4,3);//instancia numero no numero4
17
		numero5 = new Numero(140,20,2,4);//instancia numero no numero5
18
		numero6 = new Numero(170,20,0,5);//instancia numero no numero6
19
		numero7 = new Numero(200,20,0,6);//instancia numero no numero7
20
		numero8 = new Numero(230,20,8,7);//instancia numero no numero8
21
 
22
		add(numero1);//adiciona numero1 no desktop
23
		add(numero2);//adiciona numero2 no desktop
24
		add(numero3);//adiciona numero3 no desktop
25
		add(numero4);//adiciona numero4 no desktop
26
		add(numero5);//adiciona numero5 no desktop
27
		add(numero6);//adiciona numero6 no desktop
28
		add(numero7);//adiciona numero7 no desktop
29
		add(numero8);//adiciona numero8 no desktop
30
 
31
		JButton botaoOk = new JButton("OK");//instancia novo botao
32
		botaoOk.setBounds(290,43,70,50);//seta parametros do botao
33
		botaoOk.setFont(new Font("Dialog", Font.BOLD, 24));//seta fonte do botao
34
		add(botaoOk);//adiciona botao no desktop
35
 
36
		botaoOk.addActionListener(new java.awt.event.ActionListener() {//adiciona novo action listener no botao
37
			public void actionPerformed(java.awt.event.ActionEvent e) {
38
				if(numero1.getNovoNum() == 2 &&//verifica se o numero é o código
39
						numero2.getNovoNum() == 0 &&//verifica se o numero é o código
40
						numero3.getNovoNum() == 0 &&//verifica se o numero é o código
41
						numero4.getNovoNum() == 4 &&//verifica se o numero é o código
42
						numero5.getNovoNum() == 2 &&//verifica se o numero é o código
43
						numero6.getNovoNum() == 0 &&//verifica se o numero é o código
44
						numero7.getNovoNum() == 0 &&//verifica se o numero é o código
45
						numero8.getNovoNum() == 8){//verifica se o numero é o código
46
 
47
					new JanelaTexto().setVisible(true);//se o codigo for certo abre o novo frame.
48
				}
49
			}
50
		});
51
	}
52
}
53

O Numero:

 Java |  copy code |? 
001
002
public class Numero extends JComponent{
003
	private int valor;//valor do numero
004
	private JTextField numero1;//textfield onde ficara o número
005
	private int codigo;//codigo certo
006
	private int novoNum;//variavel de controle do numero atual
007
 
008
	JLabel cimaLabel1;//seta para cima
009
	JLabel baixoLabel1;//seta para baixo
010
 
011
	public Numero(int eixoX, int eixoY,int codigo,int valorInicial){
012
		this.codigo = codigo;//codigo é igual a codigo passado
013
		this.novoNum = valorInicial;//novoNum é igual valorInicial passado
014
 
015
		this.setBounds(eixoX,eixoY,50,200);//seta posição do número
016
 
017
		InputStream is = getClass().getResourceAsStream("setaCima.jpg");//novo inputStream da imagem da seta
018
		InputStream is2 = getClass().getResourceAsStream("setaBaixo.jpg");//novo inputStream da imagem da seta
019
		try {
020
			ImageIcon setaCima = new ImageIcon(ImageIO.read(is));//novo Icone setaCima
021
			ImageIcon setaBaixo = new ImageIcon(ImageIO.read(is2));//novo Icone setaBaixo
022
			cimaLabel1 = new JLabel(setaCima);//label onde ficara o mapa ja adicionando a imagem
023
			baixoLabel1 = new JLabel(setaBaixo);//label onde ficara o mapa ja adicionando a imagem
024
 
025
		} catch (IOException e) {}
026
 
027
		numero1 = new JTextField(""+valorInicial);//seta valor do textfield 
028
		numero1.setBorder(new LineBorder(Color.BLACK));//seta borda do textfield
029
		numero1.setFont(new Font("Dialog", Font.BOLD, 24));//seta fonte do textfield
030
		numero1.setHorizontalAlignment(SwingConstants.CENTER);//seta valor do textfield centralizado
031
		numero1.setEditable(false);//nao textfield deixa ser editado
032
 
033
		add(numero1);//adiciona numero1 no componente
034
		add(cimaLabel1);//adiciona cimaLabel no componente
035
		add(baixoLabel1);//adiciona baixoLabel no componente
036
		cimaLabel1.setBounds(7,0,16, 16);//seta posicao e tamanho de cimaLabel
037
		baixoLabel1.setBounds(7,90,16, 16);//seta posicao e tamanho de baixoLabel
038
		numero1.setBounds(0,30,30, 35);//seta posicao e tamanho de numero1
039
 
040
		cimaLabel1.addMouseListener(new MouseAdapter() {//adiciona Listener do Mouse ao cimaLabel
041
 
042
			public void mouseClicked(MouseEvent event) {//se mouse clicado
043
				int novoNum = Integer.parseInt(numero1.getText())+1;//novoNum é o numero atual mais 1
044
				if(novoNum > 9){//se o novo numero for maior que 9,
045
					novoNum = 0;//volta a 0
046
				}
047
				setNovoNum(novoNum);//novoNum é o novo numero calculado 
048
				numero1.setText(novoNum+"");//seta texto do textfield como o novoNum
049
			}
050
		});
051
 
052
		baixoLabel1.addMouseListener(new MouseAdapter() {//adiciona Listener do Mouse ao baixoLabel
053
			public void mouseClicked(MouseEvent event) {//se mouse clicado
054
				int novoNum = Integer.parseInt(numero1.getText())-1;//novoNum é o numero atual menos 1
055
 
056
				if(novoNum < 0){//se o novo numero for menor que 0,
057
					novoNum = 9;//volta a 9
058
				}
059
				setNovoNum(novoNum);//novoNum é o novo numero calculado
060
				numero1.setText(novoNum+"");//seta texto do textfield como o novoNum
061
 
062
			}
063
		});
064
		verificaCor();//chama verificaCor()
065
	}
066
 
067
 
068
	public void verificaCor(){//verificaCor
069
		new Thread(){//instancia nova thread já implementando o método run()
070
			@Override
071
			public void run() {//sobrescreve o método run()
072
 
073
				while(0==0){
074
					if(getNovoNum() == getCodigo()){//se novoNum for o codigo
075
						numero1.setBackground(new Color(155,253	,106));//fica verde
076
					}else{
077
						numero1.setBackground(new Color(253,106,106));//senao fica vermelho
078
					}
079
					try{
080
						sleep(100);//espera 100ms para refazer a verificação.
081
					}catch(Exception e){}
082
				}
083
			}
084
		}.start();//inicia a thread.
085
	}
086
 
087
 
088
 
089
 
090
	public int getNovoNum() {
091
		return novoNum;
092
	}
093
 
094
 
095
	public void setNovoNum(int novoNum) {
096
		this.novoNum = novoNum;
097
	}
098
 
099
 
100
	public JTextField getNumero1() {
101
		return numero1;
102
	}
103
 
104
 
105
	public void setNumero1(JTextField numero1) {
106
		this.numero1 = numero1;
107
	}
108
 
109
 
110
	public int getCodigo() {
111
		return codigo;
112
	}
113
 
114
 
115
	public void setCodigo(int codigo) {
116
		this.codigo = codigo;
117
	}
118
 
119
 
120
	public int getValor() {
121
		return valor;
122
	}
123
 
124
 
125
	public void setValor(int valor) {
126
		this.valor = valor;
127
	}
128
}
129

E finalmente a Janela Texto:

 Java |  copy code |? 
01
02
public class JanelaTexto extends JFrame{
03
 
04
	public JanelaTexto(){
05
		super("Janela Nova");
06
		setResizable(false);
07
		setBounds(300, 300, 600, 200);
08
		JDesktopPane jpane = new JDesktopPane();
09
		add(jpane);
10
 
11
		JTextArea texto = new JTextArea("Você descobriu o código!!!");
12
		texto.setBounds(2,0,590,200);
13
		texto.setEditable(false);
14
 
15
		jpane.add(texto);
16
	}
17
}
18

Para baixar o projeto já com as imagens, basta clicar aqui.

Espero que tenham gostado! Em breve teremos mais!

, , , ,

  1. #1 by Daniel on 12 de Agosto de 2009 - 12:30

    Ficou massa mlq… baixei e testei… mais pq não colocar um array de Numero no Desktop??

    e acho q nas partes…
    numero1.getNovoNum() == 0 &&//verifica se o numero é o código 0
    numero2.getNovoNum() == 0 &&//verifica se o numero é o código 0
    ….

    tinha q ser..

    numero1.getNovoNum() == numero1.getCodigo() &&
    numero2.getNovoNum() == numero2.getCodigo() … assim por diante
  2. #2 by Flávio J. Mendes on 12 de Agosto de 2009 - 12:44

    Tá certo.. ficaria melhor mesmo! Vale a dica!
  3. #3 by Domingos Magalhaes on 22 de Março de 2010 - 6:29

    Flavio Mendes;

    Muito legal esse seu Descubra o Código,(aplicativo em swing); Novato em java mais gostaria de aprender muito principalmente com quem já domina, é que tentando fazer um aplicativo como trabalho de defesa do fim de curso,(Engenharia de Informática de Gestão).Minha duvida Como eu posso inserir um ícone na barra de titulo do JFRAME estou usando o eclipse

    Obrigado
    D.Magalhaes
(não será publicado)