Java/Swing Components/List
Содержание
CheckBox List
<source lang="java">
/*
* Copyright (C) 2005 - 2007 JasperSoft Corporation. All rights reserved. * http://www.jaspersoft.ru. * * Unless you have purchased a commercial license agreement from JasperSoft, * the following license terms apply: * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as published by * the Free Software Foundation. * * This program is distributed WITHOUT ANY WARRANTY; and without the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see http://www.gnu.org/licenses/gpl.txt * or write to: * * Free Software Foundation, Inc., * 59 Temple Place - Suite 330, * Boston, MA USA 02111-1307 * * * * * CheckBoxList.java * * Created on October 5, 2006, 9:53 AM * */
/**
* * @author gtoffoli */
import java.awt.Color; import java.awt.ruponent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.DefaultListCellRenderer; import javax.swing.DefaultListModel; import javax.swing.JCheckBox; import javax.swing.JList; import javax.swing.ListSelectionModel; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; public class CheckBoxList extends JList {
public CheckBoxList() { super(); setModel(new DefaultListModel()); setCellRenderer(new CheckboxCellRenderer()); addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { int index = locationToIndex(e.getPoint()); if (index != -1) { Object obj = getModel().getElementAt(index); if (obj instanceof JCheckBox) { JCheckBox checkbox = (JCheckBox) obj; checkbox.setSelected(!checkbox.isSelected()); repaint(); } } } } ); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); } @SuppressWarnings("unchecked") public int[] getCheckedIdexes() { java.util.List list = new java.util.ArrayList(); DefaultListModel dlm = (DefaultListModel) getModel(); for (int i = 0; i < dlm.size(); ++i) { Object obj = getModel().getElementAt(i); if (obj instanceof JCheckBox) { JCheckBox checkbox = (JCheckBox) obj; if (checkbox.isSelected()) { list.add(new Integer(i)); } } } int[] indexes = new int[list.size()]; for (int i = 0; i < list.size(); ++i) { indexes[i] = ((Integer) list.get(i)).intValue(); } return indexes; } @SuppressWarnings("unchecked") public java.util.List getCheckedItems() { java.util.List list = new java.util.ArrayList(); DefaultListModel dlm = (DefaultListModel) getModel(); for (int i = 0; i < dlm.size(); ++i) { Object obj = getModel().getElementAt(i); if (obj instanceof JCheckBox) { JCheckBox checkbox = (JCheckBox) obj; if (checkbox.isSelected()) { list.add(checkbox); } } } return list; }
} /*
* Copyright (C) 2005 - 2007 JasperSoft Corporation. All rights reserved. * http://www.jaspersoft.ru. * * Unless you have purchased a commercial license agreement from JasperSoft, the * following license terms apply: * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2 as published by the * Free Software Foundation. * * This program is distributed WITHOUT ANY WARRANTY; and without the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, see http://www.gnu.org/licenses/gpl.txt or write to: * * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA USA * 02111-1307 * * * * * CheckboxCellRenderer.java * * Created on October 5, 2006, 10:03 AM * */
/**
* * @author gtoffoli */
class CheckboxCellRenderer extends DefaultListCellRenderer {
protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1); public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { if (value instanceof CheckBoxListEntry) { CheckBoxListEntry checkbox = (CheckBoxListEntry) value; checkbox.setBackground(isSelected ? list.getSelectionBackground() : list.getBackground()); if (checkbox.isRed()) { checkbox.setForeground(Color.red); } else { checkbox.setForeground(isSelected ? list.getSelectionForeground() : list.getForeground()); } checkbox.setEnabled(isEnabled()); checkbox.setFont(getFont()); checkbox.setFocusPainted(false); checkbox.setBorderPainted(true); checkbox.setBorder(isSelected ? UIManager.getBorder("List.focusCellHighlightBorder") : noFocusBorder); return checkbox; } else { return super.getListCellRendererComponent(list, value.getClass().getName(), index, isSelected, cellHasFocus); } }
} /*
* Copyright (C) 2005 - 2007 JasperSoft Corporation. All rights reserved. * http://www.jaspersoft.ru. * * Unless you have purchased a commercial license agreement from JasperSoft, the * following license terms apply: * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2 as published by the * Free Software Foundation. * * This program is distributed WITHOUT ANY WARRANTY; and without the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, see http://www.gnu.org/licenses/gpl.txt or write to: * * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA USA * 02111-1307 * * * * * CheckBoxListEntry.java * * Created on October 5, 2006, 10:19 AM * */
/**
* * @author gtoffoli */
class CheckBoxListEntry extends JCheckBox {
private Object value = null; private boolean red = false; public CheckBoxListEntry(Object itemValue, boolean selected) { super(itemValue == null ? "" : "" + itemValue, selected); setValue(itemValue); } public boolean isSelected() { return super.isSelected(); } public void setSelected(boolean selected) { super.setSelected(selected); } public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } public boolean isRed() { return red; } public void setRed(boolean red) { this.red = red; }
}
</source>
CheckBox List by Zhiguo Yin
<source lang="java">
/* author: yinzhiguo mail: yin_zhiguo at hotmail.ru 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.jexp.java.swing.rumon.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 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") // <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(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.jexp.java.swing.rumon.pane; import java.awt.Color; import java.awt.ruponent; 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.jexp.java.swing.rumon.pane; import com.uusee.platform.util.*; import java.awt.ruponent; 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.ru * @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.jexp.java.swing.rumon.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.ru * @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") // <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("????:sub.append("
");
- ");
for(Object o : as){
Book b = (Book)o;
sub.append("
- " + b.getTitle() + ", " + b.getPrice() + " ");
}sub.append("");
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
}
</source>
Check List Example
<source lang="java">
// Example from http://www.crionics.ru/products/opensource/faq/swing_ex/SwingExamples.html //File:CheckListExample.java /* (swing1.1.1beta2) */
import java.awt.BorderLayout; import java.awt.Color; import java.awt.ruponent; import java.awt.Dimension; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Enumeration; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTree; import javax.swing.ListCellRenderer; import javax.swing.ListModel; import javax.swing.ListSelectionModel; import javax.swing.UIManager; import javax.swing.border.EmptyBorder; import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.metal.MetalIconFactory; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeCellRenderer; /**
* @version 1.0 04/24/99 */
public class CheckListExample extends JFrame {
public CheckListExample() { super("CheckList Example"); String[] strs = { "swing", "home", "basic", "metal", "JList" }; final JList list = new JList(createData(strs)); // set "home" icon Icon icon = MetalIconFactory.getFileChooserHomeFolderIcon(); ((CheckableItem) list.getModel().getElementAt(1)).setIcon(icon); list.setCellRenderer(new CheckListRenderer()); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.setBorder(new EmptyBorder(0, 4, 0, 0)); list.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { int index = list.locationToIndex(e.getPoint()); CheckableItem item = (CheckableItem) list.getModel() .getElementAt(index); item.setSelected(!item.isSelected()); Rectangle rect = list.getCellBounds(index, index); list.repaint(rect); } }); JScrollPane sp = new JScrollPane(list); final JTextArea textArea = new JTextArea(3, 10); JScrollPane textPanel = new JScrollPane(textArea); JButton printButton = new JButton("print"); printButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ListModel model = list.getModel(); int n = model.getSize(); for (int i = 0; i < n; i++) { CheckableItem item = (CheckableItem) model.getElementAt(i); if (item.isSelected()) { textArea.append(item.toString()); textArea.append(System.getProperty("line.separator")); } } } }); JButton clearButton = new JButton("clear"); clearButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { textArea.setText(""); } }); JPanel panel = new JPanel(new GridLayout(2, 1)); panel.add(printButton); panel.add(clearButton); getContentPane().add(sp, BorderLayout.CENTER); getContentPane().add(panel, BorderLayout.EAST); getContentPane().add(textPanel, BorderLayout.SOUTH); } private CheckableItem[] createData(String[] strs) { int n = strs.length; CheckableItem[] items = new CheckableItem[n]; for (int i = 0; i < n; i++) { items[i] = new CheckableItem(strs[i]); } return items; } class CheckableItem { private String str; private boolean isSelected; private Icon icon; public CheckableItem(String str) { this.str = str; isSelected = false; } public void setSelected(boolean b) { isSelected = b; } public boolean isSelected() { return isSelected; } public String toString() { return str; } public void setIcon(Icon icon) { this.icon = icon; } public Icon getIcon() { return icon; } } class CheckListRenderer extends CheckRenderer implements ListCellRenderer { Icon commonIcon; public CheckListRenderer() { check.setBackground(UIManager.getColor("List.textBackground")); label.setForeground(UIManager.getColor("List.textForeground")); commonIcon = UIManager.getIcon("Tree.leafIcon"); } public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean hasFocus) { setEnabled(list.isEnabled()); check.setSelected(((CheckableItem) value).isSelected()); label.setFont(list.getFont()); label.setText(value.toString()); label.setSelected(isSelected); label.setFocus(hasFocus); Icon icon = ((CheckableItem) value).getIcon(); if (icon == null) { icon = commonIcon; } label.setIcon(icon); return this; } } public static void main(String args[]) { try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch (Exception evt) {} CheckListExample frame = new CheckListExample(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setSize(300, 200); frame.setVisible(true); }
} class CheckRenderer extends JPanel implements TreeCellRenderer {
protected JCheckBox check; protected TreeLabel label; public CheckRenderer() { setLayout(null); add(check = new JCheckBox()); add(label = new TreeLabel()); check.setBackground(UIManager.getColor("Tree.textBackground")); label.setForeground(UIManager.getColor("Tree.textForeground")); } public Component getTreeCellRendererComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row, boolean hasFocus) { String stringValue = tree.convertValueToText(value, isSelected, expanded, leaf, row, hasFocus); setEnabled(tree.isEnabled()); check.setSelected(((CheckNode) value).isSelected()); label.setFont(tree.getFont()); label.setText(stringValue); label.setSelected(isSelected); label.setFocus(hasFocus); if (leaf) { label.setIcon(UIManager.getIcon("Tree.leafIcon")); } else if (expanded) { label.setIcon(UIManager.getIcon("Tree.openIcon")); } else { label.setIcon(UIManager.getIcon("Tree.closedIcon")); } return this; } public Dimension getPreferredSize() { Dimension d_check = check.getPreferredSize(); Dimension d_label = label.getPreferredSize(); return new Dimension(d_check.width + d_label.width, (d_check.height < d_label.height ? d_label.height : d_check.height)); } public void doLayout() { Dimension d_check = check.getPreferredSize(); Dimension d_label = label.getPreferredSize(); int y_check = 0; int y_label = 0; if (d_check.height < d_label.height) { y_check = (d_label.height - d_check.height) / 2; } else { y_label = (d_check.height - d_label.height) / 2; } check.setLocation(0, y_check); check.setBounds(0, y_check, d_check.width, d_check.height); label.setLocation(d_check.width, y_label); label.setBounds(d_check.width, y_label, d_label.width, d_label.height); } public void setBackground(Color color) { if (color instanceof ColorUIResource) color = null; super.setBackground(color); } public class TreeLabel extends JLabel { boolean isSelected; boolean hasFocus; public TreeLabel() { } public void setBackground(Color color) { if (color instanceof ColorUIResource) color = null; super.setBackground(color); } public void paint(Graphics g) { String str; if ((str = getText()) != null) { if (0 < str.length()) { if (isSelected) { g.setColor(UIManager .getColor("Tree.selectionBackground")); } else { g.setColor(UIManager.getColor("Tree.textBackground")); } Dimension d = getPreferredSize(); int imageOffset = 0; Icon currentI = getIcon(); if (currentI != null) { imageOffset = currentI.getIconWidth() + Math.max(0, getIconTextGap() - 1); } g.fillRect(imageOffset, 0, d.width - 1 - imageOffset, d.height); if (hasFocus) { g.setColor(UIManager .getColor("Tree.selectionBorderColor")); g.drawRect(imageOffset, 0, d.width - 1 - imageOffset, d.height - 1); } } } super.paint(g); } public Dimension getPreferredSize() { Dimension retDimension = super.getPreferredSize(); if (retDimension != null) { retDimension = new Dimension(retDimension.width + 3, retDimension.height); } return retDimension; } public void setSelected(boolean isSelected) { this.isSelected = isSelected; } public void setFocus(boolean hasFocus) { this.hasFocus = hasFocus; } }
} class CheckNode extends DefaultMutableTreeNode {
public final static int SINGLE_SELECTION = 0; public final static int DIG_IN_SELECTION = 4; protected int selectionMode; protected boolean isSelected; public CheckNode() { this(null); } public CheckNode(Object userObject) { this(userObject, true, false); } public CheckNode(Object userObject, boolean allowsChildren, boolean isSelected) { super(userObject, allowsChildren); this.isSelected = isSelected; setSelectionMode(DIG_IN_SELECTION); } public void setSelectionMode(int mode) { selectionMode = mode; } public int getSelectionMode() { return selectionMode; } public void setSelected(boolean isSelected) { this.isSelected = isSelected; if ((selectionMode == DIG_IN_SELECTION) && (children != null)) { Enumeration e = children.elements(); while (e.hasMoreElements()) { CheckNode node = (CheckNode) e.nextElement(); node.setSelected(isSelected); } } } public boolean isSelected() { return isSelected; } // If you want to change "isSelected" by CellEditor, /* * public void setUserObject(Object obj) { if (obj instanceof Boolean) { * setSelected(((Boolean)obj).booleanValue()); } else { * super.setUserObject(obj); } } */
}
</source>
Check List Example 2
<source lang="java">
// Example from http://www.crionics.ru/products/opensource/faq/swing_ex/SwingExamples.html //File:CheckListExample2.java /* (swing1.1.1beta2) */
import java.awt.BorderLayout; import java.awt.ruponent; import java.awt.GridLayout; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.ListCellRenderer; import javax.swing.ListModel; import javax.swing.ListSelectionModel; import javax.swing.UIManager; import javax.swing.border.EmptyBorder; /**
* @version 1.0 04/26/99 */
public class CheckListExample2 extends JFrame {
public CheckListExample2() { super("CheckList Example"); String[] strs = { "swing", "home", "basic", "metal", "JList" }; final JList list = new JList(createData(strs)); list.setCellRenderer(new CheckListRenderer()); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.setBorder(new EmptyBorder(0, 4, 0, 0)); list.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { int index = list.locationToIndex(e.getPoint()); CheckableItem item = (CheckableItem) list.getModel() .getElementAt(index); item.setSelected(!item.isSelected()); Rectangle rect = list.getCellBounds(index, index); list.repaint(rect); } }); JScrollPane sp = new JScrollPane(list); final JTextArea textArea = new JTextArea(3, 10); JScrollPane textPanel = new JScrollPane(textArea); JButton printButton = new JButton("print"); printButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ListModel model = list.getModel(); int n = model.getSize(); for (int i = 0; i < n; i++) { CheckableItem item = (CheckableItem) model.getElementAt(i); if (item.isSelected()) { textArea.append(item.toString()); textArea.append(System.getProperty("line.separator")); } } } }); JButton clearButton = new JButton("clear"); clearButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { textArea.setText(""); } }); JPanel panel = new JPanel(new GridLayout(2, 1)); panel.add(printButton); panel.add(clearButton); getContentPane().add(sp, BorderLayout.CENTER); getContentPane().add(panel, BorderLayout.EAST); getContentPane().add(textPanel, BorderLayout.SOUTH); } private CheckableItem[] createData(String[] strs) { int n = strs.length; CheckableItem[] items = new CheckableItem[n]; for (int i = 0; i < n; i++) { items[i] = new CheckableItem(strs[i]); } return items; } class CheckableItem { private String str; private boolean isSelected; public CheckableItem(String str) { this.str = str; isSelected = false; } public void setSelected(boolean b) { isSelected = b; } public boolean isSelected() { return isSelected; } public String toString() { return str; } } class CheckListRenderer extends JCheckBox implements ListCellRenderer { public CheckListRenderer() { setBackground(UIManager.getColor("List.textBackground")); setForeground(UIManager.getColor("List.textForeground")); } public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean hasFocus) { setEnabled(list.isEnabled()); setSelected(((CheckableItem) value).isSelected()); setFont(list.getFont()); setText(value.toString()); return this; } } public static void main(String args[]) { try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch (Exception evt) {} CheckListExample2 frame = new CheckListExample2(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setSize(300, 200); frame.setVisible(true); }
}
</source>
DND Drag and drop List
<source lang="java">
/**
* This is an example of a component, which serves as a DragSource as * well as Drop Target. * To illustrate the concept, JList has been used as a droppable target * and a draggable source. * Any component can be used instead of a JList. * The code also contains debugging messages which can be used for * diagnostics and understanding the flow of events. * * @version 1.0 */
import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; import java.awt.dnd.DragGestureEvent; import java.awt.dnd.DragGestureListener; import java.awt.dnd.DragSource; import java.awt.dnd.DragSourceDragEvent; import java.awt.dnd.DragSourceDropEvent; import java.awt.dnd.DragSourceEvent; import java.awt.dnd.DragSourceListener; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import javax.swing.DefaultListModel; import javax.swing.JList; import javax.swing.ListModel;
public class DNDList extends JList implements DropTargetListener, DragSourceListener, DragGestureListener {
/** * enables this component to be a dropTarget */ DropTarget dropTarget = null; /** * enables this component to be a Drag Source */ DragSource dragSource = null; /** * constructor - initializes the DropTarget and DragSource. */ public DNDList( ListModel dataModel ) { super( dataModel ); dropTarget = new DropTarget( this, this ); dragSource = new DragSource(); dragSource.createDefaultDragGestureRecognizer( this, DnDConstants.ACTION_MOVE, this ); } /** * is invoked when you are dragging over the DropSite * */ public void dragEnter( DropTargetDragEvent event ) { // debug messages for diagnostics System.out.println( "dragEnter" ); event.acceptDrag( DnDConstants.ACTION_MOVE ); } /** * is invoked when you are exit the DropSite without dropping * */ public void dragExit( DropTargetEvent event ) { System.out.println( "dragExit" ); } /** * is invoked when a drag operation is going on * */ public void dragOver( DropTargetDragEvent event ) { System.out.println( "dragOver" ); } /** * a drop has occurred * */ public void drop( DropTargetDropEvent event ) { try { Transferable transferable = event.getTransferable(); // we accept only Strings if( transferable.isDataFlavorSupported( DataFlavor.stringFlavor ) ) { event.acceptDrop( DnDConstants.ACTION_MOVE ); String s = ( String )transferable.getTransferData( DataFlavor.stringFlavor ); addElement( s ); event.getDropTargetContext().dropComplete( true ); } else { event.rejectDrop(); } } catch( Exception exception ) { System.err.println( "Exception" + exception.getMessage() ); event.rejectDrop(); } } /** * is invoked if the use modifies the current drop gesture * */ public void dropActionChanged( DropTargetDragEvent event ) { } /** * a drag gesture has been initiated * */ public void dragGestureRecognized( DragGestureEvent event ) { Object selected = getSelectedValue(); if( selected != null ) { StringSelection text = new StringSelection( selected.toString() ); // as the name suggests, starts the dragging dragSource.startDrag( event, DragSource.DefaultMoveDrop, text, this ); } else { System.out.println( "nothing was selected" ); } } /** * this message goes to DragSourceListener, informing it that the dragging * has ended * */ public void dragDropEnd( DragSourceDropEvent event ) { if( event.getDropSuccess() ) { removeElement(); } } /** * this message goes to DragSourceListener, informing it that the dragging * has entered the DropSite * */ public void dragEnter( DragSourceDragEvent event ) { System.out.println( " dragEnter" ); } /** * this message goes to DragSourceListener, informing it that the dragging * has exited the DropSite * */ public void dragExit( DragSourceEvent event ) { System.out.println( "dragExit" ); } /** * this message goes to DragSourceListener, informing it that the dragging is * currently ocurring over the DropSite * */ public void dragOver( DragSourceDragEvent event ) { System.out.println( "dragExit" ); } /** * is invoked when the user changes the dropAction * */ public void dropActionChanged( DragSourceDragEvent event ) { System.out.println( "dropActionChanged" ); } /** * adds elements to itself * */ public void addElement( Object s ) { ( ( DefaultListModel )getModel() ).addElement( s.toString() ); } /** * removes an element from itself */ public void removeElement() { ( ( DefaultListModel )getModel() ).removeElement( getSelectedValue() ); }
}
</source>
Editable List Example
<source lang="java">
// Example from http://www.crionics.ru/products/opensource/faq/swing_ex/SwingExamples.html /*
* (swing1.1) */
import java.awt.Container; import java.awt.Dimension; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Vector; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.JSeparator; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.table.DefaultTableModel; /**
* @version 1.0 12/24/98 */
public class EditableListExample extends JFrame {
public EditableListExample() { super("Editable List Example"); String[] data = { "a", "b", "c", "d", "e", "f", "g" }; JList list = new JList(data); JScrollPane scrollList = new JScrollPane(list); scrollList.setMinimumSize(new Dimension(100, 80)); Box listBox = new Box(BoxLayout.Y_AXIS); listBox.add(scrollList); listBox.add(new JLabel("JList")); DefaultTableModel dm = new DefaultTableModel(); Vector dummyHeader = new Vector(); dummyHeader.addElement(""); dm.setDataVector(strArray2Vector(data), dummyHeader); JTable table = new JTable(dm); table.setShowGrid(false); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); JScrollPane scrollTable = new JScrollPane(table); scrollTable.setColumnHeader(null); scrollTable.setMinimumSize(new Dimension(100, 80)); Box tableBox = new Box(BoxLayout.Y_AXIS); tableBox.add(scrollTable); tableBox.add(new JLabel("JTable")); Container c = getContentPane(); c.setLayout(new BoxLayout(c, BoxLayout.X_AXIS)); c.add(listBox); c.add(new JSeparator(SwingConstants.VERTICAL)); //c.add(new JLabel("test")); //c.add(new JSeparator(SwingConstants.HORIZONTAL)); c.add(tableBox); setSize(220, 130); setVisible(true); } private Vector strArray2Vector(String[] str) { Vector vector = new Vector(); for (int i = 0; i < str.length; i++) { Vector v = new Vector(); v.addElement(str[i]); vector.addElement(v); } return vector; } public static void main(String[] args) { final EditableListExample frame = new EditableListExample(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); }
}
</source>
Mouse Roll over List
ToolTip List Example
<source lang="java">
// Example from http://www.crionics.ru/products/opensource/faq/swing_ex/SwingExamples.html //File:ToolTipListExample.java /* (swing1.1.1) */
import java.awt.BorderLayout; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.UIManager; /**
* @version 1.0 08/26/99 */
public class ToolTipListExample extends JFrame {
public ToolTipListExample() { super("ToolTip Example"); String[][] strs = { { "Acinonyx jutatus", "Cheetah" }, { "Panthera leo", "Lion" }, { "Canis lupus", "Wolf" }, { "Lycaon pictus", "Llycaon" }, { "Vulpes Vulpes", "Fox" } }; JList list = new JList(createItems(strs)) { public String getToolTipText(MouseEvent e) { int index = locationToIndex(e.getPoint()); if (-1 < index) { ToolTipItem item = (ToolTipItem) getModel().getElementAt( index); return item.getToolTipText(); } else { //return super.getToolTipText(); return null; } } }; list.setToolTipText(""); getContentPane().add(new JScrollPane(list), BorderLayout.CENTER); } Object[] createItems(String[][] strs) { ToolTipItem[] items = new ToolTipItem[strs.length]; for (int i = 0; i < strs.length; i++) { items[i] = new ToolTipItem(strs[i][0], strs[i][1]); } return items; } class ToolTipItem { String obj; String toolTipText; public ToolTipItem(String obj, String text) { this.obj = obj; this.toolTipText = text; } public String getToolTipText() { return toolTipText; } public String toString() { return obj; } } public static void main(String args[]) { try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch (Exception evt) {} ToolTipListExample frame = new ToolTipListExample(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setSize(140, 150); frame.setVisible(true); }
}
</source>