Java進(jìn)階學(xué)習(xí)筆記(十一)

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)部類(lèi):在一個(gè)類(lèi)的內(nèi)部定義一個(gè)另外的類(lèi),拿到外面就成為了外部類(lèi)

private class StepListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            step();
            frame.repaint();
        }
        }
  • 定義在別的類(lèi)內(nèi)部、函數(shù)內(nèi)部的類(lèi);
  • 內(nèi)部類(lèi)能直接訪問(wèn)外部的全部資源;
    • 包括任何私有的成員;
    • 外部是函數(shù)時(shí),只能訪問(wèn)那個(gè)函數(shù)里final的變量(本地變量);

1.4 匿名類(lèi):匿名類(lèi)一定是一個(gè)內(nèi)部類(lèi),叫什么名字不用關(guān)心了

btnStep.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("按下啦!");
                    step();
                    frame.repaint();
  • 在new對(duì)象的時(shí)候給出的類(lèi)的定義形成了匿名類(lèi);
  • 匿名類(lèi)可以繼承某類(lèi),也可以實(shí)現(xiàn)某接口;
  • Swing的消息機(jī)制廣泛使用匿名類(lèi);

1.5 注入反轉(zhuǎn):

  • 由按鈕公布一個(gè)收聽(tīng)者接口和一對(duì)注冊(cè)/注銷(xiāo)函數(shù);
  • 你的代碼實(shí)現(xiàn)那個(gè)接口,將收聽(tīng)者對(duì)象注冊(cè)在按鈕上;
  • 一旦按鈕被按下,就會(huì)反過(guò)來(lái)調(diào)用你的收聽(tīng)者對(duì)象的某個(gè)函數(shù);

2、MVC設(shè)計(jì)模式:

2.1 JTABLE(數(shù)據(jù)和表現(xiàn)是分離的):

  • 用JTable類(lèi)可以以表格的形式顯示和編輯數(shù)據(jù)。JTable類(lèi)的對(duì)象并不存儲(chǔ)數(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);//實(shí)現(xiàn)滾卷
        frame.add(pane);//容器中增加一個(gè)表格
        frame.pack();//frame是個(gè)容器
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

}
image.png

2.2 MVC設(shè)計(jì)模式:

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ù)畫(huà)出表現(xiàn);
      • 控制:從用戶得到輸入,根據(jù)輸入調(diào)整數(shù)據(jù);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,674評(píng)論 1 32
  • 面向?qū)ο笾饕槍?duì)面向過(guò)程。 面向過(guò)程的基本單元是函數(shù)。 什么是對(duì)象:EVERYTHING IS OBJECT(萬(wàn)物...
    sinpi閱讀 1,220評(píng)論 0 4
  • 整理來(lái)自互聯(lián)網(wǎng) 1,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境,java的開(kāi)發(fā)工具...
    Ncompass閱讀 1,618評(píng)論 0 6
  • 一:java概述: 1,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境,java的開(kāi)發(fā)...
    慕容小偉閱讀 1,948評(píng)論 0 10
  • 第3章 基本概念 3.1 語(yǔ)法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類(lèi)型 5種簡(jiǎn)單數(shù)據(jù)類(lèi)型:Unde...
    RickCole閱讀 5,527評(píng)論 0 21

友情鏈接更多精彩內(nèi)容