package dk.itu.oop.lecture11; import java.awt.*; import java.awt.event.*; import java.text.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; import java.util.*; public class ListExample{ public static void main(String[] args){ final MyWindow mainFrame = new MyWindow(); } } class MyWindow extends JFrame { static final String[] columnNames = {"Dato","Båd","Ud","Hjem","Km"}; static final Object[][] data = { {new DateFromString("12/2"), "Blishønen", new DateFromString("11:30"), new DateFromString("13:30"), new Integer(8)}, {new DateFromString("19/2"), "Blishønen II", new DateFromString("15:30"), new DateFromString("17:30"), new Integer(10)}, {new DateFromString("23/2"), "Sangsvanen", new DateFromString("11:30"), new DateFromString("15:30"), new Integer(15)}, {new DateFromString("3/3"), "Høgen", new DateFromString("9:30"), new DateFromString("13:30"), new Integer(25)}, {new DateFromString("5/3"), "Blishønen", new DateFromString("11:30"), new DateFromString("13:30"), new Integer(12)} }; static final Person[] names= { new Person("Ai Zhu"), new Person("Archard Kalumuna Buberwa "), new Person("Bjarne Damgaard Pedersen"), new Person("Brigitte S Kammersgaard-Andersen"), new Person("Cenap Inci"), new Person("Dan Arildsen"), new Person("Danny Mortensen"), new Person("Haseeb Ullah Bangash"), new Person("Henrik Bie"), new Person("Jacob Friis Mathiasen"), new Person("Janaki Rami Reddy Samanthula"), new Person("Jens Lind"), new Person("Jeppe Heilmann Risum"), new Person("John Udo Ukpo"), new Person("Junko Tomita"), new Person("Karin Agerbæk Jensen"), new Person("Kasper Svenstrup Kock"), new Person("Louise Kjær Brun Pedersen"), new Person("Mahmud Yaqubi "), new Person("Martin Kræn Mølvig"), new Person("Michael Lund"), new Person("Nils Georg Rydh"), new Person("Salai Sang Hmung Thianhlun"), new Person("Sebastien Inizan"), new Person("Simon Christian Harpøth Kofod"), new Person("Thomas Stuart Henney"), new Person("Viktoria Kuzina"), new Person("Xijie Lu"), new Person("Yongqiang Lu"), new Person("Yuan Mang"), new Person("Zulfiqar Hyder"), new Person("Abid Hanif"), new Person("Claus Heegaard Poulsen"), new Person("Erik Edmund Witsolt Rasmussen"), new Person("Johannes Müller"), new Person("Joyce Lusunike "), new Person("Lars Strange"), new Person("Lene Ann Rasmussen"), new Person("Lone Reinevald Broch"), new Person("Marianne Jenny Bengtson"), new Person("Martin Faber-Rod Munch"), new Person("Nikolaj Drumm"), new Person("Raghava Rao Mukkamala"), new Person("René Jeanty Jensen"), new Person("Rupa Gadiraju"), new Person("Thomas Andersen"), new Person("Tonny C Holdorf Petersen"), new Person("Torben Møgelmose")}; MyWindow(){ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(700, 400); setTitle("TableTest"); final JTable table = new Rokort(data, columnNames); table.setCellSelectionEnabled(true); table.getModel().addTableModelListener(new TableModelListener(){ public void tableChanged(TableModelEvent e){ if (e.getType() == TableModelEvent.UPDATE ){ int row = table.getSelectedRow(); int col = table.getSelectedColumn(); System.out.println("Row: " + row + " Column: " + col + " = " + table.getModel().getValueAt( row, col )); } } }); JScrollPane scrollPane = new JScrollPane(table); //Add the scroll pane to this panel. this.getContentPane().setLayout(new BorderLayout()); this.getContentPane().add(scrollPane,"Center"); final JTextField f = new JTextField(); f.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ DateFromString dfs = new DateFromString(f.getText()); System.out.println(String.valueOf(dfs) ); }}); this.getContentPane().add(f,"South"); final SelectingList members = new SelectingList(names); this.getContentPane().add( members, "West"); members.addListener( new SelectingList.Listener(){ public void selectionChanged(SelectingList.Listener.Event ev){ if (ev.getSelection() == null) System.out.println("No selection"); else System.out.println("Selection: " + ev.getSelection() ); }}); setVisible(true); } } class OOPTable extends JTable{ public OOPTable(Object[][] data, String[] colNames){ super(data,colNames); addFocusListener(new FocusAdapter(){ public void focusLost(FocusEvent e){ if ( isEditing() ) getCellEditor( getSelectedRow() , getSelectedColumn() ).stopCellEditing(); } }); } } class Rokort extends OOPTable{ Rokort(Object[][] data, String[] colNames){ super(data, colNames); getModel().addTableModelListener(new TableModelListener(){ public void tableChanged(TableModelEvent e){ if ( e.getType() == TableModelEvent.UPDATE ){ checkRokort(e.getFirstRow(), e.getColumn() ); } } }); } void checkRokort(int row, int col){ if (col == 0 || col == 2 || col == 3 ){ String s = (String)getModel().getValueAt(col, row); DateFromString dfs = new DateFromString( s ); getModel().setValueAt(dfs, col, row); } } } class Person { static int c = 1000; String name; int cpr = c++; int age = cpr*31%50+15; Person(String n){name = n;} public String toString(){return name;} String fullString(){return name + " age: " + age + " cpr: " + cpr;} } class DateFromString { Date d; int year, month, day, hour, min; DateFromString(String s){ setValues(s); } private final static DateFormat fullYear = new SimpleDateFormat("d/M/yyyy H:m"); private final static DateFormat full = new SimpleDateFormat("d/M/y H:m"); private final static DateFormat fullNoYear = new SimpleDateFormat("d/M H:m"); private final static DateFormat dateOnly = new SimpleDateFormat("d/M/y"); private final static DateFormat dateNoYear = new SimpleDateFormat("d/M"); private final static DateFormat time = new SimpleDateFormat("H:m"); private final static DateFormat[] df = {full, fullNoYear, dateOnly, dateNoYear, time}; private Date parse(String s){ Date d = null; for (int i = 0; i