Sep 21

myCheckbox.setBorder(new LineBorder(Color.red, 2));

When you use the above code to add a Border to a JCheckBox your border will more than likely not display. Reason being that JCheckBox sets the UI property borderPainted to false.

To have the border displayed you need to explicitly tell the JCheckBox to paint it’s border using the following call

myCheckbox.setBorderPainted(true);

written by objects \\ tags: , ,

Sep 23

You need 3 things:

  • Make sure the items in your list have a property that indicates whether they are selected or not
  • Use a JCheckBox as a list cell renderer
  • A mouse listener to change the state of a list item when clicked

import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;


public class CheckList
{  
   public static void main(String args[])
   {
      JFrame frame = new JFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      // Create a list containing CheckListItem's
      
      JList list = new JList(new CheckListItem[] {
            new CheckListItem("apple"), 
            new CheckListItem("orange"), 
            new CheckListItem("mango"), 
            new CheckListItem("paw paw"), 
            new CheckListItem("banana")});
      
      // Use a CheckListRenderer (see below) 
      // to renderer list cells
      
      list.setCellRenderer(new CheckListRenderer());
      list.setSelectionMode(
         ListSelectionModel.SINGLE_SELECTION);
      
      // Add a mouse listener to handle changing selection
      
      list.addMouseListener(new MouseAdapter()
      {
         public void mouseClicked(MouseEvent event)
         {
            JList list = (JList) event.getSource();
            
            // Get index of item clicked
            
            int index = list.locationToIndex(event.getPoint());
            CheckListItem item = (CheckListItem)
               list.getModel().getElementAt(index);
            
            // Toggle selected state
            
            item.setSelected(! item.isSelected());
            
            // Repaint cell
            
            list.repaint(list.getCellBounds(index, index));
         }
      });   

      frame.getContentPane().add(new JScrollPane(list));
      frame.pack();
       frame.setVisible(true);
   } 
}

// Represents items in the list that can be selected

class CheckListItem
{
   private String  label;
   private boolean isSelected = false;

   public CheckListItem(String label)
   {
      this.label = label;
   }

   public boolean isSelected()
   {
      return isSelected;
   }

   public void setSelected(boolean isSelected)
   {
      this.isSelected = isSelected;
   }

   public String toString()
   {
      return label;
   }
}
 
// Handles rendering cells in the list using a check box

class CheckListRenderer extends JCheckBox
   implements ListCellRenderer
{
   public Component getListCellRendererComponent(
         JList list, Object value, int index, 
         boolean isSelected, boolean hasFocus)
   {
      setEnabled(list.isEnabled());
      setSelected(((CheckListItem)value).isSelected());
      setFont(list.getFont());
      setBackground(list.getBackground());
      setForeground(list.getForeground());
      setText(value.toString());
      return this;
   }
} 

written by objects \\ tags: , ,