Package com.rfsee.view

Source Code of com.rfsee.view.RFSee

package com.rfsee.view;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import com.rfsee.models.RFCCatalog;
import java.util.Set;
import com.rfsee.services.RFCService;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.border.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;

public class RFSee extends JFrame implements ActionListener,
    TreeSelectionListener {
  /**
   * @author ff
   */
  private static final long serialVersionUID = 1L;

  RFCService rfcService;

  JTree jtCatalog;
  JFileChooser jfc;
  JToolBar jtbNavigator;
  JLabel jlPageNav;
  JTextArea jtaContent;
  JLabel jlLineNumber;
  DefaultMutableTreeNode catalogRoot;

  public RFSee() {
    super();
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    JMenu jmFile = new JMenu("File");
    JMenuItem jmiOpen = new JMenuItem("Open");
    jmiOpen.setActionCommand("Open");
    jmiOpen.addActionListener(this);
    JMenuItem jmiClose = new JMenuItem("Close");
    jmiClose.setActionCommand("Close");
    jmiClose.addActionListener(this);
    JMenuItem jmiExit = new JMenuItem("Exit");
    jmiExit.setActionCommand("Exit");
    jmiExit.addActionListener(this);
    jmFile.add(jmiOpen);
    jmFile.add(jmiClose);
    jmFile.add(jmiExit);
    JMenuBar jmb = new JMenuBar();
    jmb.add(jmFile);
    this.setJMenuBar(jmb);
    this.setLayout(new BorderLayout());
    jtbNavigator = new JToolBar();
    this.add(jtbNavigator, BorderLayout.NORTH);
    catalogRoot = new DefaultMutableTreeNode();
    jtCatalog = new JTree(catalogRoot);
    jtCatalog.addTreeSelectionListener(this);
    JScrollPane jspCatalog = new JScrollPane(jtCatalog);
    jspCatalog.setPreferredSize(new Dimension(200, 500));
    this.add(jspCatalog, BorderLayout.WEST);
    Font font=new Font(Font.MONOSPACED, Font.PLAIN, 12);
    jtaContent = new JTextArea();
    jtaContent.setFont(font);
    jtaContent.setBorder(new LineBorder(Color.BLACK));
    jtaContent.setText("welcome to use rfsee");
    jlLineNumber=new JLabel();
    jlLineNumber.setVerticalAlignment(JLabel.TOP);
    jlLineNumber.setFont(font);
    JPanel jpContent=new JPanel(new BorderLayout());
    jpContent.setBorder(jtaContent.getBorder());
    jtaContent.setBorder(null);
    jpContent.add(jlLineNumber,BorderLayout.WEST);
    jpContent.add(jtaContent,BorderLayout.CENTER);
    JScrollPane jspContent = new JScrollPane(jpContent);
    jspContent.setPreferredSize(new Dimension(300, 500));
    this.add(jspContent, BorderLayout.CENTER);
    JToolBar jtbStatus = new JToolBar();
    JLabel jlStatus = new JLabel("Status");
    JButton jbNext=new JButton("Next");
    jbNext.addActionListener(this);
    jbNext.setActionCommand("NextPage");
    jlPageNav=new JLabel("0/0");
    JButton jbPrev=new JButton("Prev");
    jbPrev.addActionListener(this);
    jbPrev.setActionCommand("PrevPage");
    jtbStatus.add(jlStatus);
    jtbStatus.add(jbPrev);
    jtbStatus.add(jlPageNav);
    jtbStatus.add(jbNext);
    jfc = new JFileChooser();
    jfc.setSelectedFile(new File("R:/book/rfc/."));
    this.add(jtbStatus, BorderLayout.SOUTH);
    this.pack();
    this.setVisible(true);
    init();
  }

  void init() {
    rfcService = new RFCService();
  }

  public void actionPerformed(ActionEvent ae) {
    try {
      if (ae.getActionCommand().equals("Open")) {
        int state = jfc.showOpenDialog(this);
        if (state == JFileChooser.APPROVE_OPTION)
          go(rfcService.loadRFC(jfc.getSelectedFile(), this));
        updateTabs();
      }else if (ae.getActionCommand().equals("switch")) {
        go((JButton)ae.getSource());
      }else if(ae.getActionCommand().equals("NextPage")){
        jump(rfcService.getCurrentPageNumber()+1);
      }else if(ae.getActionCommand().equals("PrevPage")){
        jump(rfcService.getCurrentPageNumber()-1);
      }else if(ae.getActionCommand().equals("Close")){
        jtbNavigator.remove(rfcService.close());
        updateCatalog(rfcService.getCatalog());
        jump(rfcService.getCurrentPageNumber());
      }else if(ae.getActionCommand().equals("Exit")){
        this.dispose();
      }
    } catch (IOException e) {
      JOptionPane.showMessageDialog(this, "file error");
    }
  }

  private void go(JButton tab) {
    rfcService.go(tab);
    updateCatalog(rfcService.getCatalog());
    jump(rfcService.getCurrentPageNumber());
  }
  private void updateCatalog(RFCCatalog rfcCatalog) {
    catalogRoot.removeAllChildren();
    DefaultMutableTreeNode tempRoot = generateCatalog(rfcCatalog);
    while (tempRoot.getChildCount() != 0) {
      DefaultMutableTreeNode child = (DefaultMutableTreeNode) tempRoot
          .getFirstChild();
      catalogRoot.add(child);
    }
    catalogRoot.setUserObject(tempRoot.getUserObject());
    jtCatalog.treeDidChange();
    jtCatalog.updateUI();
  }
  private void jump(int i){
    try{
      updateContent(rfcService.getPage(i));
      jlPageNav.setText(rfcService.getCurrentPageNumber()+"/"+rfcService.getTotalPageNumber());
    } catch (IOException e){
      JOptionPane.showMessageDialog(this, "file error");
    }
  }
  private void updateContent(String content) {
    jtaContent.setText(content);
    int lineCount=rfcService.getLineCount();
    StringBuffer sb=new StringBuffer("<html>");
    for(int i=1;i<=lineCount;i++)
      sb.append(i+"<br/>");
    sb.append("</html>");
    jlLineNumber.setText(sb.toString());
  }

  private DefaultMutableTreeNode generateCatalog(RFCCatalog catalog) {
    RFCCatalog[] child = catalog.getChildCatalog();
    DefaultMutableTreeNode parent = new DefaultMutableTreeNode(catalog,
        child != null);
    if (child != null)
      for (int i = 0; i < child.length; i++) {
        parent.add(generateCatalog(child[i]));
      }
    return parent;
  }

  private void updateTabs() {
    jtbNavigator.removeAll();
    Set<JButton> tabs = rfcService.getTabs();
    for (JButton tab : tabs) {
      jtbNavigator.add(tab);
    }
  }
  public void valueChanged(TreeSelectionEvent tse) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) jtCatalog
        .getLastSelectedPathComponent();
    RFCCatalog rfcc = (RFCCatalog) node.getUserObject();
    if (rfcc == null)return;
    jump(rfcc.getPageNumber());
  }
  public static void main(String[] args) {
    new RFSee();
  }
}
TOP

Related Classes of com.rfsee.view.RFSee

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.