Swing的MVC結構

--------------siwuxie095 java

   

   

   

   

   

   

   

工程名:TestMVC mvc

包名:com.siwuxie095.mvc app

類名:Test.java spa

   

   

工程結構目錄以下: blog

   

   

   

   

代碼: 事件

   

package com.siwuxie095.mvc; get

   

import java.awt.BorderLayout; it

import java.awt.EventQueue; io

   

import javax.swing.JFrame; event

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import javax.swing.JList;

import javax.swing.AbstractListModel;

import javax.swing.event.ListSelectionListener;

import javax.swing.event.ListSelectionEvent;

   

/**

* 先在中間添加一個 JList 表單

* 給這個 JList model 選項添加 ABCDEF

* 最後給這個 JList 添加監聽事件

*

* @author siwux

*

*/

   

/*

* MVC結構:

* Model(模型)+View(視圖)+Control(控制)

*

* M:存儲一些相關的數據

* V:表達視覺元素

* C:負責它們之間的相互關係,執行程序邏輯和程序的走向

*

*/

   

public class Test extends JFrame {

   

private JPanel contentPane;

 

// JList 的聲明轉移到類中,以便於在監聽器中進行訪問

JList list;

   

 

/**

* Launch the application.

*/

public static void main(String[] args) {

 

 

 

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

Test frame = new Test();

frame.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

   

/**

* Create the frame.

*/

public Test() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(100, 100, 450, 300);

contentPane = new JPanel();

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

contentPane.setLayout(new BorderLayout(0, 0));

setContentPane(contentPane);

 

//new 出來的是 JList 視圖(View)

list = new JList();

list.addListSelectionListener(new ListSelectionListener() {

 

//監聽事件---監聽器(Control)

public void valueChanged(ListSelectionEvent e) {

 

//e.getValueIsAdjusting()==true 表示是在點擊鼠標的時候打印,

//若是改爲false就表示是在鬆開的時候打印

//若是沒有這個 if 判斷,會打印兩次

//點擊鼠標和鬆開鼠標都會形成狀態的改變,致使方法的二次調用

//先點住鼠標不放,然後慢慢鬆開就會發現該打印效果

if (e.getValueIsAdjusting()==true) {

//在控制檯輸出選擇值

//每當點擊列表時,只要選項值發生變化,就會自動觸發監聽器

System.out.println(list.getSelectedValue());

}

 

}

});

 

 

 

//setModel() 則是模型,是數據模型(Model)

list.setModel(new AbstractListModel() {

String[] values = new String[] {"A", "B", "C", "D", "E", "F"};

public int getSize() {

return values.length;

}

public Object getElementAt(int index) {

return values[index];

}

});

contentPane.add(list, BorderLayout.CENTER);

}

   

}

   

   

運行一覽:

   

   

   

   

若是點擊 A B C,控制檯會相應輸出:

   

   

   

   

   

   

   

程序的實現:

   

View:在 Design 界面,將 JList 拖到 contentPane 的中間

   

   

   

   

Model:點擊 JList 的 model 屬性,爲其添加 A B C D E F

   

   

   

   

   

Control:給 JList 添加事件監聽,右鍵->Add event handler->listSelection->valueChanged

   

   

   

   

   

Design 界面操做完成後,對應的 Source 界面會自動生成相應的代碼,

對這些代碼進行增刪改便可

   

   

   

   

   

   

【made by siwuxie095】

相關文章
相關標籤/搜索