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:
public class Main extends JFrame{
public Main(){
super("Descubra o Código");//define o título do JFrame
setResizable(false);//Não deixa mudar o tamanho do Frame
this.setBounds(100, 100, 390, 180);//Seta o tamanho e posição do frame.
this.add(new Desktop());//adiciona um Desktop ao frame
}
public static void main(String[] args) {
Main main = new Main();//intancia um novo main
main.setVisible(true);//seta visível
}
}
Depois com o Desktop:
public class Desktop extends JDesktopPane{
Numero numero1;//numero 1
Numero numero2;//numero 2
Numero numero3;//numero 3
Numero numero4;//numero 4
Numero numero5;//numero 5
Numero numero6;//numero 6
Numero numero7;//numero 7
Numero numero8;//numero 8
public Desktop(){
numero1 = new Numero(20,20,2,0);//instancia numero no numero1
numero2 = new Numero(50,20,0,1);//instancia numero no numero2
numero3 = new Numero(80,20,0,2);//instancia numero no numero3
numero4 = new Numero(110,20,4,3);//instancia numero no numero4
numero5 = new Numero(140,20,2,4);//instancia numero no numero5
numero6 = new Numero(170,20,0,5);//instancia numero no numero6
numero7 = new Numero(200,20,0,6);//instancia numero no numero7
numero8 = new Numero(230,20,8,7);//instancia numero no numero8
add(numero1);//adiciona numero1 no desktop
add(numero2);//adiciona numero2 no desktop
add(numero3);//adiciona numero3 no desktop
add(numero4);//adiciona numero4 no desktop
add(numero5);//adiciona numero5 no desktop
add(numero6);//adiciona numero6 no desktop
add(numero7);//adiciona numero7 no desktop
add(numero8);//adiciona numero8 no desktop
JButton botaoOk = new JButton("OK");//instancia novo botao
botaoOk.setBounds(290,43,70,50);//seta parametros do botao
botaoOk.setFont(new Font("Dialog", Font.BOLD, 24));//seta fonte do botao
add(botaoOk);//adiciona botao no desktop
botaoOk.addActionListener(new java.awt.event.ActionListener() {//adiciona novo action listener no botao
public void actionPerformed(java.awt.event.ActionEvent e) {
if(numero1.getNovoNum() == 2 &&//verifica se o numero é o código
numero2.getNovoNum() == 0 &&//verifica se o numero é o código
numero3.getNovoNum() == 0 &&//verifica se o numero é o código
numero4.getNovoNum() == 4 &&//verifica se o numero é o código
numero5.getNovoNum() == 2 &&//verifica se o numero é o código
numero6.getNovoNum() == 0 &&//verifica se o numero é o código
numero7.getNovoNum() == 0 &&//verifica se o numero é o código
numero8.getNovoNum() == 8){//verifica se o numero é o código
new JanelaTexto().setVisible(true);//se o codigo for certo abre o novo frame.
}
}
});
}
}
O Numero:
public class Numero extends JComponent{
private int valor;//valor do numero
private JTextField numero1;//textfield onde ficara o número
private int codigo;//codigo certo
private int novoNum;//variavel de controle do numero atual
JLabel cimaLabel1;//seta para cima
JLabel baixoLabel1;//seta para baixo
public Numero(int eixoX, int eixoY,int codigo,int valorInicial){
this.codigo = codigo;//codigo é igual a codigo passado
this.novoNum = valorInicial;//novoNum é igual valorInicial passado
this.setBounds(eixoX,eixoY,50,200);//seta posição do número
InputStream is = getClass().getResourceAsStream("setaCima.jpg");//novo inputStream da imagem da seta
InputStream is2 = getClass().getResourceAsStream("setaBaixo.jpg");//novo inputStream da imagem da seta
try {
ImageIcon setaCima = new ImageIcon(ImageIO.read(is));//novo Icone setaCima
ImageIcon setaBaixo = new ImageIcon(ImageIO.read(is2));//novo Icone setaBaixo
cimaLabel1 = new JLabel(setaCima);//label onde ficara o mapa ja adicionando a imagem
baixoLabel1 = new JLabel(setaBaixo);//label onde ficara o mapa ja adicionando a imagem
} catch (IOException e) {}
numero1 = new JTextField(""+valorInicial);//seta valor do textfield
numero1.setBorder(new LineBorder(Color.BLACK));//seta borda do textfield
numero1.setFont(new Font("Dialog", Font.BOLD, 24));//seta fonte do textfield
numero1.setHorizontalAlignment(SwingConstants.CENTER);//seta valor do textfield centralizado
numero1.setEditable(false);//nao textfield deixa ser editado
add(numero1);//adiciona numero1 no componente
add(cimaLabel1);//adiciona cimaLabel no componente
add(baixoLabel1);//adiciona baixoLabel no componente
cimaLabel1.setBounds(7,0,16, 16);//seta posicao e tamanho de cimaLabel
baixoLabel1.setBounds(7,90,16, 16);//seta posicao e tamanho de baixoLabel
numero1.setBounds(0,30,30, 35);//seta posicao e tamanho de numero1
cimaLabel1.addMouseListener(new MouseAdapter() {//adiciona Listener do Mouse ao cimaLabel
public void mouseClicked(MouseEvent event) {//se mouse clicado
int novoNum = Integer.parseInt(numero1.getText())+1;//novoNum é o numero atual mais 1
if(novoNum > 9){//se o novo numero for maior que 9,
novoNum = 0;//volta a 0
}
setNovoNum(novoNum);//novoNum é o novo numero calculado
numero1.setText(novoNum+"");//seta texto do textfield como o novoNum
}
});
baixoLabel1.addMouseListener(new MouseAdapter() {//adiciona Listener do Mouse ao baixoLabel
public void mouseClicked(MouseEvent event) {//se mouse clicado
int novoNum = Integer.parseInt(numero1.getText())-1;//novoNum é o numero atual menos 1
if(novoNum < 0){//se o novo numero for menor que 0,
novoNum = 9;//volta a 9
}
setNovoNum(novoNum);//novoNum é o novo numero calculado
numero1.setText(novoNum+"");//seta texto do textfield como o novoNum
}
});
verificaCor();//chama verificaCor()
}
public void verificaCor(){//verificaCor
new Thread(){//instancia nova thread já implementando o método run()
@Override
public void run() {//sobrescreve o método run()
while(0==0){
if(getNovoNum() == getCodigo()){//se novoNum for o codigo
numero1.setBackground(new Color(155,253 ,106));//fica verde
}else{
numero1.setBackground(new Color(253,106,106));//senao fica vermelho
}
try{
sleep(100);//espera 100ms para refazer a verificação.
}catch(Exception e){}
}
}
}.start();//inicia a thread.
}
public int getNovoNum() {
return novoNum;
}
public void setNovoNum(int novoNum) {
this.novoNum = novoNum;
}
public JTextField getNumero1() {
return numero1;
}
public void setNumero1(JTextField numero1) {
this.numero1 = numero1;
}
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public int getValor() {
return valor;
}
public void setValor(int valor) {
this.valor = valor;
}
}
E finalmente a Janela Texto:
public class JanelaTexto extends JFrame{
public JanelaTexto(){
super("Janela Nova");
setResizable(false);
setBounds(300, 300, 600, 200);
JDesktopPane jpane = new JDesktopPane();
add(jpane);
JTextArea texto = new JTextArea("Você descobriu o código!!!");
texto.setBounds(2,0,590,200);
texto.setEditable(false);
jpane.add(texto);
}
}
Para baixar o projeto já com as imagens, basta clicar aqui.
Espero que tenham gostado! Em breve teremos mais!

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
Tá certo.. ficaria melhor mesmo! Vale a dica!
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