terça-feira, 29 de janeiro de 2013

JList com imagens e alinhamento (JList e ImageIcon)

Às vezes precisamos deixar as nossas aplicações com uma aparência especial. Com certeza haverão vários posts do género, aqui no amador em java sobre essa matéria, mas, já agora, indo directo ao ponto, eu vou mostrar, neste curto exemplo, como colocar imagnes em Items de uma JList e como alinhar cada Item.

Para começar, é preciso escrevermos o nosso prório ListCellRenderer, ou seja, uma classe que implementa a interface javax.swing.ListCellRenderer;

Por quê?
É muito simples. Quando um Item é adicionado ao modelo da lista, ele passa pelo Renderizador (ListCellRenderer). O renderizador padrão é o DefaultListCellRenderer, mas, ele não é capaz de realizar o nosso desejo de colocar figurinhas junto com o texto na JLIST, então nós vamos escrever o nosso próprio renderizador. Dê uma olhadela no conteúdo do ficheiro CustomListCellRenderer.java logo à seguir.

import java.awt.Component;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.SwingConstants;




public class CustomListCellRenderer implements ListCellRenderer {

 @Override
 public Component getListCellRendererComponent(JList list, Object value,
   int index, boolean isSelected, boolean cellHasFocus) {
  
  //Instancia um JLabel e define a imagem a ser visualizada
  JLabel label= new JLabel(new ImageIcon("checkbox.png"));
  //Define o texto do JLabel
  label.setText(value.toString()); 
  
  //Quando o item é seleccionado, é ao mesmo tempo alinhado ao centro. 
  if(isSelected)
   label.setHorizontalAlignment(SwingConstants.CENTER);
  else
   label.setHorizontalAlignment(SwingConstants.LEFT);
  
  
  //Retorna o Label
  return label;
 }

}

Vejamos agora o código do formulário de teste ( ListaIconeFrame.java)

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;


public class ListaIconeFrame extends JFrame {

 public ListaIconeFrame(){
  super("Exemplo");
  setSize(400,400);
  
  //Cria uma instância de modelo de lista.
  DefaultListModel model = new DefaultListModel();
  
  JList list = new JList();
  
  //Cria uma instância do renderizador de células da lista.
  CustomListCellRenderer renderer = new CustomListCellRenderer();
  
  //Define o renderizador da lista
  list.setCellRenderer(renderer);
  //Define o modelo da lista
  list.setModel(model);
  
  //Adiciona elementos ao modelo
  model.addElement("Mário Júnior");
  model.addElement("Aurio Tino");
  model.addElement("Amilton Mário");
  model.addElement("Nelton John");
  model.addElement("Suzete das Dores");
  
  //Define a localização da lista do formulário. 
  list.setBounds(10, 10, 380, 380);
  
  
  this.setLayout(null);
  this.getContentPane().add(list);
  
  setLocationRelativeTo(null);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setVisible(true);
 
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  
  ListaIconeFrame app = new ListaIconeFrame();

 }

}

Executado este código temos o seguinte resultado:



Até o próximo post. Fuuuuuuuuuuuuuuui.


1 comentários:

Fabricio disse...

como que faço para usar varias imagens diferentes?

Enviar um comentário

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | cheap international voip calls