java控制器有哪些_Java Swing中的控制器是什么?

小编典典

Controller构成了组件接口的另一半,主要是交互的一半。控制器负责鼠标和键盘事件。

在Swing JButton等组件中是控制器。所有侦听器类都将事件重定向到具有您的业务逻辑的模型

例如:

主程序

import javax.swing.*;

public class CalcMVC {

//... Create model, view, and controller. They are

// created once here and passed to the parts that

// need them so there is only one copy of each.

public static void main(String[] args) {

CalcModel model = new CalcModel();

CalcView view = new CalcView(model);

CalcController controller = new CalcController(model, view);

view.setVisible(true);

}

}

视图

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class CalcView extends JFrame {

//... Constants

private static final String INITIAL_VALUE = "1";

//... Components

private JTextField m_userInputTf = new JTextField(5);

private JTextField m_totalTf = new JTextField(20);

private JButton m_multiplyBtn = new JButton("Multiply");

private JButton m_clearBtn = new JButton("Clear");

private CalcModel m_model;

//======================================================= constructor

/** Constructor */

CalcView(CalcModel model) {

//... Set up the logic

m_model = model;

m_model.setValue(INITIAL_VALUE);

//... Initialize components

m_totalTf.setText(m_model.getValue());

m_totalTf.setEditable(false);

//... Layout the components.

JPanel content = new JPanel();

content.setLayout(new FlowLayout());

content.add(new JLabel("Input"));

content.add(m_userInputTf);

content.add(m_multiplyBtn);

content.add(new JLabel("Total"));

content.add(m_totalTf);

content.add(m_clearBtn);

//... finalize layout

this.setContentPane(content);

this.pack();

this.setTitle("Simple Calc - MVC");

// The window closing event should probably be passed to the

// Controller in a real program, but this is a short example.

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

void reset() {

m_totalTf.setText(INITIAL_VALUE);

}

String getUserInput() {

return m_userInputTf.getText();

}

void setTotal(String newTotal) {

m_totalTf.setText(newTotal);

}

void showError(String errMessage) {

JOptionPane.showMessageDialog(this, errMessage);

}

void addMultiplyListener(ActionListener mal) {

m_multiplyBtn.addActionListener(mal);

}

void addClearListener(ActionListener cal) {

m_clearBtn.addActionListener(cal);

}

}

控制者

import java.awt.event.*;

public class CalcController {

//... The Controller needs to interact with both the Model and View.

private CalcModel m_model;

private CalcView m_view;

//========================================================== constructor

/** Constructor */

CalcController(CalcModel model, CalcView view) {

m_model = model;

m_view = view;

//... Add listeners to the view.

view.addMultiplyListener(new MultiplyListener());

view.addClearListener(new ClearListener());

}

// inner class MultiplyListener

/** When a mulitplication is requested.

* 1. Get the user input number from the View.

* 2. Call the model to mulitply by this number.

* 3. Get the result from the Model.

* 4. Tell the View to display the result.

* If there was an error, tell the View to display it.

*/

class MultiplyListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

String userInput = "";

try {

userInput = m_view.getUserInput();

m_model.multiplyBy(userInput);

m_view.setTotal(m_model.getValue());

} catch (NumberFormatException nfex) {

m_view.showError("Bad input: '" + userInput + "'");

}

}

}//end inner class MultiplyListener

inner class ClearListener

/** 1. Reset model.

* 2. Reset View.

*/

class ClearListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

m_model.reset();

m_view.reset();

}

}// end inner class ClearListener

}

模型

import java.math.BigInteger;

public class CalcModel {

//... Constants

private static final String INITIAL_VALUE = "0";

//... Member variable defining state of calculator.

private BigInteger m_total; // The total current value state.

//============================================================== constructor

/** Constructor */

CalcModel() {

reset();

}

//==================================================================== reset

/** Reset to initial value. */

public void reset() {

m_total = new BigInteger(INITIAL_VALUE);

}

//=============================================================== multiplyBy

/** Multiply current total by a number.

*@param operand Number (as string) to multiply total by.

*/

public void multiplyBy(String operand) {

m_total = m_total.multiply(new BigInteger(operand));

}

//================================================================= setValue

/** Set the total value.

*@param value New value that should be used for the calculator total.

*/

public void setValue(String value) {

m_total = new BigInteger(value);

}

//================================================================= getValue

/** Return current calculator total. */

public String getValue() {

return m_total.toString();

}

}

2020-11-01

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值