JList com Checkbox
exemplo simples Classe |
/*
Este exemplo mostra como criar uma JList
contendo JCheckBoxes. Aprenda a marcar os
itens e obter quais itens estão marcados.
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class Estudos extends JFrame{
JList lista;
public Estudos() {
super("A classe JList");
Container c = getContentPane();
c.setLayout(new FlowLayout(FlowLayout.LEFT));
// Cria a JList
lista = new JList();
// Define o renderizador de células
lista.setCellRenderer(new CheckBoxCellRenderer());
// Define os valores da lista Object[] cbArray = new Object[4];
cbArray[0] = new JCheckBox("Goiânia");
cbArray[1] = new JCheckBox("Brasília");
cbArray[2] = new JCheckBox("Barra do Garças");
cbArray[3] = new JCheckBox("Curitiba");
// Atribue os itens à lista lista.setListData(cbArray);
// Define a seleção única para a lista lista.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// Aqui nós permitimos que as checkboxes sejam marcadas
// ou desmarcadas com a barra de espaço
lista.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_SPACE){
int index = lista.getSelectedIndex();
if(index != -1){
JCheckBox checkbox =
(JCheckBox) lista.getModel().getElementAt(index);
checkbox.setSelected(!checkbox.isSelected());
repaint();
}
}
}
});
// Aqui nós permitimos que as checkboxes sejam marcadas
// ou desmarcadas com o mouse
lista.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
int index = lista.locationToIndex(e.getPoint());
if(index != -1){
JCheckBox checkbox = (JCheckBox) lista.getModel().getElementAt(index);
checkbox.setSelected(!checkbox.isSelected());
repaint();
}
}
});
// Um botão que permite obter os itens marcados
JButton btn = new JButton("Obter itens marcados");
btn.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
String itens = "";
/*
* Loop feito com FOR, para fazer uma varredura
* para obter quais itens estao marcados ou não
*/ for(int i = 0; i < lista.getModel().getSize(); i++){
JCheckBox checkbox = (JCheckBox) lista.getModel().getElementAt(i);
if(checkbox.isSelected())
itens += "Item com índice " + i +
" está marcado\n";
else
itens += "Item com índice " + i +
" está desmarcado\n";
}
JOptionPane.showMessageDialog(null,
itens);
}
}
);
// Adiciona a lista à janela
c.add(new JScrollPane(lista));
// Adiciona o botão à janela c.add(btn);
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 que os itens
// da lista sejam exibidos como
JCheckBoxesclass
CheckBoxCellRenderer implements ListCellRenderer{
Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus){
JCheckBox checkbox = (JCheckBox) value;
checkbox.setBackground(isSelected ?
list.getSelectionBackground() : list.getBackground());
checkbox.setForeground(isSelected ?
list.getSelectionForeground() : list.getForeground());
checkbox.setEnabled(list.isEnabled());
checkbox.setFont(list.getFont());
checkbox.setFocusPainted(false);
checkbox.setBorderPainted(true);
checkbox.setBorder(isSelected ? UIManager.getBorder(
"List.focusCellHighlightBorder") : noFocusBorder);
return checkbox;
}
}
É possível fazer isso via propriedades do componente JList, na paleta de componentes do NetBeans?