分类: Java
2009-06-19 19:10:29
package com.wukong.test.family.control;
import java.util.*;
import com.wukong.test.family.control.impl.*;
public interface FamilyInfoDatabase {
public static class FamilyFactory {
private static FamilyInfoDatabase database;
public static FamilyInfoDatabase getDatabaseInstance(){
if(database == null){
database = new FamilyDatabase();
}
return database;
}
}
public String[] getColumns();
public Object getValueAt(int row, int column);
public String[] getSortingFields();
public int getRowCount();
public void sort(String sortField) throws IllegalArgumentException;
public void addEntry(List columns, List values) throws IllegalArgumentException;
public void deleteEntry(String familyName);
public void update(String familyName,List columns, List values)throws IllegalArgumentException;
}
package com.wukong.test.family.model.impl;
public class FamilyInfoEntry {
private String familyName;
private int population;
private int incomePerYear;
FamilyInfoEntry(String familyName,int population,int income){
this.familyName = familyName;
this.population = population;
this.incomePerYear = income;
}
String getFamilyName() {
return familyName;
}
int getIncomePerYear() {
return incomePerYear;
}
int getPopulation() {
return population;
}
}
package com.wukong.test.family.control.impl;
import com.wukong.test.family.control.FamilyInfoDatabase;
import java.util.*;
public class FamilyDatabase implements FamilyInfoDatabase {
private LinkedList familyEntryList = new LinkedList();
private Object[] sortedValues = null;
public FamilyDatabase() {
this.familyEntryList.add(new FamilyInfoEntry("Zhang",3,1200));
this.familyEntryList.add(new FamilyInfoEntry("Li",6,1800));
this.familyEntryList.add(new FamilyInfoEntry("Liu",4,1500));
this.sortedValues = this.familyEntryList.toArray();
}
public String[] getColumns() {
return new String[] { "Family Name", "Family Population", "Income" };
}
public Object getValueAt(int row, int column) {
FamilyInfoEntry entry = (FamilyInfoEntry)this.sortedValues[row];
switch (column) {
case 0:
return entry.getFamilyName();
case 1:
return new Integer(entry.getPopulation());
case 2:
return new Integer(entry.getIncomePerYear());
default:
throw new IllegalArgumentException("Invalid column index.");
}
}
public String[] getSortingFields() {
return new String[] { "FamilyName","Income" };
}
public int getRowCount() {
return this.familyEntryList.size();
}
public void addEntry(List columns, List values)
throws IllegalArgumentException {
}
public void deleteEntry(String familyName) {
}
public void update(String familyName, List columns, List values)
throws IllegalArgumentException {
}
public void sort(String sortField) throws IllegalArgumentException{
if(sortField.equals("FamilyName")){
this.sortedValues = this.familyEntryList.toArray();
Arrays.sort(this.sortedValues,new SortedByName());
}
if(sortField.equals("Income")){
this.sortedValues = this.familyEntryList.toArray();
Arrays.sort(this.sortedValues,new SortedByIncome());
}
throw new IllegalArgumentException("Sorting enties by field '" + sortField + "' is not supported.");
}
class SortedByName implements Comparator{
public int compare(Object entry1,Object entry2) {
if (entry1 == entry2) {
return 0;
}
FamilyInfoEntry en1 = (FamilyInfoEntry) entry1;
FamilyInfoEntry en2 = (FamilyInfoEntry) entry2;
return en1.getFamilyName().compareTo(en2.getFamilyName());
}
}
class SortedByIncome implements Comparator {
public int compare(Object entry1, Object entry2) {
if (entry1 == entry2) {
return 0;
}
FamilyInfoEntry en1 = (FamilyInfoEntry) entry1;
FamilyInfoEntry en2 = (FamilyInfoEntry) entry2;
return en1.getIncomePerYear() - en2.getIncomePerYear();
}
}
}
package com.wukong.test.family.gui;
import org.osgi.framework.*;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import com.wukong.test.family.control.*;
public class FamilyInfoGui implements BundleActivator, ActionListener,ItemListener {
private JFrame mainFrame;
private JPanel contentPanel;
private JTable familiesTable;
private JScrollPane familiesTableScrollPane;
private JPanel sortedByPanel = new JPanel(new GridLayout(1, 2));
private JLabel sortedByLabel = new JLabel("Sorted By: ");
private JComboBox sortedByList = null;
private JPanel commandPanel = new JPanel(new GridLayout(1, 3));
private JButton addEntry = new JButton("Add");
private JButton deleteEntry = new JButton("Delete");
private JButton updateEntry = new JButton("Update");
FamilyInfoDatabase database = null;
public void start(BundleContext context) throws Exception {
Runnable r = new Runnable() {
public void run() {
contentPanel = new JPanel();
familiesTableScrollPane = new JScrollPane();
database = FamilyInfoDatabase.FamilyFactory
.getDatabaseInstance();
familiesTable = new JTable(new FamilyInfoTableModel(database));
familiesTableScrollPane.setViewportView(familiesTable);
String[] sortedFields = database.getSortingFields();
sortedByList = new JComboBox(sortedFields);
sortedByList.addItemListener(FamilyInfoGui.this);
sortedByPanel.add(sortedByLabel);
sortedByPanel.add(sortedByList);
commandPanel.add(addEntry);
commandPanel.add(deleteEntry);
commandPanel.add(updateEntry);
contentPanel.add(sortedByPanel, BorderLayout.NORTH);
contentPanel.add(familiesTableScrollPane, BorderLayout.CENTER);
contentPanel.add(commandPanel, BorderLayout.SOUTH);
mainFrame = new JFrame();
mainFrame.setContentPane(contentPanel);
mainFrame.setSize(new Dimension(500, 600));
mainFrame.show();
}
};
Thread t = new Thread(r);
t.start();
}
public void stop(BundleContext context) throws Exception {
this.mainFrame.dispose();
}
public void actionPerformed(ActionEvent event) {
}
public void itemStateChanged(ItemEvent event) {
if(event.getSource() == this.sortedByList){
String sortingField = (String)event.getItem();
this.database.sort(sortingField);
this.familiesTable.repaint();
}
}
class FamilyInfoTableModel extends AbstractTableModel {
private FamilyInfoDatabase database;
FamilyInfoTableModel(FamilyInfoDatabase database) {
this.database = database;
}
public String getColumnName(int col) {
return database.getColumns()[col];
}
public boolean isCellEditable(int row, int col) {
return false;
}
public int getColumnCount() {
return database.getColumns().length;
}
public int getRowCount() {
return database.getRowCount();
}
public Object getValueAt(int row, int col) {
return database.getValueAt(row, col);
}
}
}
Manifest-Version: 1.0
Bundle-SymbolicName: com.wukong.test.family.control
Bundle-Name: family control
Bundle-Version: 1.0
Bundle-Vendor: LiMing
Export-Package: com.wukong.test.family.control
Manifest-Version: 1.0
Bundle-SymbolicName: com.wukong.test.family.gui
Bundle-Name: family gui
Bundle-Version: 1.0
Bundle-Vendor: LiMing
Bundle-Activator: com.wukong.test.family.gui.FamilyInfoGui
Import-Package: org.osgi.framework;version=1.3,com.wukong.test.family.control
package com.wukong.test.family.control.impl;
import com.wukong.test.family.control.FamilyInfoDatabase;
import java.util.*;
public class FamilyDatabase implements FamilyInfoDatabase {
private LinkedList familyEntryList = new LinkedList();
private Object[] sortedValues = null;
public FamilyDatabase() {
this.familyEntryList.add(new FamilyInfoEntry("Zhang",3,1260));
this.familyEntryList.add(new FamilyInfoEntry("Li",6,1800));
this.familyEntryList.add(new FamilyInfoEntry("Liu",4,1500));
this.sortedValues = this.familyEntryList.toArray();
}
public String[] getColumns() {
return new String[] { "Family Name", "Family Population", "Income" ,"IncomePerPerson"};//添加了“IncomePerPerson”字段
}
public Object getValueAt(int row, int column) {
FamilyInfoEntry entry = (FamilyInfoEntry)this.sortedValues[row];
switch (column) {
case 0:
return entry.getFamilyName();
case 1:
return new Integer(entry.getPopulation());
case 2:
return new Integer(entry.getIncomePerYear());
case 3:
return new Integer(entry.getIncomePerYear()/entry.getPopulation());//计算人均年收入
default:
throw new IllegalArgumentException("Invalid column index.");
}
}
public String[] getSortingFields() {
}
public int getRowCount() {
return this.familyEntryList.size();
}
public void addEntry(List columns, List values)
throws IllegalArgumentException {
// TODO Auto-generated method stub
}
public void deleteEntry(String familyName) {
// TODO Auto-generated method stub
}
public void update(String familyName, List columns, List values)
throws IllegalArgumentException {
// TODO Auto-generated method stub
}
public void sort(String sortField) throws IllegalArgumentException{
if(sortField.equals("FamilyName")){
this.sortedValues = this.familyEntryList.toArray();
Arrays.sort(this.sortedValues,new SortedByName());
}
if(sortField.equals("Income")){
this.sortedValues = this.familyEntryList.toArray();
Arrays.sort(this.sortedValues,new SortedByIncome());
}
if(sortField.equals("IncomePerPerson")){//对纪录按人均年收入进行排序
this.sortedValues = this.familyEntryList.toArray();
Arrays.sort(this.sortedValues,new SortedByIPP());
}
}
class SortedByName implements Comparator{
public int compare(Object entry1,Object entry2) {
if (entry1 == entry2) {
return 0;
}
FamilyInfoEntry en1 = (FamilyInfoEntry) entry1;
FamilyInfoEntry en2 = (FamilyInfoEntry) entry2;
return en1.getFamilyName().compareTo(en2.getFamilyName());
}
}
class SortedByIncome implements Comparator {
public int compare(Object entry1, Object entry2) {
if (entry1 == entry2) {
return 0;
}
FamilyInfoEntry en1 = (FamilyInfoEntry) entry1;
FamilyInfoEntry en2 = (FamilyInfoEntry) entry2;
return en1.getIncomePerYear() - en2.getIncomePerYear();
}
}
class SortedByIPP implements Comparator {//人均年收入的排序标准。
public int compare(Object entry1, Object entry2) {
if (entry1 == entry2) {
return 0;
}
FamilyInfoEntry en1 = (FamilyInfoEntry) entry1;
FamilyInfoEntry en2 = (FamilyInfoEntry) entry2;
return (en1.getIncomePerYear()/en1.getPopulation()) - (en2.getIncomePerYear()/en2.getPopulation());
}
}
}
Manifest-Version: 1.0
Bundle-SymbolicName: com.wukong.test.family.control
Bundle-Name: family control
Bundle-Version: 2.0 //由1.0改为2.0
Bundle-Vendor: LiMing
Export-Package: com.wukong.test.family.control