Swing Components Java

/*
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.rntsoft.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 dataModel = new Vector();
    private int columnWidth = 0;
    
    public CheckboxList( Object[] 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")
    // //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);
    }// //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(0, 0));
        table.getTableHeader().setDefaultRenderer(renderer);
        
        
        table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
                public void valueChanged(ListSelectionEvent e) {
                    if (e.getValueIsAdjusting()) {
                        return;
                    }
                    ListSelectionModel sm = (ListSelectionModel) e.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.rntsoft.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 % 2 == 0){
            setBackground(colorOne);
        }
        else if(row % 2 == 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.rntsoft.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.width) / 2,
            (screenSize.height - frameSize.height) / 2);
    }
    
    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 / fix) + 1;
        }
        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.rntsoft.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(140, 230);
        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")
    // //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();
    }// //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("");
        sub.append("????:
");
        sub.append("
    ");
            for(Object o : as){
                Book b = (Book)o;
                sub.append("
  • " + b.getTitle() + ", " + b.getPrice() + "
  • ");
            }
            sub.append("
");
        sub.append("");
        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)