阅读437 返回首页    go 阿里云 go 技术社区[云栖]


Java ???????????? ??????????????? ??? ?????????Adapter?????? (???)-??????-????????????-?????????

??????????????????????????: ?????????????????????????????????????????????????????????????????????????????????;

--??????????????????????: ??? ???A ????????????????????????????????????, ?????????B ?????????????????????????????????, ????????????????????? ??? ???A ?????????????????????, ???????????????????????????????????????;

--??eg??: ???A ???????????????A1, ???B ???????????????B1, ??????C?????? A ??? B ?????? A ??? B ??????????????????????????????, ???????????????????????????????????????;



1. ????????????



(1) ??????????????????


??????????????:??

--????????????????: ????????????????????? ?????????????????? ???????????? requiredMethod()?????????, ???????????????????????????????????? existMethod() ??????, ????????????????????? ??? ??????????????????????????????????????????;

--????????????????: ?????????????? ????????????,??????????????????????????????????, ???????????????????????????????? requiredMethod()????????????, ?????????????????????????????????, ???????????????????????? ?????????, ?????????????????????????????????,????????????????????????????????????????;

--????????????????: ??????????????????, ?????? ???????????????requiredMethod() ?????? ???????????? existMethod()??????;





(2) ??????????????????


.

????????????????????:??

--?????????????????????????: ??????????????????M1??????, ????????????????????getCaliber() ??????????????????, fire() ??????, run()?????? ?????????;??

--????????????????: ??????????????? ??? getGunCaliber() ??????????????????, GunFire() ????????????, Move() ?????? ?????????;

--????????????????: ??????????????????, ??????????????? Panzer ??????,???????? Tanker ???, ???Panzer???????????????????????? Tanker ???;





???????????:??

[java]??view plaincopy???CODE??????????????????????????????????????????
  1. package??shuliang.han.displaytest;????
  2. ????
  3. public??interface??Panzer??{????
  4. ????
  5. ????????public??double??getCaliber();????
  6. ????????public??void??fire();????
  7. ????????public??void??run();????
  8. ????????????
  9. }????

???????????:??

[java]??view plaincopy???CODE??????????????????????????????????????????
  1. package??shuliang.han.displaytest;????
  2. ????
  3. ????
  4. public??class??Tanker??{????
  5. ????
  6. ????????private??double??caliber??=??125.0;????
  7. ????????????
  8. ????????public??double??getGunCaliber()??{????
  9. ????????????????return??caliber;????
  10. ????????}????
  11. ????????????
  12. ????????public??void??gunFire()??{????
  13. ????????????????System.out.println("Fire??in??the??hole??!!!");????
  14. ????????}????
  15. ????????????
  16. ????????public??void??move()??{????
  17. ????????????????System.out.println("Move??move??!!");????
  18. ????????}????
  19. ????????????
  20. }????


????????:??

--???????????????????: Tanker??????????????????????????? Panzer ????????????????????????, ????????????????????????????????????;

--????????????????: ?????????????????? M1A2SEP ???, ??????????????????????????? Tank ??????, ??? Panzer ?????????????????? ????????? Tank ????????????;


M1A2SEP ?????:??

[java]??view plaincopy???CODE??????????????????????????????????????????
  1. package??shuliang.han.displaytest;????
  2. ????
  3. public??class??M1A2SEP??extends??Tanker??implements??Panzer????{????
  4. ????
  5. ????????@Override????
  6. ????????public??double??getCaliber()??{????
  7. ????????????????return??getGunCaliber();????
  8. ????????}????
  9. ????
  10. ????????@Override????
  11. ????????public??void??fire()??{????
  12. ????????????????gunFire();????
  13. ????????}????
  14. ????
  15. ????????@Override????
  16. ????????public??void??run()??{????
  17. ????????????????move();????
  18. ????????}????
  19. ????
  20. }????



????????????????????:??

--?????????????????????????: ????????????????????????????????????????????????????????????, ???????????????????????????, ????????????????????????, ????????????????????????;

--????????????????????????????: ?????????????????????????????????, ???????????????????????????, ???????????????????????? ???????????????;



2. ????????????


(1) ??????????????????


???????????: ??????????????????????????????????????????, ?????????????????????????????????????????,???????? ???????????????;

??????????????: ??????????????????????????????, ???????????????; ???????????????????????????,????????????????????, ??????????????????????????????????????????, ??????????????????????????????;??

--????????????????: ?????????????????????????????????????????????????????????, ?????????????????????;




???????????????????????:??

--??????????????????????????????????: ??????????????????????????? ????????????????????????, ???????????? ??? ?????? ?????? ?????????????????????, ??????????????????????????????????????????; ??

--???????????????????????????????: ??????????????????????????? ?????????????????????????????????, ???????????? ??????????????????????????? ????????????????????????????????????;


(2) ??????????????????


??????????????: ????????????????????? Panzer ?????????, ??????????????????????????????????getCaliber(),????????????????run(),????????????????fire();??

???????????: ????????? Tank ??????, ??????????????????????????????????getGunCaliber(),????????????????move(),????????????????gunFire();


????????????????????: ??????????????????????????????????????????????????????;

[java]??view plaincopy???CODE??????????????????????????????????????????
  1. package??shuliang.han.adapter;????
  2. ????
  3. public??class??Panzer??{????
  4. ????
  5. ????????public??double??getCaliber(){????
  6. ????????????????return??0;????
  7. ????????}????
  8. ????????????
  9. ????????public??void??fire(){????
  10. ????????????????//TODO????
  11. ????????}????
  12. ????????????
  13. ????????public??void??run(){????
  14. ????????????????//TODO????
  15. ????????}????
  16. }????

?????????????????:??

[java]??view plaincopy???CODE??????????????????????????????????????????
  1. package??shuliang.han.adapter;????
  2. ????
  3. public??class??Tank??{????
  4. ????
  5. ????????private??double??caliber??=??125.0;????
  6. ????????????
  7. ????????public??double??getGunCaliber(){????
  8. ????????????????return??caliber;????
  9. ????????}????
  10. ????????????
  11. ????????public??void??gunFire()??{????
  12. ????????????????System.out.println("Fire??in??the??hole??!!!");????
  13. ????????}????
  14. ????????????
  15. ????????public??void??move()??{????
  16. ????????????????System.out.println("Move??Move??!!!");????
  17. ????????}????
  18. }????


UML?????:??



??????????????:??

[java]??view plaincopy???CODE??????????????????????????????????????????
  1. package??shuliang.han.adapter;????
  2. ????
  3. public??class??M1A2??extends??Panzer??{????
  4. ????????????
  5. ????????private??Tank??tank;????
  6. ????????????
  7. ????????public??M1A2()??{????
  8. ????????????????tank??=??new??Tank();????
  9. ????????}????
  10. ????????????
  11. ????????@Override????
  12. ????????public??double??getCaliber()??{????
  13. ????????????????return??tank.getGunCaliber();????
  14. ????????}????
  15. ????
  16. ????????@Override????
  17. ????????public??void??fire()??{????
  18. ????????????????super.fire();????
  19. ????????????????tank.gunFire();????
  20. ????????}????
  21. ????????????
  22. ????????@Override????
  23. ????????public??void??run()??{????
  24. ????????????????super.run();????
  25. ????????????????tank.move();????
  26. ????????}????
  27. ????????????
  28. }????


(3) ?????????????????????


???????????????????????????????????:??

--??????????????????????: ??????????????????????????????????????????, ?????????????????????????????????, ???????????????????????????;

--????????????????????????????: ??????????????? ??????????????????, ????????????????????????????????? ??? ??????????????? protected, ????????????, ????????????????????????????????????????????????;



3. Jtable ???????????????


(1) Jtable ??? TableModel AbstractTableModel????????


JTable????????????????????: JTable?????????????????????TableModel??????????????????????????????????????????;

--??????????????????????: Java??????Swing ?????????JTable????????????????????????,??JTable????????????????????????????????????;??

--?????????????: ???????????????JTable?????????????????????, ?????????????????????, ??????????????????????????????????????????,????????????????? TableModel ?????????;


TableModel??????????????:??

--???????????????????: Jtable???????????????????????????, ??????????????????????????????????????????, ??????????????????;??

--??TableModel????????: JDK?????????????????????????????? AbstractTableModel ???, AbstractTableModel ????????? TableModel ???, ??????????????????????????????, ??????????????????????????? ??? ?????? AbstractTableModel ???, ?????????????????????????????????, ??????????????????????????????;

--????????????????: ??????????????? ?????? AbstractTableModel ???, ?????????????????????????????????;



(2) ??????


??????????????: ??????JTable ????????????????????????, ??????????????????TankTableModel??????????? AbstractTableModel ???, ????????? Tank ???????????? TankTableModel ???,???????????????????????;


?????????????????????????????:??

--??AbstractTableModel ???????????: ????????????????????????????????????????????????????????? (????????????), ????????????????????????????????? JTable??? ???????????????, ????????????????????????????????????;

--??????????????????????: ?????????????????????????????????????????????, ?????????????????????????????? ?????? ??? ??????, Java??????????????????, ????????????????????????, ??????????????????????????????????????????????????????;


UML?????:??



Tank????????:??

[java]??view plaincopy???CODE??????????????????????????????????????????
  1. package??shuliang.han.jtable;????
  2. ????
  3. public??class??Tank??{????
  4. ????
  5. ????????private??double??caliber;????
  6. ????????private??double??speed;????
  7. ????????private??String??name;????
  8. ????????????
  9. ????????public??Tank(double??caliber,??double??speed,??String??name)??{????
  10. ????????????????this.caliber??=??caliber;????
  11. ????????????????this.speed??=??speed;????
  12. ????????????????this.name??=??name;????
  13. ????????}????
  14. ????
  15. ????????public??double??getCaliber()??{????
  16. ????????????????return??caliber;????
  17. ????????}????
  18. ????
  19. ????????public??double??getSpeed()??{????
  20. ????????????????return??speed;????
  21. ????????}????
  22. ????
  23. ????????public??String??getName()??{????
  24. ????????????????return??name;????
  25. ????????}????
  26. ????????????
  27. ????????????
  28. }????



TankTableModel????????:??

[java]??view plaincopy???CODE??????????????????????????????????????????
  1. package??shuliang.han.jtable;????
  2. ????
  3. import??javax.swing.table.AbstractTableModel;????
  4. ????
  5. public??class??TankTableModel??extends??AbstractTableModel??{????
  6. ????
  7. ????????private??Tank??tanks[];????
  8. ????????private??String??names[];????
  9. ????????????
  10. ????????public??TankTableModel(Tank[]??tanks,??String[]??names)??{????
  11. ????????????????this.tanks??=??tanks;????
  12. ????????????????this.names??=??names;????
  13. ????????}????
  14. ????????????
  15. ????????@Override????
  16. ????????public??int??getRowCount()??{????
  17. ????????????????return??tanks.length;????
  18. ????????}????
  19. ????
  20. ????????@Override????
  21. ????????public??int??getColumnCount()??{????
  22. ????????????????return??names.length;????
  23. ????????}????
  24. ????
  25. ????????@Override????
  26. ????????public??String??getColumnName(int??column)??{????
  27. ????????????????return??names[column];????
  28. ????????}????
  29. ????????????
  30. ????????@Override????
  31. ????????public??Object??getValueAt(int??rowIndex,??int??columnIndex)??{????
  32. ????????????????switch(columnIndex){????
  33. ????????????????????????case??0??:????
  34. ????????????????????????????????return??tanks[rowIndex].getName();????
  35. ????????????????????????case??1??:????
  36. ????????????????????????????????return??new??Double(tanks[rowIndex].getCaliber());????
  37. ????????????????????????case??2??:????
  38. ????????????????????????????????return??new??Double(tanks[rowIndex].getSpeed());????
  39. ????????????????????????default??:????
  40. ????????????????????????????????return??null;????
  41. ????????????????}????
  42. ????????}????
  43. ????
  44. }????

ShowTankData????????:??

[java]??view plaincopy???CODE??????????????????????????????????????????
  1. package??shuliang.han.jtable;????
  2. ????
  3. import??java.awt.Component;????
  4. import??java.awt.Dimension;????
  5. import??java.awt.Font;????
  6. ????
  7. import??javax.swing.JFrame;????
  8. import??javax.swing.JScrollPane;????
  9. import??javax.swing.JTable;????
  10. import??javax.swing.UIManager;????
  11. ????
  12. public??class??ShowTanksData??{????
  13. ????
  14. ????????public??static??void??main(String[]??args)??{????
  15. ????????????????setFrame();????
  16. ????????????????JTable??jTable??=??new??JTable(getTankTableModel());????
  17. ????????????????jTable.setRowHeight(36);????
  18. ????????????????JScrollPane??pane??=??new??JScrollPane(jTable);????
  19. ????????????????pane.setPreferredSize(new??Dimension(300,??100));????
  20. ????????????????display(pane,??"????????????");????
  21. ????????}????
  22. ????????????
  23. ????????private??static??void??setFrame()??{????
  24. ????????????????Font??font??=??new??Font("Dialog",??Font.PLAIN,??18);????
  25. ????????????????UIManager.put("Table.font",??font);????
  26. ????????????????UIManager.put("TableHeader.font",??font);????
  27. ????????}????
  28. ????????????
  29. ????????private??static??TankTableModel??getTankTableModel()??{????
  30. ????????????????Tank??tank1??=??new??Tank(120.0,??50.0,??"99???");????
  31. ????????????????Tank??tank2??=??new??Tank(150.0,??2.0,??"KV");????
  32. ????????????????return??new??TankTableModel(new??Tank[]{tank1,??tank2},??new??String[]{"??????",??"??????????????",??"??????"});????
  33. ????????}????
  34. ????????????
  35. ????????private??static??void??display(Component??component,??String??tittle)??{????
  36. ????????????????JFrame??frame??=??new??JFrame(tittle);????
  37. ????????????????frame.getContentPane().add(component);????
  38. ????????????????frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);????
  39. ????????????????frame.pack();????
  40. ????????????????frame.setVisible(true);????
  41. ????????}????
  42. ????
  43. }????


???????????:??




4. ???????????????



MouseAdapter ??? MouseListener ????????????????????????;



?????????MouseAdapter?????????, ????????????????????????????????:?????????????????????????????, ???swing??????????????????????????????????????????????????????????????????, ??????GUI?????????????????????????????????, ?????????Swing?????????, ?????????????????????????????????????????????????????????;



5. ?????????????????????


?????????????????: ??????????????????????????????????????????, ?????????????????????, ???????????????????????????????????????????????????;

--????????????????: ??????????????????????????????????????????, ????????????????????????????????????????????????, ????????????????????????????????????;

--????????????????: ???????????????????????????, ???????????????????????????, ??????????????????????????, ??????????????????????????????????????????????????????????????????;


JTable?????????????????: ????????????TableModel??????, JTable??????????????????????????????????????????????????????, ??????????????????????????????, ??????????????????????????????;


JTable??????????????????????????:??

--??????????????????????: JTable????????????????????? AbstractTableModel???, ??????????????????????????????, ???????????????????????????;

--????????????????????????????: JTable??????????????????, ????????????????????????????????????;


???????????????????????: ??????????????????????????????, ??????????????????????????????, JTable ????????????????????????????????????;

最后更新:2017-04-03 12:55:22

  上一篇:go Android 开发 之 JNI入门 - NDK从入门到精通
  下一篇:go C# Table.Rows[index].Delete()