À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.
Vejamos agora o código do formulário de teste ( ListaIconeFrame.java)
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:
como que faço para usar varias imagens diferentes?
Enviar um comentário