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 ???;
???????????:??
- package??shuliang.han.displaytest;????
- ????
- public??interface??Panzer??{????
- ????
- ????????public??double??getCaliber();????
- ????????public??void??fire();????
- ????????public??void??run();????
- ????????????
- }????
???????????:??
- package??shuliang.han.displaytest;????
- ????
- ????
- public??class??Tanker??{????
- ????
- ????????private??double??caliber??=??125.0;????
- ????????????
- ????????public??double??getGunCaliber()??{????
- ????????????????return??caliber;????
- ????????}????
- ????????????
- ????????public??void??gunFire()??{????
- ????????????????System.out.println("Fire??in??the??hole??!!!");????
- ????????}????
- ????????????
- ????????public??void??move()??{????
- ????????????????System.out.println("Move??move??!!");????
- ????????}????
- ????????????
- }????
????????:??
--???????????????????: Tanker??????????????????????????? Panzer ????????????????????????, ????????????????????????????????????;
--????????????????: ?????????????????? M1A2SEP ???, ??????????????????????????? Tank ??????, ??? Panzer ?????????????????? ????????? Tank ????????????;
M1A2SEP ?????:??
- package??shuliang.han.displaytest;????
- ????
- public??class??M1A2SEP??extends??Tanker??implements??Panzer????{????
- ????
- ????????@Override????
- ????????public??double??getCaliber()??{????
- ????????????????return??getGunCaliber();????
- ????????}????
- ????
- ????????@Override????
- ????????public??void??fire()??{????
- ????????????????gunFire();????
- ????????}????
- ????
- ????????@Override????
- ????????public??void??run()??{????
- ????????????????move();????
- ????????}????
- ????
- }????
????????????????????:??
--?????????????????????????: ????????????????????????????????????????????????????????????, ???????????????????????????, ????????????????????????, ????????????????????????;
--????????????????????????????: ?????????????????????????????????, ???????????????????????????, ???????????????????????? ???????????????;
2. ????????????
(1) ??????????????????
???????????: ??????????????????????????????????????????, ?????????????????????????????????????????,???????? ???????????????;
??????????????: ??????????????????????????????, ???????????????; ???????????????????????????,????????????????????, ??????????????????????????????????????????, ??????????????????????????????;??
--????????????????: ?????????????????????????????????????????????????????????, ?????????????????????;
???????????????????????:??
--??????????????????????????????????: ??????????????????????????? ????????????????????????, ???????????? ??? ?????? ?????? ?????????????????????, ??????????????????????????????????????????; ??
--???????????????????????????????: ??????????????????????????? ?????????????????????????????????, ???????????? ??????????????????????????? ????????????????????????????????????;
(2) ??????????????????
??????????????: ????????????????????? Panzer ?????????, ??????????????????????????????????getCaliber(),????????????????run(),????????????????fire();??
???????????: ????????? Tank ??????, ??????????????????????????????????getGunCaliber(),????????????????move(),????????????????gunFire();
????????????????????: ??????????????????????????????????????????????????????;
- package??shuliang.han.adapter;????
- ????
- public??class??Panzer??{????
- ????
- ????????public??double??getCaliber(){????
- ????????????????return??0;????
- ????????}????
- ????????????
- ????????public??void??fire(){????
- ????????????????//TODO????
- ????????}????
- ????????????
- ????????public??void??run(){????
- ????????????????//TODO????
- ????????}????
- }????
?????????????????:??
- package??shuliang.han.adapter;????
- ????
- public??class??Tank??{????
- ????
- ????????private??double??caliber??=??125.0;????
- ????????????
- ????????public??double??getGunCaliber(){????
- ????????????????return??caliber;????
- ????????}????
- ????????????
- ????????public??void??gunFire()??{????
- ????????????????System.out.println("Fire??in??the??hole??!!!");????
- ????????}????
- ????????????
- ????????public??void??move()??{????
- ????????????????System.out.println("Move??Move??!!!");????
- ????????}????
- }????
UML?????:??
??????????????:??
- package??shuliang.han.adapter;????
- ????
- public??class??M1A2??extends??Panzer??{????
- ????????????
- ????????private??Tank??tank;????
- ????????????
- ????????public??M1A2()??{????
- ????????????????tank??=??new??Tank();????
- ????????}????
- ????????????
- ????????@Override????
- ????????public??double??getCaliber()??{????
- ????????????????return??tank.getGunCaliber();????
- ????????}????
- ????
- ????????@Override????
- ????????public??void??fire()??{????
- ????????????????super.fire();????
- ????????????????tank.gunFire();????
- ????????}????
- ????????????
- ????????@Override????
- ????????public??void??run()??{????
- ????????????????super.run();????
- ????????????????tank.move();????
- ????????}????
- ????????????
- }????
(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????????:??
- package??shuliang.han.jtable;????
- ????
- public??class??Tank??{????
- ????
- ????????private??double??caliber;????
- ????????private??double??speed;????
- ????????private??String??name;????
- ????????????
- ????????public??Tank(double??caliber,??double??speed,??String??name)??{????
- ????????????????this.caliber??=??caliber;????
- ????????????????this.speed??=??speed;????
- ????????????????this.name??=??name;????
- ????????}????
- ????
- ????????public??double??getCaliber()??{????
- ????????????????return??caliber;????
- ????????}????
- ????
- ????????public??double??getSpeed()??{????
- ????????????????return??speed;????
- ????????}????
- ????
- ????????public??String??getName()??{????
- ????????????????return??name;????
- ????????}????
- ????????????
- ????????????
- }????
TankTableModel????????:??
- package??shuliang.han.jtable;????
- ????
- import??javax.swing.table.AbstractTableModel;????
- ????
- public??class??TankTableModel??extends??AbstractTableModel??{????
- ????
- ????????private??Tank??tanks[];????
- ????????private??String??names[];????
- ????????????
- ????????public??TankTableModel(Tank[]??tanks,??String[]??names)??{????
- ????????????????this.tanks??=??tanks;????
- ????????????????this.names??=??names;????
- ????????}????
- ????????????
- ????????@Override????
- ????????public??int??getRowCount()??{????
- ????????????????return??tanks.length;????
- ????????}????
- ????
- ????????@Override????
- ????????public??int??getColumnCount()??{????
- ????????????????return??names.length;????
- ????????}????
- ????
- ????????@Override????
- ????????public??String??getColumnName(int??column)??{????
- ????????????????return??names[column];????
- ????????}????
- ????????????
- ????????@Override????
- ????????public??Object??getValueAt(int??rowIndex,??int??columnIndex)??{????
- ????????????????switch(columnIndex){????
- ????????????????????????case??0??:????
- ????????????????????????????????return??tanks[rowIndex].getName();????
- ????????????????????????case??1??:????
- ????????????????????????????????return??new??Double(tanks[rowIndex].getCaliber());????
- ????????????????????????case??2??:????
- ????????????????????????????????return??new??Double(tanks[rowIndex].getSpeed());????
- ????????????????????????default??:????
- ????????????????????????????????return??null;????
- ????????????????}????
- ????????}????
- ????
- }????
ShowTankData????????:??
- package??shuliang.han.jtable;????
- ????
- import??java.awt.Component;????
- import??java.awt.Dimension;????
- import??java.awt.Font;????
- ????
- import??javax.swing.JFrame;????
- import??javax.swing.JScrollPane;????
- import??javax.swing.JTable;????
- import??javax.swing.UIManager;????
- ????
- public??class??ShowTanksData??{????
- ????
- ????????public??static??void??main(String[]??args)??{????
- ????????????????setFrame();????
- ????????????????JTable??jTable??=??new??JTable(getTankTableModel());????
- ????????????????jTable.setRowHeight(36);????
- ????????????????JScrollPane??pane??=??new??JScrollPane(jTable);????
- ????????????????pane.setPreferredSize(new??Dimension(300,??100));????
- ????????????????display(pane,??"????????????");????
- ????????}????
- ????????????
- ????????private??static??void??setFrame()??{????
- ????????????????Font??font??=??new??Font("Dialog",??Font.PLAIN,??18);????
- ????????????????UIManager.put("Table.font",??font);????
- ????????????????UIManager.put("TableHeader.font",??font);????
- ????????}????
- ????????????
- ????????private??static??TankTableModel??getTankTableModel()??{????
- ????????????????Tank??tank1??=??new??Tank(120.0,??50.0,??"99???");????
- ????????????????Tank??tank2??=??new??Tank(150.0,??2.0,??"KV");????
- ????????????????return??new??TankTableModel(new??Tank[]{tank1,??tank2},??new??String[]{"??????",??"??????????????",??"??????"});????
- ????????}????
- ????????????
- ????????private??static??void??display(Component??component,??String??tittle)??{????
- ????????????????JFrame??frame??=??new??JFrame(tittle);????
- ????????????????frame.getContentPane().add(component);????
- ????????????????frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);????
- ????????????????frame.pack();????
- ????????????????frame.setVisible(true);????
- ????????}????
- ????
- }????
???????????:??
4. ???????????????
MouseAdapter ??? MouseListener ????????????????????????;
?????????MouseAdapter?????????, ????????????????????????????????:?????????????????????????????, ???swing??????????????????????????????????????????????????????????????????, ??????GUI?????????????????????????????????, ?????????Swing?????????, ?????????????????????????????????????????????????????????;
5. ?????????????????????
?????????????????: ??????????????????????????????????????????, ?????????????????????, ???????????????????????????????????????????????????;
--????????????????: ??????????????????????????????????????????, ????????????????????????????????????????????????, ????????????????????????????????????;
--????????????????: ???????????????????????????, ???????????????????????????, ??????????????????????????, ??????????????????????????????????????????????????????????????????;
JTable?????????????????: ????????????TableModel??????, JTable??????????????????????????????????????????????????????, ??????????????????????????????, ??????????????????????????????;
JTable??????????????????????????:??
--??????????????????????: JTable????????????????????? AbstractTableModel???, ??????????????????????????????, ???????????????????????????;
--????????????????????????????: JTable??????????????????, ????????????????????????????????????;
???????????????????????: ??????????????????????????????, ??????????????????????????????, JTable ????????????????????????????????????;
最後更新:2017-04-03 12:55:22