--------------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 選項添加 A、B、C、D、E、F * 最後給這個 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】