Você está aqui: Java ::: Java Swing - Jogos e Aplicações Úteis ::: Animação, Animações, Técnicas de Animação |
Como criar um relógio analógico em Java Swing - Código completo com variáveis e comentários em portuguêsQuantidade de visualizações: 1199 vezes |
Nesta dica mostrarei um código para a criação de um relógio analógico completo em Python, com comentários detalhados e fácil de entender. Veja a imagem: Por simplicidade, eu mantive a mesma cor para todos os elementos da animação e deixei somente o básico mesmo, para que você possa se concentrar nas partes mais importantes. Neste código você aprenderá como definir o tamanho, título e cor de fundo para uma janela do Java Swing. Aprenderá também como criar um Timer em Java e usá-lo para controlar o tempo de atualização dos elementos de uma animação. Por fim, o código mostra como calcular o ângulo dos ponteiros das horas, minutos e segundos e efetuar o desenho das retas saindo do centro do círculo. Você sabia, por exemplo, que o ângulo de 45 graus corresponde exatamente à hora 1:30hs? Em vários exemplos de relógios analógicos na internet, o ponteiro das horas fica preso à uma determinada hora, aguardando o ponteiro dos segundos completar um giro completo. No código que apresento aqui, eu obtive a hora atual como um decimal, o que faz com que o ponteiro das horas mostre a posição real das hora, como um relógio analógico do mundo real. Para estudantes de matemática, engenharia e física, este código é uma boa aplicação da técnica de se converter coordenadas polares para coordenadas cartesianas. Eis o código completo para o relógio analógico em Java Swing. Boa diversão. Código para a classe RelogioDigital.java: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.time.LocalTime; import javax.swing.JPanel; import javax.swing.Timer; class RelogioDigital extends JPanel { // algumas variáveis de configuração int largura_painel = 600; int altura_painel = 400; int raio = 150; int x_inicial = 300; int y_inicial = 200; int distancia_aro = 20; // construtor da classe public RelogioDigital(){ // definimos o tamanho do JPanel this.setPreferredSize(new Dimension(largura_painel, altura_painel)); // definimos a cor de fundo this.setBackground(Color.WHITE); // iniciamos o Timer com intervalo de 1 segundo new Timer(1000, (ActionEvent e) -> { // redesenha o painel this.repaint(); }).start(); } @Override public void paintComponent(Graphics gg) { super.paintComponent(gg); // vamos obter o objeto Graphics2D Graphics2D g = (Graphics2D) gg; g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // vamos definir a fonte para desenhar os números do relógio g.setFont(new Font("TimesRoman", Font.PLAIN, 20)); // desenha o círculo do relógio g.drawOval(x_inicial - raio, y_inicial - raio, raio * 2, raio * 2); // desenha o círculo interno do relógio g.fillOval(x_inicial - 4, y_inicial - 4, 8, 8); // vamos desenhar os números do relório (1-12) for(int i = 1; i < 13; i++){ // calcula o ângulo dessa hora double angulo = Math.toRadians((i * (360 / 12)) - 90); // agora convertemos o ângulo e o raio para coordenadas cartesianas int x = (int)(Math.cos(angulo) * (raio - distancia_aro)) + x_inicial - 5; if(i > 9){ x = (int)(Math.cos(angulo) * (raio - distancia_aro)) + x_inicial - 10; } int y = (int)(Math.sin(angulo) * (raio - distancia_aro)) + y_inicial + 5; g.drawString(Integer.toString(i), x, y); } // agora vamos obter as horas, minutos e segundos LocalTime time = LocalTime.now(); double horas = time.getHour(); int minutos = time.getMinute(); int segundos = time.getSecond(); // ajustamos as horas para tratar a hora decimal (com frações de horas) horas = horas + (minutos * (1 / 60)) + (segundos * (1 / 3600)); // vamos desenhar o ponteiro das horas double angulo_horas = Math.toRadians((horas * (360 / 12)) - 90); // agora convertemos o ângulo e o raio para coordenadas cartesianas int x = (int)(Math.cos(angulo_horas) * (raio - 75)) + x_inicial - 5; int y = (int)(Math.sin(angulo_horas) * (raio - 75)) + y_inicial + 5; g.drawLine(x_inicial, y_inicial, x, y); // desenha o ponteiro dos minutos double angulo_minutos = Math.toRadians((minutos * (360 / 60)) - 90); // agora convertemos o ângulo e o raio para coordenadas cartesianas x = (int)(Math.cos(angulo_minutos) * (raio - 45)) + x_inicial - 5; y = (int)(Math.sin(angulo_minutos) * (raio - 45)) + y_inicial + 5; g.drawLine(x_inicial, y_inicial, x, y); // desenha o ponteiro dos segundos double angulo_segundos = Math.toRadians((segundos * (360 / 60)) - 90); // agora convertemos o ângulo e o raio para coordenadas cartesianas x = (int)(Math.cos(angulo_segundos) * (raio - 35)) + x_inicial - 5; y = (int)(Math.sin(angulo_segundos) * (raio - 35)) + y_inicial + 5; g.drawLine(x_inicial, y_inicial, x, y); } } Código para a classe principal Estudos.java: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; import java.awt.BorderLayout; import java.awt.Container; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class Estudos extends JFrame{ // construtor da classe public Estudos(){ super("Relógio Analógica em Java Swing"); Container c = getContentPane(); c.setLayout(new BorderLayout()); // vamos adicionar o JPanel na tela principal RelogioDigital relogio = new RelogioDigital(); this.add(relogio, BorderLayout.CENTER); this.setResizable(false); this.pack(); // vamos centralizar a janela na tela this.setLocationRelativeTo(null); // mostra a janela principal this.setVisible(true); } public static void main(String args[]){ SwingUtilities.invokeLater(() -> { Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }); } } |
Link para compartilhar na Internet ou com seus amigos: |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico |
Exercícios Resolvidos de Java - Escreva um programa Java que pede para o usuário informar o salário de uma pessoa, o valor de um empréstimo e a quantidade de prestaçõesQuantidade de visualizações: 12008 vezes |
Pergunta/Tarefa: Escreva um programa Java que pede para o usuário informar o salário de uma pessoa, o valor de um empréstimo e a quantidade de prestações. Se o valor da prestação for maior que 20% do salário seu código deverá mostrar a mensagem "Empréstimo não pode ser concedido". Se o empréstimo puder ser concedido escreva "Empréstimo pode ser concedido". Sua saída deve ser parecida com: Informe o salário: 1350 Informe o valor do empréstimo: 6000 Informe a quantidade de parcelas: 12 O valor das parcelas do empréstimo é: 500.0 Empréstimo não pode ser concedido Veja a resolução comentada deste exercício usando Java: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; import java.util.Scanner; public class Estudos { public static void main(String[] args) { // variáveis usadas na resolução do problema double salario, emprestimo, valor_parcela; int quant_prestacoes; // para ler a entrada do usuário Scanner entrada = new Scanner(System.in); // vamos ler os dados System.out.print("Informe o salário: "); salario = Double.parseDouble(entrada.nextLine()); System.out.print("Informe o valor do empréstimo: "); emprestimo = Double.parseDouble(entrada.nextLine()); System.out.print("Informe a quantidade de parcelas: "); quant_prestacoes = Integer.parseInt(entrada.nextLine()); // vamos calcular e mostrar o valor da parcela do empréstimo valor_parcela = emprestimo / quant_prestacoes; System.out.println("O valor das parcelas do empréstimo é: " + valor_parcela); // o empréstimo pode ser concedido? if (valor_parcela > (salario * (20.0 / 100.0))) { System.out.println("Empréstimo não pode ser concedido"); } else{ System.out.println("Empréstimo pode ser concedido"); } System.out.println("\n"); } } |
Java ::: Coleções (Collections) ::: ArrayList |
Como passar uma ArrayList para um método Java - Como escrever um método Java que recebe uma ArrayListQuantidade de visualizações: 12040 vezes |
Em algumas situações precisamos passar um objeto da classe ArrayList para um método Java. Esta dica mostra como isso pode ser feito:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos_java; import java.util.*; public class Estudos{ public static void main(String[] args){ // vamos criar um ArrayList, adicionar alguns elementos // e passá-lo para um método ArrayList<String> nomes = new ArrayList<>(); nomes.add("Osmar J. Silva"); nomes.add("Fernanda de Castro"); nomes.add("José de Oliveira"); // vamos passar o ArrayList para o método imprimir(nomes); System.exit(0); } // um método que recebe um ArrayList e exibe o // o valor de seus elementos public static void imprimir(ArrayList<String> lista){ for(int i = 0; i < lista.size(); i++){ System.out.println(lista.get(i)); } } } Ao executar este código Java nós teremos o seguinte resultado: Osmar J. Silva Fernanda de Castro José de Oliveira |
Java ::: Fundamentos da Linguagem ::: Tipos de Dados |
Como usar null em JavaQuantidade de visualizações: 31601 vezes |
O tipo de dados null é um tipo (ou valor) especial que indica que uma referência não está apontando para nenhum objeto, ou seja, aponta para uma posição de memória nula. Este tipo pode ser atribuído (ou testado) apenas a referências. Seu uso não é permitido com primitivos. Veja um trecho de código no qual definimos que uma variável do tipo String aponta para um objeto nulo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ String nome = null; System.out.println(nome.length()); System.exit(0); } } Este código compila normalmente. Porém, ao tentarmos executá-lo, temos uma exceção de tempo de execução NullPointerException: Exception in thread "main" java.lang.NullPointerException at Estudos.main(Estudos.java:5) Isso aconteceu porque estamos tentando executar um método de um objeto que não existe. Uma técnica muito valiosa é testar se uma referência não está apontando para um objeto nulo. Veja como isso é feito: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ String nome = null; if(nome != null) System.out.println(nome.length()); else System.out.println("Objeto é nulo."); System.exit(0); } } Tenha em mente que, quando uma referência recebe o valor null, o objeto para o qual ela apontava fica imediatamente disponível para o coletor de lixo (Garbagge Colector), ou seja, a memória ocupada pelo objeto pode ser liberada a qualquer momento. Veja agora o que acontece quando tentamos atribuir o valor null a um primitivo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- public class Estudos{ public static void main(String args[]){ int valor = null; System.exit(0); } } Eis a mensagem de erro de compilação: Estudos.java:3: incompatible types found : <nulltype> required: int int valor = null; ^ 1 error |
Vamos testar seus conhecimentos em |
Dimensionamento de pilares de extremidade Pilares são elementos verticais cujo principal esforço normal solicitante é o de compressão. Eles podem ser classificados de acordo com sua posição na estrutura. Sobre os pilares de extremidade, assinale a alternativa correta. A) Os pilares de extremidade se situam no canto da edificação e têm descontinuidade nas duas direções. B) Nos pilares de extremidade, atuam forças normais e momentos que geram o esforço de flexão normal composta. C) Todos os pilares de extremidade são classificados como esbeltos, pois seu índice de esbeltez é acima de 200. D) Para esses pilares, não se recomenda usar o momento mínimo para determinar as solicitações atuantes. E) Esses pilares são submetidos à compressão pura, pois não têm excentricidades iniciais. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em JavaScript |
Qual o resultado da execução do seguinte código JavaScript?document.write(false == '0'); A) 0 B) false C) 1 D) true E) Erro de execução Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em JavaScript |
Um arquivo JavaScript externo precisa, obrigatoriamente, conter a tag <script> A) Verdadeiro B) Falso Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em JavaScript |
A linguagem JavaScript diferencia letras maiúsculas de letras minúsculas (case-sensitive)? A) Sim B) Não Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em JavaScript |
Como arredondar o valor 7.25 para o inteiro mais próximo em JavaScript? A) Math.rnd(7.25) B) Math.round(7.25) C) rnd(7.25) D) round(7.25) Verificar Resposta Estudar Cards Todas as Questões |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Exercícios Resolvidos de Java - Como calcular os fatores de um número em Java - Java para Matemática |
Dicas e truques de outras linguagens |
jQuery - Como remover uma classe (ou classes) de um elemento HTML usando a função removeClass() do jQuery GNU Octave - Como calcular o comprimento da hipotenusa em GNU Octave dadas as medidas do cateto oposto e do cateto adjascente |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |