java设计模式进阶_model-view-presenter

这里写图片描述

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : FileSelectorView.java
//  @ Date : 2016/9/5
//  @ Author : 
//
//



/**
 * This interface represents the View component in the Model-View-Presenter
 * pattern.It can be implemented by either the GUI components,or by the Stub.
 *
 */
public interface FileSelectorView {
    public void open();
    public void close();
    public boolean isOpened();
    public void setPresenter(FileSelectorPresenter presenter);
    public FileSelectorPresenter getPresenter();
    public void setFileName(String name);
    public String getFileName();
    public void showMessage(String message);
    public void displayData(String str);
}


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : FileSelectorJFrame.java
//  @ Date : 2016/9/5
//  @ Author : 
//
//




@SuppressWarnings("serial")
public class FileSelectorJFrame extends JFrame implements FileSelectorView,ActionListener {
    public JButton OK;
    public JButton cancel;
    public JLabel info;
    public JLabel contents;
    public JTextField input;
    public JTextArea area;
    public JPanel panel;
    private FileSelectorPresenter presenter;
    public String fileName;

    public FileSelectorJFrame() {
        super("File Loader");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);;
//      this.setLayout(null);
        this.setLayout(new BorderLayout());
        this.setBounds(100,100,500,200);

        //Add the panel.
        this.panel = new JPanel();
        this.add(panel,BorderLayout.CENTER);
        this.panel.setLayout(new GridLayout(2, 2));
//      panel.setLayout(null);
        panel.setBounds(0,0,500,200);
        panel.setBackground(Color.LIGHT_GRAY);

        //Add the info label.
        this.info = new JLabel("File Name:");
        this.panel.add(info);
        info.setBounds(30,10,100,30);

        //Add the text field.
        this.input = new JTextField(100);
        this.panel.add(input);
        this.input.setBounds(150,15,200,20);

        this.contents = new JLabel("File contents :");
        this.panel.add(contents);
        this.contents.setBounds(30, 100, 120, 30);

        //Add the text area
        this.area = new JTextArea(100,100);
        JScrollPane pane = new JScrollPane(area);
        pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        this.panel.add(pane);
        this.area.setEditable(false);
        pane.setBounds(150,100,250,80);

        //Add the OK button.
        JPanel south = new JPanel();
        south.setLayout(new GridLayout(1,2));

        this.OK = new JButton("OK");
//      this.panel.add(OK);
        this.OK.setBounds(250,50,100,25);
        this.OK.addActionListener(this);
        south.add(OK);

        //Add the cancel button.
        this.cancel = new JButton("Cancel");
//      this.panel.add(this.cancel);
        this.cancel.setBounds(380,50,100,25);
        this.cancel.addActionListener(this);
        south.add(cancel);

        this.add(south,BorderLayout.SOUTH);
//      this.pack();
        this.setSize(740, 390);

        this.presenter = null;
        this.fileName = null;
    }

    public void actionPerformed(ActionEvent event) {
        if(event.getSource() == this.OK){
            this.fileName = this.input.getText();
            presenter.fileNameChanged();
            presenter.confirmed();
        } else if(event.getSource() == this.cancel) {
            presenter.cancelled();
        }
    }

    public void open() {
        this.setVisible(true);
    }

    public void close() {
        this.dispose();
    }

    public boolean isOpened() {
        return this.isVisible();
    }

    public void setPresenter(FileSelectorPresenter presenter) {
        this.presenter = presenter;
    }

    public FileSelectorPresenter getPresenter() {
        return presenter;
    }

    public void setFileName(String name) {
        this.fileName = name;
    }

    public String getFileName() {
        return this.fileName;
    }

    public void showMessage(String msg) {
        JOptionPane.showMessageDialog(null,msg);
    }

    public void displayData(String data) {
        this.area.setText(data);
    }
}

package com.think.in.java.design.pattern.lesson36;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : FileSelectorPresenter.java
//  @ Date : 2016/9/5
//  @ Author : 
//
//




public class FileSelectorPresenter {

    private FileSelectorView view;
    private FileLoader loader;

    public FileSelectorPresenter(FileSelectorView view) {
        this.view = view;
    }

    public void setLoader(FileLoader loader) {
        this.loader = loader;
    }

    public void start() {
        view.setPresenter(this);
        view.open();
    }

    public void fileNameChanged() {
        loader.setFileName(view.getFileName());
    }

    public void confirmed() {
        if(loader.getFileName() == null ||
                loader.getFileName().equals("")){
            view.showMessage("Please give the name of the file first!");
            return;
        }

        if(loader.fileExists()){
            String data = loader.loadData();
            view.displayData(data);
        }
        else {
            view.showMessage("The file specified does not exist.");
        }
    }

    public void cancelled() {
        view.close();
    }
}


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : FileLoader.java
//  @ Date : 2016/9/5
//  @ Author : 
//
//




public class FileLoader {
    public boolean loaded = false;
    public String fileName;

    public FileLoader() {

    }

    public String loadData() {
        try {
            BufferedReader br = new BufferedReader(new FileReader(
                    new File(this.fileName)
                    ));
            StringBuilder sb = new StringBuilder();
            String line;

            while((line = br.readLine()) != null)
            {
                sb.append(line).append("\n");
            }
            this.loaded = true;
            br.close();
            return sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    public void setFileName(String name) {
        this.fileName = name;
    }

    public String getFileName() {
        return this.fileName;
    }

    public boolean fileExists() {
        return new File(this.fileName).exists();
    }

    public boolean isLoaded() {
        return this.loaded;
    }
}


public class App {

    public static void main(String[] args) {

        FileLoader loader = new FileLoader();
        FileSelectorJFrame jFrame = new FileSelectorJFrame();
        FileSelectorPresenter presenter = new FileSelectorPresenter(jFrame);
        presenter.setLoader(loader);
        presenter.start();
    }

}



这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值