1倍权、控制反轉(zhuǎn):
1.1 布局管理器:
JBbutton btnStep=new JButton("單步");
frame.add(btnStep,BorderLayout.NORTH);
- frame成為容器中的部件,部件管理容器---布局管理器雕什;
1.2 控制反轉(zhuǎn):(消息機(jī)制)
btnStep.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("按下啦掏湾!");
step();
frame.repaint();
}
});
1.3 內(nèi)部類:在一個類的內(nèi)部定義一個另外的類励饵,拿到外面就成為了外部類
private class StepListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
step();
frame.repaint();
}
}
- 定義在別的類內(nèi)部剧包、函數(shù)內(nèi)部的類恐锦;
- 內(nèi)部類能直接訪問外部的全部資源;
- 包括任何私有的成員疆液;
- 外部是函數(shù)時一铅,只能訪問那個函數(shù)里final的變量(本地變量);
1.4 匿名類:匿名類一定是一個內(nèi)部類枚粘,叫什么名字不用關(guān)心了
btnStep.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("按下啦馅闽!");
step();
frame.repaint();
- 在new對象的時候給出的類的定義形成了匿名類;
- 匿名類可以繼承某類馍迄,也可以實現(xiàn)某接口福也;
- Swing的消息機(jī)制廣泛使用匿名類;
1.5 注入反轉(zhuǎn):
- 由按鈕公布一個收聽者接口和一對注冊/注銷函數(shù)攀圈;
- 你的代碼實現(xiàn)那個接口暴凑,將收聽者對象注冊在按鈕上;
- 一旦按鈕被按下赘来,就會反過來調(diào)用你的收聽者對象的某個函數(shù)现喳;
2、MVC設(shè)計模式:
2.1 JTABLE(數(shù)據(jù)和表現(xiàn)是分離的):
- 用JTable類可以以表格的形式顯示和編輯數(shù)據(jù)犬辰。JTable類的對象并不存儲數(shù)據(jù)嗦篱,它只是數(shù)據(jù)的表現(xiàn),data.
package kcb;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
public class KCBData implements TableModel {
private String[]title = {
"周一","周二","周三","周四","周五","周六","周日"
};
private String[][] data = new String[8][7];
public KCBData() {
for(int i=0;i<data.length;i++) {
for(int j=01;j<data[i].length;j++) {
data[i][j] = " ";
}
}
}
@Override
public int getRowCount() {
return 8;
}
@Override
public int getColumnCount() {
return 7;
}
@Override
public String getColumnName(int arg0) {
return title[arg0];
}
@Override
public Class<?> getColumnClass(int arg0) {
return String.class;
}
@Override
public boolean isCellEditable(int arg0, int arg1) {
return true;
}
@Override
public Object getValueAt(int arg0, int arg1) {
return data[arg0][arg1];
}
@Override
public void setValueAt(Object arg0, int arg1, int arg2) {
data[arg1][arg2] = (String)arg0;
}
@Override
public void addTableModelListener(TableModelListener l) {
// TODO Auto-generated method stub
}
@Override
public void removeTableModelListener(TableModelListener arg0) {
// TODO Auto-generated method stub
}
}
package kcb;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class KCB {
public static void main(String[] args) {
JFrame frame = new JFrame();
JTable table = new JTable(new KCBData());
JScrollPane pane = new JScrollPane(table);//實現(xiàn)滾卷
frame.add(pane);//容器中增加一個表格
frame.pack();//frame是個容器
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
image.png
2.2 MVC設(shè)計模式:
image.png
- JTable只管表現(xiàn)不管數(shù)據(jù)幌缝;
- MVC:
- 數(shù)據(jù)灸促、表現(xiàn)和控制三者分離,各負(fù)其責(zé)涵卵;
- M=Model(模型)浴栽;
- V=View(表現(xiàn));
- C=Control(控制);
- 模型:保存和維護(hù)數(shù)據(jù)轿偎,提供接口讓外部修改數(shù)據(jù)典鸡,通知表現(xiàn)需要刷新;
- 表現(xiàn):從模型獲得數(shù)據(jù)坏晦,根據(jù)數(shù)據(jù)畫出表現(xiàn)萝玷;
- 控制:從用戶得到輸入,根據(jù)輸入調(diào)整數(shù)據(jù)昆婿;
- 數(shù)據(jù)灸促、表現(xiàn)和控制三者分離,各負(fù)其責(zé)涵卵;