Você está aqui: Java ::: Dicas & Truques ::: Gráficos

Como desenhar em um JComponent do Java Swing (JLabel, JButton, JPanel, etc) usando o método paintComponent()

Quantidade de visualizações: 10022 vezes
A classe JComponent possui um método chamado paintComponent(Graphics g) que recebe um objeto da classe Graphics que pode ser usado para desenhar na superfície do componente. Desta forma, qualquer componente que herda de JComponent pode ser usado para esta finalidade.

Para demonstrar como isso é feito, veja um trecho de código no qual desenhamos uma linha em um JLabel e o anexamos à janela do aplicativo. Observe a criação de uma classe personalizada que herda de JLabel:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

import java.awt.*;
import javax.swing.*;

public class Estudos extends JFrame{
  public Estudos() {
    super("Desenhando em um JLabel");
    
    Container c = getContentPane();

    // Cria o JLabel
    MinhaLabel label = new MinhaLabel();
    c.add(label);

    setSize(350, 250);
    setVisible(true);
  }
  
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(
      JFrame.EXIT_ON_CLOSE);
  }
}

// classe personalizada que permite desenhar
class MinhaLabel extends JLabel{
  protected void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawLine(0, 0, 200, 200); 
  }
}


Link para compartilhar na Internet ou com seus amigos:

Java ::: Dicas & Truques ::: Imagens e Processamento de Imagens

Como converter uma imagem colorida para tons de cinza em Java usando o filtro GrayFilter - Processamento de imagens em Java

Quantidade de visualizações: 11335 vezes
O exemplo abaixo mostra como usar a classe GrayFilter para converter uma imagem JPG colorida em uma imagem com tons de cinza. Veja que o segundo argumento no construtor da classe GrayFilter que usamos permite definir o nível de cinza (em porcentagem) que será aplicado:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

import java.awt.*;
import java.io.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import javax.imageio.*;

public class Estudos extends JFrame{
  private BufferedImage imagem;
  private BufferedImage imagemCinza;
  AreaImagem areaImagem;  

  public Estudos(){
    super("Estudos Java");
    
    Container c = getContentPane();
    c.setLayout(new BorderLayout());
	
    JButton btn = new JButton("Carregar Imagem");
    btn.addActionListener(
      new ActionListener(){
        public void actionPerformed(ActionEvent e){
          JFileChooser fc = new JFileChooser();

          int res = fc.showOpenDialog(null);
          if(res == JFileChooser.APPROVE_OPTION){
	    File arquivo = fc.getSelectedFile();  
          
            imagem = null;
          
            try{
              imagem = ImageIO.read(arquivo);
            }
            catch(IOException exc){
              JOptionPane.showMessageDialog(null, 
                "Erro ao carregar a imagem: " + 
                exc.getMessage());
            }

            if(imagem != null){
              areaImagem.imagem = imagem;
              areaImagem.repaint();  
            }
          }
        }
      }
    );

    JButton btn2 = 
      new JButton("Converter Escala Cinza");
    btn2.addActionListener(
      new ActionListener(){
        public void actionPerformed(ActionEvent e){
          converterEscalaCinza();
        }
      }
    );

    JPanel painel = new JPanel();
    painel.setLayout(new FlowLayout());    
    painel.add(btn);
    painel.add(btn2);

    c.add(painel, BorderLayout.SOUTH);
    
    // Cria a área de exibição da imagem
    areaImagem = new AreaImagem();
    c.add(areaImagem, BorderLayout.CENTER);    
	
    setSize(400, 300);
    setVisible(true);
  }

  public void converterEscalaCinza(){
    ImageFilter filter = new GrayFilter(true, 30);
    ImageProducer producer = new FilteredImageSource(
      imagem.getSource(), filter);
    Image imagemTemp = this.createImage(producer);

    // precisamos converter Image para BufferedImage
    imagemCinza = new BufferedImage(imagem.getWidth(),
      imagem.getHeight(), BufferedImage.TYPE_INT_RGB);
    Graphics g = imagemCinza.getGraphics();
    g.drawImage(imagemTemp, 0, 0, null);
    g.dispose();

    areaImagem.imagem = imagemCinza;
    areaImagem.repaint();
  }
  
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

// Sub-classe de JPanel para exibir a imagem
class AreaImagem extends JPanel{
  public BufferedImage imagem;

  public void paintComponent(Graphics g){ 
    super.paintComponent(g);
    
    // desenha a imagem no JPanel
    g.drawImage(imagem, 0, 0, this);
  } 
}



Java ::: Dicas & Truques ::: Ordenação e Pesquisa (Busca)

Java Insertion Sort - Como ordenar um vetor de inteiros usando a ordenação Insertion Sort (Ordenação por Inserção)

Quantidade de visualizações: 4508 vezes
A ordenação Insertion Sort, Insertion-Sort, ou Ordenação por Inserção, possui uma complexidade de tempo de execução igual à ordenação Bubble Sort (Ordenação da Bolha), ou seja, O(n2). Embora mais rápido que o Bubble Sort, e ser um algorítmo de ordenação quadrática, a ordenação Insertion Sort é bastante eficiente para problemas com pequenas entradas, sendo o mais eficiente entre os algoritmos desta ordem de classificação, porém, nunca recomendada para um grande conjunto de dados.

A forma mais comum para o entendimento da ordenação Insertion Sort é compará-la com a forma pela qual algumas pessoas organizam um baralho num jogo de cartas. Imagine que você está jogando cartas. Você está com as cartas na mão e elas estão ordenadas. Você recebe uma nova carta e deve colocá-la na posição correta da sua mão de cartas, de forma que as cartas obedeçam à ordenação.

A cada nova carta adicionada à sua mão de cartas, a nova carta pode ser menor que algumas das cartas que você já tem na mão ou maior, e assim, você começa a comparar a nova carta com todas as cartas na sua mão até encontrar sua posição correta. Você insere a nova carta na posição correta, e, novamente, a sua mão é composta de cartas totalmente ordenadas. Então, você recebe outra carta e repete o mesmo procedimento. Então outra carta, e outra, e assim por diante, até não receber mais cartas.

Esta é a ideia por trás da ordenação por inserção. Percorra as posições do vetor (array), começando com o índice 1 (um). Cada nova posição é como a nova carta que você recebeu, e você precisa inseri-la no lugar correto no sub-vetor ordenado à esquerda daquela posição.

Vamos ver a implementação na linguagem Java agora? Observe o seguinte código, no qual temos um vetor de inteiros com os elementos {4, 6, 2, 8, 1, 9, 3, 0, 11}:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package arquivodecodigos;
 
public class Estudos{
  // método que permite ordenar o vetor de inteiros
  // usando a ordenação Insertion Sort
  public static void insertionSort(int[] vetor){
    // percorre todos os elementos do vetor começando
    // pelo segundo elemento
    for(int i = 1; i < vetor.length; i++){
      int atual = vetor[i]; // o valor atual a ser inserido
      // começa a comparar com a célula à esquerda de i
      int j = i - 1;
      
      // enquanto vetor[j] estiver fora de ordem em relação
      // a atual
      while((j >= 0) && (vetor[j] > atual)){
        // movemos vetor[j] para a direita e decrementamos j
        vetor[j + 1] = vetor[j];
        j--;
      }
      
      // colocamos atual em seu devido lugar
      vetor[j + 1] = atual;
    }
  }  
    
  public static void main(String args[]){
    // vamos criar um vetor com 9 elementos
    int valores[] = {4, 6, 2, 8, 1, 9, 3, 0, 11};
    
    // exibimos o vetor na ordem original
    System.out.println("Ordem original:\n");
    for(int i = 0; i < valores.length; i++){
      System.out.print(valores[i] + "  ");  
    }
    
    // vamos ordenar o vetor agora
    insertionSort(valores);
    
    // exibimos o vetor ordenado
    System.out.println("\n\nOrdenado:\n");
    for(int i = 0; i < valores.length; i++){
      System.out.print(valores[i] + "  ");  
    }
  }
}

Ao executar este código Java nós teremos o seguinte resultado:

Sem ordenação:

4 6 2 8 1 9 3 0 11

Ordenada usando Insertion Sort:

0 1 2 3 4 6 8 9 11


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico

Exercício Resolvido de Java - Como calcular o Índice de Massa Corporal em Java - Como calcular IMC em Java

Quantidade de visualizações: 11845 vezes
Pergunta/Tarefa:

O índice de massa corporal (IMC) é uma medida internacional usada para calcular se uma pessoa está no peso ideal.

Ele foi desenvolvido pelo polímata Lambert Quételet no fim do século XIX. Trata-se de um método fácil e rápido para a avaliação do nível de gordura de cada pessoa, ou seja, é um preditor internacional de obesidade adotado pela Organização Mundial da Saúde (OMS).

O IMC é determinado pela divisão da massa do indivíduo pelo quadrado de sua altura, em que a massa está em quilogramas e a altura em metros. A fórmula é a seguinte:



A classificação é feita de acordo com as seguintes regras:

a) < 16 - Magreza grave
b) 16 a < 17 - Magreza moderada
c) 17 a < 18,5 - Magreza leve
d) 18,5 a < 25 - Saudável
e) 25 a < 30 - Sobrepeso
f) 30 a < 35 - Obesidade Grau I
g) 35 a < 40 - Obesidade Grau II (severa)
h) >= 40 - Obesidade Grau III (mórbida)

Escreva um programa Java que leia o peso e a altura de uma pessoa e retorna seu IMC classificado de acordo com a tabela acima.

Sua saída deverá ser parecida com:

Informe seu peso: 82
Informe sua altura: 1.85
Seu IMC é: 23.959094229364496
Sua classificação é Saudável
Resposta/Solução:

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) {
    Scanner entrada = new Scanner(System.in);  
    
    // vamos solicitar o peso e a altura da pessoa
    System.out.print("Informe seu peso: ");
    double peso = Double.parseDouble(entrada.nextLine());
    System.out.print("Informe sua altura: ");
    double altura = Double.parseDouble(entrada.nextLine()); 
    
    // vamos calcular o IMC
    double imc = peso / (altura * altura);
    System.out.println("Seu IMC é: " + imc);
    
    // vamos mostrar a classificação
    if(imc < 16){
      System.out.println("Sua classificação é Magreza grave");  
    }
    else if((imc >= 16) && (imc < 17)){
      System.out.println("Sua classificação é Magreza moderada");  
    }
    else if((imc >= 17) && (imc < 18.5)){
      System.out.println("Sua classificação é Magreza leve");  
    }
    else if((imc >= 18.5) && (imc < 25)){
      System.out.println("Sua classificação é Saudável");  
    }
    else if((imc >= 25) && (imc < 30)){
      System.out.println("Sua classificação é Sobrepeso");  
    }
    else if((imc >= 30) && (imc < 35)){
      System.out.println("Sua classificação é Obesidade Grau I");  
    }
    else if((imc >= 35) && (imc < 40)){
      System.out.println("Sua classificação é Obesidade Grau II");  
    }
    else{
      System.out.println("Sua classificação é Obesidade Grau III (mórbida)");   
    }
    
    System.out.println("\n");
  }
}



Vamos testar seus conhecimentos em Hidrologia

São exemplos de objetos do espaço físico que compreendem o estudo da hidrografia, com exceção de

A) nascentes.

B) lagos.

C) rios.

D) matas.

E) aquíferos.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em JavaScript

Analise o seguinte trecho de código JavaScript

var valores = new Array(2, 4);

Este código

A) cria uma matriz chamada valores com 2 linhas e 4 colunas.

B) cria um array valores e atribui os valores 2 e 4 para valores[1] e valores[2].

C) cria um array valores e atribui os valores 2 e 4 para valores[0] e valores[1].

D) cria um array de três elementos com os índices variando de 2 até 4.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais

Instalações prediais de águas pluviais

Um professor de engenharia que gostava de fazer os alunos pensarem ativamente e questionarem a base das tabelas e ábacos fez uma pergunta em classe a partir dos ábacos da NBR 10844 de instalações prediais de águas pluviais: por que os ábacos com saída do tipo aresta viva fornecem maiores diâmetros que as do tipo funil? Cinco principais explicações foram fornecidas pelas classes, mas apenas uma estava correta. Marque a opção que explica corretamente o fenômeno.

A) As saídas do tipo aresta viva fornecem maior capacidade de escoamento por permitir maior lâmina de água imediatamente sobre a entrada.

B) As saídas do tipo funil geram aumento da perda de carga, ocasionando uma redução da capacidade hidráulica, que é, então, expressa no ábaco.

C) As saídas em aresta viva geram uma incorporação de ar indesejada ao escoamento, ocasionando um efeito de sucção que reduz a capacidade hidráulica.

D) As saídas do tipo funil necessitam de maior altura até chegar ao diâmetro da tubulação e isso é compensado em relação ao parâmetro L do ábaco.

E) As saídas em arestas vivas têm menor perda de carga, o que implica a incorporação de ar com consequente redução da capacidade hidráulica.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Python

Qual o resultado da execução do seguinte código Python?

soma = 0
for i in range(0, 10):
  soma = soma + 3
  if i > 4:
    break
  
print("A soma é: {0}".format(soma))

A) A soma é: 9

B) A soma é: 19

C) A soma é: 24

D) A soma é: 18

E) A soma é: 28
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Ética e Legislação Profissional

Ética Empresarial e Profissional: Noções Gerais

O termo "moral" vem do latim mores, que quer dizer costumes. Portanto, moral é um conjunto de hábitos e costumes praticados por um grupo. Tais hábitos e costumes são aceitos e incorporados por serem considerados bons. Sobre isso, assinale a alternativa correta.

A) Os hábitos, por serem bons, são considerados justos.

B) Os hábitos, mesmo sendo maus, podem ser considerados justos.

C) Independentemente de serem bons ou maus, os hábitos não alteram as condições de realização das pessoas.

D) Considerando que os hábitos bons e justos se tornam imprescindíveis para os indivíduos, eles são convencionados em forma de acordos.

E) Considerando que os hábitos bons e justos se tornam dispensáveis para os indivíduos, eles são convencionados em forma de lei.
Verificar Resposta Estudar Cards Todas as Questões

Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware 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 funcionalidadesControle 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
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 14 usuários muito felizes estudando em nosso site.