package compexample; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.swing.JButton; import javax.swing.JColorChooser; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableCellRenderer; /** * A GUI for a book of names, emails, phone numbers, and * favorite colors. * @author rayhe * */ public class ComparatorExample{ // constants private final int COLUMN_WIDTH = 150; public static final String ASCENDING = "ascending"; public static final String DESCENDING = "descending"; // class variables - note that some declarations are made here for simplicity private JFrame mainFrame = new JFrame("Comparator Example GUI - Tests public 'class Person implements comparable'"){ private static final long serialVersionUID = 60920320061L; // anti-aliasing code public void paint (Graphics someG){ Graphics2D myG = (Graphics2D) someG; myG.setRenderingHint(RenderingHints.KEY_ANTIALIASING, // Anti-alias! RenderingHints.VALUE_ANTIALIAS_ON); super.paint(myG); } }; private JTable dataTable; private JScrollPane scrollPane; private ArrayList people = new ArrayList (); private PersonTableModel personTableModel = new PersonTableModel(people); private JPanel controlPanel = new JPanel(); private JButton addPerson = new AntiAliasJButton("Add Person"); private JButton removePerson = new AntiAliasJButton("Remove Person"); private JButton sort = new AntiAliasJButton("Sort Table"); private JDialog ccDialog = new JDialog(){ private static final long serialVersionUID = 60920320064L; // anti-aliasing code public void paint (Graphics someG){ Graphics2D myG = (Graphics2D) someG; myG.setRenderingHint(RenderingHints.KEY_ANTIALIASING, // Anti-alias! RenderingHints.VALUE_ANTIALIAS_ON); super.paint(myG); } }; private JComboBox columnSelect =new JComboBox(Person.getAllFields().toArray()); private String[] sortOrders ={ASCENDING,DESCENDING}; private JComboBox sortOrder = new JComboBox(sortOrders); /** * Constructor creates the GUI, loading the default table data, and creates * all the containers/components contained by the GUI. */ public ComparatorExample(){ controlPanel.add(addPerson); controlPanel.add(removePerson); controlPanel.add(new AntiAliasJLabel("sort by:")); controlPanel.add(columnSelect); controlPanel.add(new AntiAliasJLabel("order:")); controlPanel.add(sortOrder); controlPanel.add(sort); // make the buttons execute methods in the class when clicked addPerson.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { addPerson(); } }); removePerson.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { removePerson(); } }); sort.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { sort(); } }); dataTable = new JTable(personTableModel); // sets a specific renderer for JButtons, which is what is used to display the colored Color cells TableCellRenderer defaultRenderer = dataTable.getDefaultRenderer(JButton.class); dataTable.setDefaultRenderer(JButton.class,new ExtendedTableRenderer(defaultRenderer)); // add the pass-through table-to-underlying-buttons listener, which is in // ExtendedTableRender.java dataTable.addMouseListener(new JTableButtonMouseListener(dataTable)); // make all the string fields wider, so there's less overlap for (int i=0;i people; /** * * @param people - the list from ComparatorExample * for inquiries/to keep in sync */ public PersonTableModel(List people){ this.people=people; } public int getRowCount(){ return people.size(); } public int getColumnCount(){ return Person.NUM_FIELDS; } /** * relies on Person class to determine number * of fields, what they say and what they do when * edited. * @param the column, to match up with Person.getFieldColumn(the index) * @return either the string that matches the column in person.getFieldColumn * or an empty string (shouldn't happen). */ public String getColumnName(int columnIndex){ if (Person.getFieldColumn(columnIndex) != null) return Person.getFieldColumn(columnIndex); return ""; } @SuppressWarnings ({"unchecked"}) public Class getColumnClass(int columnIndex){ return Person.getClass(columnIndex); } /** * Evertying except the color, which is a special button * @return whether a !cell is the color cell or not */ public boolean isCellEditable(int rowIndex,int columnIndex){ if (columnIndex != Person.COL_COLOR) return true; return false; } public Object getValueAt(int rowIndex,int columnIndex){ return people.get(rowIndex).getField(columnIndex); } public void setValueAt(Object aValue, int rowIndex, int columnIndex){ if (columnIndex != Person.COL_COLOR){ people.get(rowIndex).setField(columnIndex,(String)aValue); } } } public static void main(String[] args) { new ComparatorExample(); } }