Java tutorial
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Collections; import java.util.LinkedList; import java.util.List; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; public class MainClass extends ApplicationWindow { private StudentTableModel model = new StudentTableModel(); private TableViewer tv; public MainClass() { super(null); setBlockOnOpen(true); open(); Display.getCurrent().dispose(); } protected void configureShell(Shell shell) { super.configureShell(shell); shell.setSize(400, 400); } protected Control createContents(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(1, false)); Combo combo = new Combo(composite, SWT.READ_ONLY); combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); tv = new TableViewer(composite); tv.setContentProvider(new PlayerContentProvider()); tv.setLabelProvider(new PlayerLabelProvider()); tv.setSorter(new StudentViewerSorter()); Table table = tv.getTable(); table.setLayoutData(new GridData(GridData.FILL_BOTH)); TableColumn tc = new TableColumn(table, SWT.LEFT); tc.setText("First Name"); tc.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { ((StudentViewerSorter) tv.getSorter()).doSort(Const.COLUMN_FIRST_NAME); tv.refresh(); } }); tc = new TableColumn(table, SWT.LEFT); tc.setText("Last Name"); tc.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { ((StudentViewerSorter) tv.getSorter()).doSort(Const.COLUMN_LAST_NAME); tv.refresh(); } }); tc = new TableColumn(table, SWT.RIGHT); tc.setText("Math"); tc.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { ((StudentViewerSorter) tv.getSorter()).doSort(Const.COLUMN_MATH); tv.refresh(); } }); tc = new TableColumn(table, SWT.RIGHT); tc.setText("CHEM"); tc.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { ((StudentViewerSorter) tv.getSorter()).doSort(Const.COLUMN_CHEM); tv.refresh(); } }); tc = new TableColumn(table, SWT.RIGHT); tc.setText("AVE"); tc.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { ((StudentViewerSorter) tv.getSorter()).doSort(Const.COLUMN_AVE); tv.refresh(); } }); for (int i = 0, n = model.teams.length; i < n; i++) { combo.add(model.teams[i].getName()); } combo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { update(model.teams[((Combo) event.widget).getSelectionIndex()]); } }); combo.select(0); update(model.teams[0]); for (int i = 0, n = table.getColumnCount(); i < n; i++) { table.getColumn(i).pack(); } table.setHeaderVisible(true); table.setLinesVisible(true); return composite; } private void update(HighSchool team) { getShell().setText(team.getYear() + " " + team.getName()); tv.setInput(team); } public static void main(String[] args) { new MainClass(); } } class StudentTableModel { public HighSchool[] teams; public StudentTableModel() { teams = new HighSchool[3]; teams[0] = new HighSchool("school 1", "1985-86"); teams[0].add(new Student("A", "a", 25.8f, 9.8f, 6.8f)); teams[0].add(new Student("B", "b", 21.3f, 8.1f, 2.7f)); teams[0].add(new Student("C", "c", 16.1f, 9.5f, 1.8f)); teams[1] = new HighSchool("school 2", "1995-96"); teams[1].add(new Student("Michael", "Jordan", 30.4f, 6.6f, 4.3f)); teams[1].add(new Student("Scottie", "Pippen", 19.4f, 6.4f, 5.9f)); teams[1].add(new Student("Toni", "Kukoc", 13.1f, 4.0f, 3.5f)); teams[2] = new HighSchool("scholl 3", "1987-1988"); teams[2].add(new Student("Magic", "Johnson", 23.9f, 6.3f, 12.2f)); teams[2].add(new Student("James", "Worthy", 19.4f, 5.7f, 2.8f)); } } class PlayerLabelProvider implements ITableLabelProvider { private Image ball; public PlayerLabelProvider() { try { ball = new Image(null, new FileInputStream("images/ball.png")); } catch (FileNotFoundException e) { } } public Image getColumnImage(Object arg0, int arg1) { Student player = (Student) arg0; Image image = null; switch (arg1) { case Const.COLUMN_MATH: case Const.COLUMN_CHEM: case Const.COLUMN_AVE: if (player.ledTeam(arg1)) image = ball; break; } return image; } public String getColumnText(Object arg0, int arg1) { Student player = (Student) arg0; String text = ""; switch (arg1) { case Const.COLUMN_FIRST_NAME: text = player.getFirstName(); break; case Const.COLUMN_LAST_NAME: text = player.getLastName(); break; case Const.COLUMN_MATH: text = String.valueOf(player.getMath()); break; case Const.COLUMN_CHEM: text = String.valueOf(player.getChem()); break; case Const.COLUMN_AVE: text = String.valueOf(player.getAve()); break; } return text; } public void addListener(ILabelProviderListener arg0) { } public void dispose() { if (ball != null) ball.dispose(); } public boolean isLabelProperty(Object arg0, String arg1) { return false; } public void removeListener(ILabelProviderListener arg0) { } } class PlayerContentProvider implements IStructuredContentProvider { public Object[] getElements(Object arg0) { return ((HighSchool) arg0).getPlayers().toArray(); } public void dispose() { } public void inputChanged(Viewer arg0, Object arg1, Object arg2) { } } class Const { public static final int COLUMN_FIRST_NAME = 0; public static final int COLUMN_LAST_NAME = 1; public static final int COLUMN_MATH = 2; public static final int COLUMN_CHEM = 3; public static final int COLUMN_AVE = 4; } class HighSchool { private String name; private String year; private List players; public HighSchool(String name, String year) { this.name = name; this.year = year; players = new LinkedList(); } public String getName() { return name; } public String getYear() { return year; } public boolean add(Student player) { boolean added = players.add(player); if (added) player.setSchool(this); return added; } public List getPlayers() { return Collections.unmodifiableList(players); } public boolean led(Student player, int column) { boolean led = true; for (int i = 0, n = players.size(); i < n && led; i++) { Student test = (Student) players.get(i); if (player == test) continue; switch (column) { case Const.COLUMN_MATH: if (player.getMath() < test.getMath()) led = false; break; case Const.COLUMN_CHEM: if (player.getChem() < test.getChem()) led = false; break; case Const.COLUMN_AVE: if (player.getAve() < test.getAve()) led = false; break; } } return led; } } class Student { private HighSchool team; private String lastName; private String firstName; private float math; private float chem; private float ave; public Student() { this(null, null, 0.0f, 0.0f, 0.0f); } public Student(String firstName, String lastName, float m, float c, float a) { setFirstName(firstName); setLastName(lastName); setMath(m); setChem(c); setAve(a); } public void setSchool(HighSchool team) { this.team = team; } public float getAve() { return ave; } public void setAve(float assists) { this.ave = assists; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public float getMath() { return math; } public void setMath(float points) { this.math = points; } public float getChem() { return chem; } public void setChem(float rebounds) { this.chem = rebounds; } public HighSchool getTeam() { return team; } public boolean ledTeam(int column) { return team.led(this, column); } } class StudentViewerSorter extends ViewerSorter { private static final int ASCENDING = 0; private static final int DESCENDING = 1; private int column; private int direction; public void doSort(int column) { if (column == this.column) { direction = 1 - direction; } else { this.column = column; direction = ASCENDING; } } public int compare(Viewer viewer, Object e1, Object e2) { int rc = 0; Student p1 = (Student) e1; Student p2 = (Student) e2; switch (column) { case Const.COLUMN_FIRST_NAME: rc = collator.compare(p1.getFirstName(), p2.getFirstName()); break; case Const.COLUMN_LAST_NAME: rc = collator.compare(p1.getLastName(), p2.getLastName()); break; case Const.COLUMN_MATH: rc = p1.getMath() > p2.getMath() ? 1 : -1; break; case Const.COLUMN_CHEM: rc = p1.getChem() > p2.getChem() ? 1 : -1; break; case Const.COLUMN_AVE: rc = p1.getAve() > p2.getAve() ? 1 : -1; break; } if (direction == DESCENDING) rc = -rc; return rc; } }