CheckBox List by Zhiguo Yin : List « Swing Components « Java

Java
1. 2D Graphics GUI
2. 3D
3. Advanced Graphics
4. Ant
5. Apache Common
6. Chart
7. Class
8. Collections Data Structure
9. Data Type
10. Database SQL JDBC
11. Design Pattern
12. Development Class
13. EJB3
14. Email
15. Event
16. File Input Output
17. Game
18. Generics
19. GWT
20. Hibernate
21. I18N
22. J2EE
23. J2ME
24. JDK 6
25. JNDI LDAP
26. JPA
27. JSP
28. JSTL
29. Language Basics
30. Network Protocol
31. PDF RTF
32. Reflection
33. Regular Expressions
34. Scripting
35. Security
36. Servlets
37. Spring
38. Swing Components
39. Swing JFC
40. SWT JFace Eclipse
41. Threads
42. Tiny Application
43. Velocity
44. Web Services SOA
45. XML
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java » Swing Components » ListScreenshots 
CheckBox List by Zhiguo Yin
CheckBox List by Zhiguo Yin
 
/*
author: yinzhiguo
mail: yin_zhiguo at hotmail.com
env: ubuntu 8.04 jdk1.6.0

this is a checkbox list ctrl for developer java swing application.
it is very simple. you only require implements a method!
require apache commons-lang.jar

For example:

    langList = new CheckboxList(ts){
            @Override
            public Object getDataLabel(Object data){
                Book a = (Book)data;
                return a.getTitle();
            }
    };
    centerPane.add(langList, BorderLayout.CENTER);
    ArrayList as = langList.getSelectedData();
    
the ts is a Object array that your checkboxlist model.
you will implements the getDataLabel method.
get user's chooser is simple, only invoke langList.getSelectedData()
*/

package com.java2s.java.swing.common.pane;


import java.awt.Dimension;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.JMenuItem;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;

/**
 * this is a checkbox list for swing application
 @author  yinzhiguo
 */
public class CheckboxList extends javax.swing.JPanel {
    
    private Vector<BooleanWrap> dataModel = new Vector<BooleanWrap>();

    private int columnWidth = 0;
    
    public CheckboxListObject[] datas) {
         if(datas == null)
            throw new java.lang.IllegalArgumentException("datas is null!");
         int max = 0;
         for(Object o : datas)
         {
                BooleanWrap bw = new BooleanWrap(o);
                int a = bw.getLabel().length();
                if(max < a)
                    max = a;
                dataModel.add(bw);
         }
        columnWidth = max;
        initComponents();
        this.setPreferredSize(table.getPreferredSize());
    }
    
    public CheckboxList(ArrayList list) {
        if(list == null || list.isEmpty())
            throw new java.lang.IllegalArgumentException("list is null or empty!");
        
        int max = 0;
         for(Object o : list)
         {
                BooleanWrap bw = new BooleanWrap(o);
                int a = bw.getLabel().length();
                if(max < a)
                    max = a;
                dataModel.add(bw);
         }
        columnWidth = max;
        initComponents();
        this.setPreferredSize(table.getPreferredSize());
    }

  private JMenuItem getMenuItem(String id) {
        JMenuItem item = new javax.swing.JMenuItem();
        if("all".equals(id))
        {
            item.setText("??");
        }else if("notAll".equals(id))
        {
            item.setText("???");
        }else if("reverse".equals(id))
        {
            item.setText("??");
        }
        return item;
        
    }

    public ArrayList getSelectedData(){
        ArrayList i = new ArrayList();
        
        for(BooleanWrap bw : dataModel){
            if(bw.getChecked()){
                i.add(bw.getData());
            }
        }
        return i;
    }
     
    private TableModel getTableModel() {
        return new DataModel();
    }

   
     

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        popupMenu = new javax.swing.JPopupMenu();
        allMenuItem = getMenuItem("all");
        notAllMenuItem = getMenuItem("notAll");
        reverseMenuItem = getMenuItem("reverse");
        colText = new javax.swing.JTextField();
        scrollPane = new javax.swing.JScrollPane();
        table = new javax.swing.JTable();

        allMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                allMenuItemActionPerformed(evt);
            }
        });
        popupMenu.add(allMenuItem);

        notAllMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                notAllMenuItemActionPerformed(evt);
            }
        });
        popupMenu.add(notAllMenuItem);

        reverseMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                reverseMenuItemActionPerformed(evt);
            }
        });
        popupMenu.add(reverseMenuItem);

        setLayout(new java.awt.BorderLayout());
        add(colText, java.awt.BorderLayout.PAGE_START);

        table.setModel(getTableModel());
        table.setComponentPopupMenu(popupMenu);
        setTableParam();
        scrollPane.setViewportView(table);

        add(scrollPane, java.awt.BorderLayout.CENTER);
    }// </editor-fold>//GEN-END:initComponents

           private void actionPerformOfButton(int type){
               if(!dataModel.isEmpty()){
                    for(BooleanWrap bw : dataModel)
                    {
                        if(type == 1){
                        bw.setChecked(Boolean.TRUE);
                        }else if(type == 2)
                        {
                            bw.setChecked(Boolean.FALSE);    
                        }else if(type == 3){
                            bw.setChecked(!bw.getChecked());
                        }
                    }
                    ((AbstractTableModel)table.getModel()).fireTableDataChanged();
                }
           }

private void allMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_allMenuItemActionPerformed
// TODO add your handling code here:
    actionPerformOfButton(1);
}//GEN-LAST:event_allMenuItemActionPerformed

private void notAllMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_notAllMenuItemActionPerformed
// TODO add your handling code here:
    actionPerformOfButton(2);
}//GEN-LAST:event_notAllMenuItemActionPerformed

private void reverseMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_reverseMenuItemActionPerformed
// TODO add your handling code here:
    actionPerformOfButton(3);
}//GEN-LAST:event_reverseMenuItemActionPerformed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuItem allMenuItem;
    private javax.swing.JTextField colText;
    private javax.swing.JMenuItem notAllMenuItem;
    private javax.swing.JPopupMenu popupMenu;
    private javax.swing.JMenuItem reverseMenuItem;
    private javax.swing.JScrollPane scrollPane;
    private javax.swing.JTable table;
    // End of variables declaration//GEN-END:variables

    private void setTableParam() {
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
     //   table.setDragEnabled(false);
        table.setShowGrid(false);
        table.getTableHeader().setEnabled(false);
        
        //???????
        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
        renderer.setPreferredSize(new Dimension(00));
        table.getTableHeader().setDefaultRenderer(renderer);
        
        
        table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

                public void valueChanged(ListSelectionEvent e) {
                    if (e.getValueIsAdjusting()) {
                        return;
                    }
                    ListSelectionModel sm = (ListSelectionModele.getSource();
                    int row = sm.getLeadSelectionIndex();
                    if(row >=0){
                        BooleanWrap bw = dataModel.get(row);
                        colText.setText(bw.getLabel());
                    }
                }
            });
        
        DefaultTableColumnModel dtm = (DefaultTableColumnModel)table.getColumnModel();
        
        int count = dtm.getColumnCount();
        for(int i = 0; i < count; i++)
        {
            TableColumn tc = dtm.getColumn(i);
            tc.setResizable(false);
            if(i == 0){
                tc.setWidth(15);
                tc.setPreferredWidth(25);
            }else{
                tc.setWidth(columnWidth * 3);
                tc.setPreferredWidth(columnWidth * 10);
            }
        }
        ColumnColorTableCellRenderer ctlr = new ColumnColorTableCellRenderer();
        table.getColumnModel().getColumn(1).setCellRenderer(ctlr)
    }

    
     class DataModel extends AbstractTableModel {
            private String[] columnNames = {"...""..."};
            
            public Class getColumnClass(int columnIndex) {
                if(columnIndex == 0)
                    return Boolean.class;
                return String.class;
            }
            
            public String getColumnName(int column) {
                return columnNames[column];
            }
            public int getRowCount() {
                return dataModel.size();
            }
            
            public int getColumnCount() {
                return columnNames.length;
            }
            
            public Object getValueAt(int rowIndex, int colIndex) {
                BooleanWrap bw = dataModel.get(rowIndex);
                if(colIndex == 1)
                    return getDataLabel(bw.getData());
                else{
                    
                    return bw.getChecked();
                }
            }
            
        @Override
            public void setValueAt(Object value, int rowIndex, int colIndex) {
                if(colIndex == 0){
                    Boolean flag = (Boolean)value;
                    BooleanWrap bw = dataModel.get(rowIndex);
                    bw.setChecked(flag);
                    
                }
            }
            
        @Override
            public boolean isCellEditable(int rowIndex,
                    int columnIndex) {
                if(columnIndex == 0)
                    return true;
                return false;
            }
        }
    
     /**
      * ????????list????????
      * ????,??????
      @param data
      @return
      */
    public Object getDataLabel(Object data){
        return data.toString();
    }
    
     class BooleanWrap{
        private Boolean checked = Boolean.FALSE;
        private Object data = null;
        
        public BooleanWrap(Object obj)
        {
            this.data = obj;
        }

        public Boolean getChecked() {
            return checked;
        }

        public void setChecked(Boolean checked) {
            this.checked = checked;
        }

        public Object getData() {
            return data;
        }

        public void setData(Object data) {
            this.data = data;
        }
        
        public String getLabel(){
            return (String)getDataLabel(this.getData());
        }
    }
    
}

//////////////////////////////////////////////////////

/*
 * AlternationColorTableCellRenderer.java
 *
 * Created on 2007?9?14?, ??10:32
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package com.java2s.java.swing.common.pane;

import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;

/**
 *
 @author java
 */
public class ColumnColorTableCellRenderer extends DefaultTableCellRenderer{
    
    private Color colorOne = Color.white;
    private Color colorTwo = new Color(206,231,255);
    
    private Color textColor = Color.BLUE;
    private Color numberColor = Color.RED;
    private Color dateColor = Color.BLUE;
    
    /** Creates a new instance of AlternationColorTableCellRenderer */
    public ColumnColorTableCellRenderer(Color one, Color two) {
        if(one != null)
            colorOne = one;
        if(two != null)
            colorTwo = two;
    }
    
    public ColumnColorTableCellRenderer() {
    }
    
    public Component getTableCellRendererComponent(JTable table,
            Object value, boolean isSelected, boolean hasFocus,
            int row, int column) {
        
        if(value instanceof String)
        {
            String str = (String)value;
            this.setForeground(textColor);
            
        }else if(value instanceof Integer || value instanceof Double || value instanceof Long)
        {
            this.setForeground(numberColor);
            this.setHorizontalAlignment(SwingConstants.RIGHT);
        }
        if(row % == 0){
            setBackground(colorOne);
        }
        else if(row % == 1)
        {
            setBackground(colorTwo)
        }
        return super.getTableCellRendererComponent(table, value,
                isSelected, hasFocus, row, column);
    }

    public Color getTextColor() {
        return textColor;
    }

    public void setTextColor(Color textColor) {
        this.textColor = textColor;
    }

    public Color getNumberColor() {
        return numberColor;
    }

    public void setNumberColor(Color numberColor) {
        this.numberColor = numberColor;
    }

    public Color getDateColor() {
        return dateColor;
    }

    public void setDateColor(Color dateColor) {
        this.dateColor = dateColor;
    }
}


//////////////////////////////////////////////////////

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.java2s.java.swing.common.pane;

import com.uusee.platform.util.*;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Point;
import java.awt.Toolkit;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;

/**
 * @email yin_zhiguo@hotmail.com
 @author yinzhiguo
 */
public class SwingUtil {
    
    /** Creates a new instance of SwingUtil */
    private SwingUtil() {
    }
    
    public static String[] getClassNameOfLookAndFeel() {
        LookAndFeelInfo[]  lookAndFeelInfos = UIManager.getInstalledLookAndFeels();
        String[] name = new String[lookAndFeelInfos.length];
        for (int i = 0; i < lookAndFeelInfos.length; i++) {
            name[i= lookAndFeelInfos[i].getClassName();
        }
        return name;
    }
    
    public static void setLookAndFeel(String clzz) {
        try {
            UIManager.setLookAndFeel(clzz);
        catch (Exception exception) {
            exception.printStackTrace();
        }
        
    }
    
    public static int getScreenWidth() {
        return getScreenSize().width;
    }
    
    public static int getScreenHeight() {
        return getScreenSize().height;
    }
    
    public static Dimension getScreenSize() {
        return Toolkit.getDefaultToolkit().getScreenSize();
    }
    
    public static void setLocationToCenterOfComponent(Component parent, Component child)
    {
        Point parentPoint = parent.getLocation();
        Dimension parentDim = parent.getSize();
        Dimension childDim = child.getSize();
        child.setLocation(parentPoint.x + (parentDim.width - childDim.width)/2, parentPoint.y + (parentDim.height - childDim.height)/2);
    }
    
    /**
     * ???????
     @param comp
     */
    public static void setLocationToCenterOfScreen(Component comp) {
        Dimension screenSize = getScreenSize();
        Dimension frameSize = comp.getSize();
        
        if (frameSize.height > screenSize.height) {
            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        comp.setLocation((screenSize.width - frameSize.width2,
            (screenSize.height - frameSize.height2);
    }
    
    public static String[] convertToMaxWidth(String[] strs, FontMetrics fm){
        int max = 0//????
        int fix = fm.stringWidth(" ");//???????(?????)
        int[] widths = new int[strs.length]//???????(?????)
        int[] dis = new int[strs.length]//???????(?????)
        for(int i = 0; i < strs.length; i++){
            int w = fm.stringWidth(strs[i]);
           // System.out.println(strs[i] + " " + w);
            widths[i= w;
            if(w > max){
                max = w;
            }
        }
        max = max + fix * 4;
       // System.out.println("max: " + max + ", fix: " + fix);
        for(int i = 0; i < strs.length; i++){
            int distance = max - widths[i]//??????
            dis[i(distance / fix1;
        }
        String[] res = new String[strs.length];
        for(int i = 0; i < strs.length; i++){
            res[i= Helper.leftAppendSpace(strs[i], dis[i]);
            //System.out.println(strs[i] + " " + dis[i] + ", "+ widths[i] + ", " + fm.stringWidth(strs[i]));
        }
        return res;
    }
    
}

//////////////////////////////////////////////////////

package com.java2s.java.swing.common.pane;

import java.awt.BorderLayout;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.UIManager;

/**
 * @email yin_zhiguo@hotmail.com
 @author yinzhiguo
 */
public class CheckboxListTestFrame extends javax.swing.JFrame {

    /** Creates new form CheckboxListTestFrame */
    public CheckboxListTestFrame() {
        initComponents();
        this.setSize(140230);
        this.setTitle("CheckboxList ??");
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        centerPane = new javax.swing.JPanel();
        testButPane = new javax.swing.JPanel();
        testBut = getButtonBy("test");

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        centerPane.setLayout(new java.awt.BorderLayout());

        testButPane.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));

        testBut.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                testButActionPerformed(evt);
            }
        });
        testButPane.add(testBut);

        centerPane.add(testButPane, java.awt.BorderLayout.PAGE_END);

        prepareCheckboxListPane();

        getContentPane().add(centerPane, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents

     /**
     * ??ID??JButton???
     @param id ?????
     @return ????
     */
    public JButton getButtonBy(String id){

        JButton but = new JButton();
        if("test".equals(id)){
             but.setText("??");
             but.setToolTipText("??");
        }
        return but;
    }

    private CheckboxList langList = null;
    
    class Book{
        private String title = "";
        private double price = 0.0;

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public double getPrice() {
            return price;
        }

        public void setPrice(double price) {
            this.price = price;
        }
    }
    
    private void prepareCheckboxListPane() {
        
        Book t = new Book();
        t.setTitle("Java??");
        t.setPrice(20.5);
        
        Book t1 = new Book();
        t1.setTitle("PHP??");
        t1.setPrice(30.5);
        
        Book t2 = new Book();
        t2.setTitle("C++??");
        t2.setPrice(50.5);
        
        Book t3 = new Book();
        t3.setTitle("Python??");
        t3.setPrice(30.5);
        
        Book t4 = new Book();
        t4.setTitle("Perl??");
        t4.setPrice(23.5);
        
        Book t5 = new Book();
        t5.setTitle("SmallTalk??");
        t5.setPrice(23.5);
        
        Book t6 = new Book();
        t6.setTitle("Ruby??");
        t6.setPrice(23.5);
        
        Book t7 = new Book();
        t7.setTitle("Lisp??");
        t7.setPrice(23.5);
        
        Book t8 = new Book();
        t8.setTitle("Shell??");
        t8.setPrice(23.5);
        
        Book[] ts = {t,t1,t2,t3,t4,t5,t6,t7,t8};
        
        langList = new CheckboxList(ts){
            @Override
            public Object getDataLabel(Object data){
                Book a = (Book)data;
                return a.getTitle();
            }
        };
        centerPane.add(langList, BorderLayout.CENTER);
    }
    
private void testButActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_testButActionPerformed
// TODO add your handling code here:
    ArrayList as = langList.getSelectedData();
    if(as.isEmpty()){
        JOptionPane.showMessageDialog(this, "????????!""??", JOptionPane.INFORMATION_MESSAGE);
    }else{
        StringBuffer sub = new StringBuffer();
        sub.append("<html>");
        sub.append("<b>????:</b><br>");
        sub.append("<ul>");
        for(Object o : as){
            Book b = (Book)o;
            sub.append("<li>" + b.getTitle() ", " + b.getPrice() "</li>");
        }
        sub.append("</ul>");
        sub.append("</html>");
        JOptionPane.showMessageDialog(this, sub.toString()"??", JOptionPane.INFORMATION_MESSAGE);
    }
}//GEN-LAST:event_testButActionPerformed

    /**
    @param args the command line arguments
    */
    public static void main(String args[]) {
        UIManager.put("swing.boldMetal", Boolean.FALSE);
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                CheckboxListTestFrame cltf = new CheckboxListTestFrame();
                SwingUtil.setLocationToCenterOfScreen(cltf);
                cltf.setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel centerPane;
    private javax.swing.JButton testBut;
    private javax.swing.JPanel testButPane;
    // End of variables declaration//GEN-END:variables

}





           
         
  
CheckboxListDemoYinZhiGuo.zip( 241 k)
Related examples in the same category
1. Mouse Roll over ListMouse Roll over List
2. Check List ExampleCheck List Example
3. Check List Example 2Check List Example 2
4. ToolTip List ExampleToolTip List Example
5. Editable List ExampleEditable List Example
6. DND Drag and drop List
7. CheckBox List
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.