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:
Depois com o Desktop:
O Numero:
E finalmente a Janela Texto:
Para baixar o projeto já com as imagens, basta clicar aqui.
Espero que tenham gostado! Em breve teremos mais!
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 by Daniel on 12 de Agosto de 2009 - 12:30
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 by Flávio J. Mendes on 12 de Agosto de 2009 - 12:44
#3 by Domingos Magalhaes on 22 de Março de 2010 - 6:29
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