CheckBox List by Zhiguo Yin : 列表 « Swing组件 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » Swing组件 » 列表屏幕截图 
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. 鼠标滚动列表鼠标滚动列表
2. 检查表范例检查表范例
3. 检查表范例2检查表范例2
4. 工具提示列表范例工具提示列表范例
5. 编辑列表范例编辑列表范例
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.