JComboBox com auto complete e Map de Objetos

Postado por ugleiton dia 21 de dezembro de 2010 as 05:27

O objetivo da implementação desse combo foi facilitar o desenvolvimento de aplicações que utilizam persistência, onde os combos criados nas aplicações representam entidades de um banco de dados, o mesmo funciona também como os combobox convencionais pois extendes da classe JCombobox.

Para a utilização do mesmo faça o download do jar UGComp.jar e importe o mesmo para a paleta do netbeans, caso ainda não saiba como fazer isso siga o tutorial Adicionando Componentes a Paleta do NetBeans. Depois adicione a o jar UGLibrary.jar a biblioteca do seu projeto.

Os combos convencionais só guardam as descrições de um objeto, como por exemplo, um combo preenchido com nomes de pessoas não guarda todas as informações dessa pessoa e a aplicação necessita de todos os dados para processamento ou preenchimento de tela.
O componente UJComboBox adiciona a descrição e o próprio objeto da descrição, funcionando em paralelo com um hashMap.
Veja como utilizar:

Preenchendo
private void carregarCombo(){
        //limpa o combo
        uJComboBox1.clear();
        Pessoa p = new Pessoa();
        p.setNome("Fulado de Tal");
        p.setCpf("02523646257");
        /**
         * observe que aqui é setado o nome da pessoa como descrição
         * e o próprio objeto pessoa para se buscado depois
         */
        uJComboBox1.addItem(p.getNome(), p);

        p = new Pessoa();
        p.setNome("outra pessoa");
        p.setCpf("00000000000");
        uJComboBox1.addItem(p.getNome(), p);
    }

Pegando Objeto
/**
     * @return pessoa com nome selecionado
     */
    private Pessoa getCombo(){
        /**
         * para retornar o objeto utilise o método getSelectedObject
         * para retornar o nome utilize o método getSelectedItem
         */
        return (Pessoa) uJComboBox1.getSelectedObject();
    }

Além de guardar as informações de forma mais precisa, ele também possui uma propriedade auto complete, que foi implementada utilizando classes da biblioteca swingx.
Veja como utiliza-la:
Depois de ter selecionado o componente na sua aplicação, marque a propriedade auto completar.


Enquanto o usuário digita o combo vai completando e selecionando a palavra.



15 comentários

JPanel com imagem de fundo

Postado por ugleiton dia 17 de dezembro de 2010 as 10:47

No inicio do ano de 2010 tive uma dificuldade em criar um JPanel com imagem de fundo em um game de xadrez em java, consegui resolver o problema alterando o método paintComponent(Graphics g) da classe JPanel.

As vezes quebramos muito a cabeça com pouca coisa, então resolvi disponibilizar meu JPanel personalizado que dá a opção de escolher uma imagem pelas propriedades do NetBeans, esse panel tem todas as propriedades de um panel normal, pois o mesmo extends da classe JPanel.

Antes de tudo é preciso adicionar o componente "uJPanelImagem",que está no .jar para download no fim do post , a paleta do NetBeans, para adicionar siga os passos descritos no post "Adicionando Componentes a Paleta do NetBeans".

Como utilizar uJPanelImagem?


  1. Escolha o componente UJPanelImagem.

  2. Selecione o mesmo para mostrar as propriedades
  3. Procure pela propriedade imagem e clique no botão a direita do nome.

  4. Escolha sua imagem.

  5. Pronto, agora você pode arrastar e redimensionar seu jPanel com imagem de fundo. Obs: se vc estiver utilizando uma imagem transparente, sete a opção opaque no panel.


   Download

O Leonardo preencheu um formulário de contato me procurando, mas não consegui encontrar o email para retornar, então segue abaixo o código da classe com algumas modificações.
Criei um método novo chamado setImagemUrl que ainda não testei mas acho que roda...rsrs

Se (der erro) então{
  É só não usar o método; \\a classe irá funcionar normalmente como antes
}

import java.awt.Graphics;
import java.awt.Image;
import java.awt.LayoutManager;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;

/**
 *
 * @author Ugleiton
 */
public class UJPanel extends JPanel {
 private File imagemFile = null;
 private String imagemUrl = null;
 private Image imagem = null;
 public UJPanel() {
  super();
 }
 public UJPanel(LayoutManager lm) {
  super(lm);
 }
 public UJPanel(boolean bln) {
  super(bln);
 }
 public UJPanel(LayoutManager lm, boolean bln) {
  super(lm, bln);
 }
 @Override
 protected void paintComponent(Graphics g) {
  try {
   g.drawImage(imagem, 0, 0, this.getWidth(), this.getHeight(), this);
  } catch (Exception e) {
  } finally {
   super.paintComponent(g);
  }
 }
 public void setImagem(Image imagem) {
  this.imagem = imagem;
 }
 public void setImagemFile(File imagemFile) {
  try {
   this.imagemFile = imagemFile;
   if (imagemFile != null) {
    this.imagem = ImageIO.read(imagemFile);
   } else {
    imagem = null;
   }
  } catch (IOException ex) {
  }
 }
 public String getImagemUrl() {
  return imagemUrl;
 }
 public void setImagemUrl(String imagemUrl) {
  this.imagemUrl = imagemUrl;
  this.imagemFile = new File(this.imagemUrl);
  try {
   if (imagemFile != null) {
    this.imagem = ImageIO.read(imagemFile);
   } else {
    imagem = null;
   }
  } catch (IOException ex) {
  }
 }
 public File getImagemFile() {
  return imagemFile;
 }
 public Image getImagem() {
  return imagem;
 }
}


17 comentários

Adicionando Componentes a Paleta do NetBeans

Postado por ugleiton dia as 09:22

Segue abaixo os passos para se adicionar componentes a paleta do NetBeans:

  1. Selecione o Menu Ferramentas:


  2. Clique em Componentes Swing/AWT

  3. Nesse momento escreva um nome de uma categoria de sua escolha.



  4. Escolha a opção (Adicionar do Jar ou da biblioteca ou de um projeto)

  5. Selecione o projeto ou jar do qual deseja pegar os componentes


  6. Selecione os componentes desejados. (Obs:  só é exibido os componentes que possuem construtor sem parâmetros)

  7. Escolha a categoria que foi criada no item 3 e finalize.

1 comentários

Marcadores

Computação (8) Java (7) Excel (2) Humor (2) NetBeans (2) Textos (2) Curiosidades (1) IRPF (1) Musicas (1)