zoukankan      html  css  js  c++  java
  • My Notepad

    I have spent near more two weeks to write this Notepad application. At this moment, I want to share with you.

    I wonder that do you know the Notepad in Windows XP/7. If you have no idea, I am pleasure to display the Notepad 

    in Windows 7 with you, and it displays as below:

    It has large future and simple interface, so does my Notepad!

    Well, I will introduce my Notepad.

    First, Let's look at the structure of the my Notepad application:

    =================================================
    The structure of the project:
    =================================================
      -src/main/java
           -com.b510.notepad
                  -client
                       -Client.java
                  -common
                       -Common.java
                  -ui
                       -AboutUI.java
                       -FindManagerUI.java
                       -FontManagerUI.java
                       -FontSizeManagerUI.java
                       -JUI.java
                       -MainUI.java
                       -NotepadUI.java
                       -ReplaceManagerUI.java
                       -SkinManagerUI.java
                 -util
                       -EditMenuUtil.java
                       -FileMenuUtil.java
                       -FormatMenuUtil.java
                       -HelpMenuUtil.java
                       -NotepadUtil.java
                       -ViewMenuUtil.java
                -log4j.properties
                -lib
                      -skin
                           -substance-1.0.jar
                -pom.xml

    =================================================
    Describe for all files:
    =================================================

    -Client.java --> The entry of the notepad application. It contains the main method.
    -Common.java --> All constants in here.
    -AboutUI.java --> About notepad page.
    -FindManagerUI.java --> Find page.
    -FontManagerUI.java --> Font setting page.
    -FontSizeManagerUI.java --> Font sizt setting page.
    -JUI.java --> The parent class for the NotepadUI, It extends JFrame.
    -MainUI.java --> The main page of the notepad.
    -NotepadUI.java --> The parent class for the MainUI, It extends JUI and implements ActionListener.
    -ReplaceManagerUI.java --> Replace page.
    -SkinManagerUI.java --> Skin setting page.
    -EditMenuUtil.java --> Edit menu functions provider.
    -FileMenuUtil.java --> File menu functions provider.
    -FormatMenuUtil.java --> Format menu functions provider.
    -HelpMenuUtil.java --> Help menu functions provider.
    -NotepadUtil.java --> Common functions provider.
    -ViewMenuUtil.java --> View menu functions provider.
    -log4j.properties --> A properties for the log4j.
    -substance-1.0.jar --> substance dependency.
    -pom.xml --> pom.xml

    =================================================
    How to add substance to your project build path?
    =================================================

    NOTE:
    Your computer should install the Maven(apache-maven-3.2.2 is good choice) before running this project!

    There are TWO ways to provided.

    1. Using eclipse tool to add the substance-1.0.jar to project build path.
      1.1.Finding the substance-1.0.jar with the path "notepad/lib/skin/substance-1.0.jar".
         Right Click --> Build Path --> Add to Build Path.

      1.2.Then open the opm.xml(with the path "notepad/pom.xml")
          Deleting the substance dependency:
          <dependency>
          <groupId>org.jvnet.substance</groupId>
      <artifactId>substance</artifactId>
      <version>1.0</version>
      </dependency>


    2. Copy the substance-1.0.jar to your repository.
      2.1.Finding the substance-1.0.jar with the path "notepad/lib/skin/substance-1.0.jar".
      Copying the substance-1.0.jar file to your repository.
      The default path of the repository is "${user.home}/.m2/repository/org/jvnet/substance/substance/1.0/substance-1.0.jar"

    =================================================
    How to run notepad project?
    =================================================
    Using the eclipse tool and finding the Client.java file with the path "notepad/src/main/java/com/b510/notepad/client/Client.java".
    Right Click --> Run As --> Java Application

    ==================

    Some UIs Show

    ==================

    1. The Notepad Main UI

    2. File Menu

    3. Edit Menu

    4. Format Menu

    5. View Menu

    6.Help Menu

    7.Untitle Notepad

    8. Open a File

    9. About Notepad

    10. Change Skin

    =================================================
    Source Code:
    =================================================

    /notepad/src/main/java/com/b510/notepad/client/Client.java

     1 /**
     2  * 
     3  */
     4 package com.b510.notepad.client;
     5 
     6 import com.b510.notepad.common.Common;
     7 import com.b510.notepad.ui.MainUI;
     8 
     9 /**
    10  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
    11  * @created Nov 19, 2014
    12  */
    13 public class Client {
    14 
    15     public static void main(String[] args) {
    16         start();
    17     }
    18 
    19     public static MainUI start() {
    20         MainUI ui = new MainUI(Common.TITLE);
    21         ui.init();
    22         return ui;
    23     }
    24 }

    /notepad/src/main/java/com/b510/notepad/common/Common.java

      1 package com.b510.notepad.common;
      2 
      3 /**
      4  * @author Hongten
      5  * @created Nov 19, 2014
      6  */
      7 public class Common {
      8 
      9     public static final String HYPHEN = "-";
     10     public static final String EMPTY = "";
     11     public static final String NEW_LINE = "
    ";
     12     public static final String BLANK = " ";
     13     public static final String QUESTION_MARK = "?";
     14     public static final String POINT = ".";
     15     public static final String COLOR = ":";
     16     public static final String START = "*";
     17     public static final String TXT = "txt";
     18     public static final String TXT_FILE = START + POINT + TXT;
     19 
     20     public static final String UNTITLE = "Untitled";
     21     public static final String NOTEPAD = "Notepad";
     22     public static final String NOTEPAD_NOTEPAD = BLANK + HYPHEN + BLANK + NOTEPAD;
     23     public static final String TITLE = UNTITLE + NOTEPAD_NOTEPAD;
     24     public static final String SYSTEM_EXIT = "System exit";
     25     public static final String SYSTEM_OPEN = "System open";
     26 
     27     public static final String FILE = "File";
     28     public static final String EDIT = "Edit";
     29     public static final String FORMAT = "Format";
     30     public static final String VIEW = "View";
     31     public static final String Help = "Help";
     32 
     33     // File Items
     34     public static final String NEW = "New";
     35     public static final String OPEN = "Open...";
     36     public static final String SAVE = "Save";
     37     public static final String SAVE_AS = "Save as...";
     38     public static final String PROPERTIES = "Properties";
     39     public static final String EXIT = "Exit";
     40 
     41     // Edit Items
     42     public static final String UNDO = "Undo";
     43     public static final String COPY = "Copy";
     44     public static final String PASTE = "Paste";
     45     public static final String CUT = "Cut";
     46     public static final String DELETE = "Delete";
     47     public static final String FIND = "Find...";
     48     public static final String FIND_NEXT = "Find Next";
     49     public static final String REPLACE = "Replace";
     50     public static final String GO_TO = "Go To...";
     51     public static final String SELECT_ALL = "Select All";
     52     public static final String TIME_DATE = "Time/Date";
     53 
     54     // Format Items
     55     public static final String WORD_WRAP = "Word Wrap";
     56     public static final String RESET_FONT = "Reset Font";
     57     public static final String FONT = "Font";
     58     public static final String FONT_STYLE = "Font Style";
     59     public static final String FONT_SIZE_TITLE = "Font Size";
     60 
     61     // View
     62     public static final String STATUS_BAR = "Status Bar";
     63     public static final String SKIN = "Change Skin";
     64 
     65     // Help Items
     66     public static final String VIEW_HELP = "View Help";
     67     public static final String ABOUT_NOTEPAD = "About NotePad";
     68 
     69     // KeyStroke
     70     public static final char A = 'A';
     71     public static final char N = 'N';
     72     public static final char O = 'O';
     73     public static final char L = 'L';
     74     public static final char Z = 'Z';
     75     public static final char C = 'C';
     76     public static final char D = 'D';
     77     public static final char W = 'W';
     78     public static final char H = 'H';
     79     public static final char F = 'F';
     80     public static final char V = 'V';
     81     public static final char X = 'X';
     82     public static final char G = 'G';
     83     public static final char S = 'S';
     84     public static final char P = 'P';
     85     public static final char T = 'T';
     86     public static final char SPACE = ' ';
     87 
     88     // notepadsrcmain
    esourcesimages
     89     public static final String IMAGE_PATH = "images/";
     90 
     91     public static final String HONGTEN_PIC = IMAGE_PATH + "hongten.png";
     92 
     93     // About UI
     94     public static final String AUTHOR = "Author";
     95     public static final String AUTHOR_NAME = "Hongten";
     96     public static final String AUTHOR_DESC = "I'm " + AUTHOR_NAME;
     97     public static final String ITEM = "Item";
     98     public static final String DESCRIPTION = "Desctiption";
     99     public static final String APPLICATION = "Application";
    100     public static final String NAME = "Name";
    101     public static final String APPLICATION_NAME = APPLICATION + BLANK + NAME;
    102     public static final String NOTEPAD_APP = NOTEPAD;
    103     public static final String APPLICATION_DESCRIPTION = APPLICATION + BLANK + DESCRIPTION;
    104     public static final String APPLICATION_DESCRIPTION_DETAIL = "A " + NOTEPAD;
    105     public static final String VERSION = "Version";
    106     public static final String VERSION_VALUE = "1.0";
    107     public static final String BLOG = "Blog";
    108     public static final String HOME_PAGE = "http://www.cnblogs.com/hongten";
    109     public static final String NOTEPAD_PUBLISHED_PAGE = HOME_PAGE + "/p/hongten_notepad_index.html";
    110     public static final String NOTEPAD_SUBSTANCE_SKINS_PAGE = HOME_PAGE + "/p/hongten_notepad_substance_skins.html";
    111     public static final String SUBSTANCE_SKINS_PAGE = NOTEPAD_SUBSTANCE_SKINS_PAGE + "#";
    112     public static final String NOTEPAD_PUBLISHED_BOOKMARK_PAGE = NOTEPAD_PUBLISHED_PAGE + "#";
    113 
    114     public static final int TABLE_ROW_HEIGHT = 20;
    115 
    116     // Dialog messages and titles
    117     public static final String CONFIM_EXIT = "Confim Exit";
    118     public static final String ACCESS_URL_REQUEST = "Access URL Request";
    119     public static final String ACCESS_URL = "Access URL : ";
    120 
    121     public static final String FONT_LUCIDA_CONSOLE = "Lucida Console";
    122     public static final String FONT_TYPE = "宋体";
    123     public static final int FONT_SIZE = 12;
    124     public static final int FONT_NUM = 148;
    125     public static final int FONT_SIZE_NUM = 4;
    126     public static final int FONT_STYLE_NUM = 0;
    127     public static final String FONT_STYLE_DEFAULT = "Regular";
    128     public static final String DATE_FORMAT = "HH:mm MM/dd/yyyy";
    129     public static final String THIS_IS_A_SIMPLE = "This is a Simple";
    130     public static final String SIMPLE = "Simple";
    131 
    132     public static final String CURRENT_SINK = "Current Skin" + BLANK + COLOR + BLANK;
    133     public static final String DESCRIPTION_WITH_COLOR = DESCRIPTION + BLANK + COLOR + BLANK;
    134     public static final String CURRENT_FONT = "Current Font" + BLANK + COLOR + BLANK;
    135     public static final String CURRENT_FONT_SIZE = "Current Font Size" + BLANK + COLOR + BLANK;
    136     public static final String CURRENT_FONT_STYLE = "Current Font Style" + BLANK + COLOR + BLANK;
    137 
    138     public static final String DO_YOU_WANT_TO_SAVE_CHANGES = "Do you want to save changes?";
    139     public static final String WHAT_DO_YOU_WANT_TO_FIND = "Please type what do you want to find.";
    140     public static final String CAN_NOT_FIND = "Cannot find ";
    141     public static final String MATCHES_REPLACED = " matches replaced!";
    142 
    143     public static final String FIND_WHAT = "Find What :";
    144     public static final String REPLACE_TO = "Replace To :";
    145     public static final String REPLACE_ALL = "Replace All";
    146     public static final String CASE_SENSITIVE = "Case Sensitive";
    147     public static final String FORWARD = "Forward";
    148     public static final String BACKWARD = "Backward";
    149     public static final String CANCEL = "Cancel";
    150     public static final String GB2312 = "GB2312";
    151     
    152     public static final String NOTEPAD_HOME_PAGE = "Home Page";
    153     public static final String NOTEPAD_SKINS = "Notepad Skins";
    154     public static final String SOURCE = "Source";
    155     public static final String SOURCE_CODE = SOURCE + " Code";
    156     public static final String SOURCE_CODE_DOWNLOAD = SOURCE_CODE + " Download";
    157     public static final String NOTEPAD_API = "Notepad API";
    158     
    159     public static final String SOURCE_CODE_BOOKMARK = "Source.Code";
    160     public static final String SOURCE_CODE_DOWNLOAD_BOOKMARK = SOURCE_CODE_BOOKMARK + ".Download";
    161     public static final String NOTEPAD_API_BOOKMARK = "Notepad.API";
    162 }

    /notepad/src/main/java/com/b510/notepad/ui/AboutUI.java

      1 package com.b510.notepad.ui;
      2 
      3 import java.awt.Cursor;
      4 import java.awt.event.MouseEvent;
      5 import java.awt.event.MouseListener;
      6 import java.awt.event.WindowAdapter;
      7 import java.awt.event.WindowEvent;
      8 
      9 import javax.swing.GroupLayout;
     10 import javax.swing.ImageIcon;
     11 import javax.swing.JButton;
     12 import javax.swing.JLabel;
     13 import javax.swing.JOptionPane;
     14 import javax.swing.JPanel;
     15 import javax.swing.JScrollPane;
     16 import javax.swing.JTable;
     17 import javax.swing.ListSelectionModel;
     18 import javax.swing.SwingConstants;
     19 import javax.swing.table.DefaultTableModel;
     20 
     21 import org.apache.log4j.Logger;
     22 
     23 import com.b510.notepad.common.Common;
     24 import com.b510.notepad.util.HelpMenuUtil;
     25 import com.b510.notepad.util.NotepadUtil;
     26 
     27 /**
     28  * Location : MainUI --> Help --> About Notepad<br>
     29  * <p>
     30  * The <code>AboutUI</code> display the information about this application.<br>
     31  * <p>
     32  * i.e., Author, Application Name, Application description, Version, Blog.etc.<br>
     33  * <p>
     34  * If you have a try to double-click the row which name is 'Blog', then the dialog will be displaying in front of this page.<br>
     35  * The dialog is a access URL request dialog, and you will access the URL(<a href='http://www.cnblogs.com/hongten'>http://www.cnblogs.com/hongten</a>) if you click 'Yes'.<br>
     36  * <p>
     37  * If you want to use this class, you should do as below:<br>
     38  * <p><blockquote><pre>
     39  *     <code>AboutUI aboutUI = new AboutUI("About Notepad");</code>
     40  * </pre></blockquote><p>
     41  * 
     42  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
     43  * @created Nov 20, 2014
     44  */
     45 public class AboutUI extends MainUI {
     46     
     47     private static final long serialVersionUID = 1L;
     48     
     49     static Logger log = Logger.getLogger(AboutUI.class);
     50 
     51     private JLabel descriptionLabel;
     52     private JButton hongtenButton;
     53     private JTable aboutUITable;
     54     private JPanel mainPanel;
     55     private JScrollPane rightScrollPane;
     56     
     57     private HelpMenuUtil help;
     58 
     59     public AboutUI(String title) {
     60         super(title);
     61         initComponents();
     62         initSelf();
     63         setAlwaysOnTop(true);
     64         addWindowListener(new WindowAdapter() {
     65             @Override
     66             public void windowClosing(WindowEvent e) {
     67                 AboutUI.this.setVisible(false);
     68                 help.distoryAboutUI();
     69             }
     70         });
     71     }
     72 
     73     public void initSelf() {
     74         this.setVisible(true);
     75         setResizable(false);
     76         this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150);
     77     }
     78 
     79     private void initComponents() {
     80         initElement();
     81         initHongtenButton();
     82         initAboutUITable();
     83         initDescriptionLabel();
     84         mainPanelLayout();
     85     }
     86 
     87     private void initHongtenButton() {
     88         hongtenButton.setIcon(new ImageIcon(this.getClass().getClassLoader().getResource(Common.HONGTEN_PIC)));
     89         hongtenButton.setToolTipText(Common.ABOUT_NOTEPAD);
     90     }
     91 
     92     private void initAboutUITable() {
     93         Object[][] values = new Object[][] { { Common.AUTHOR, Common.AUTHOR_NAME }, { Common.APPLICATION_NAME, Common.NOTEPAD_APP }, { Common.APPLICATION_DESCRIPTION, Common.APPLICATION_DESCRIPTION_DETAIL }, { Common.VERSION, Common.VERSION_VALUE }, { Common.BLOG, Common.HOME_PAGE } };
     94 
     95         String[] titles = new String[] { Common.ITEM, Common.DESCRIPTION };
     96 
     97         aboutUITable.setModel(new DefaultTableModel(values, titles) {
     98             private static final long serialVersionUID = 1L;
     99             boolean[] canEdit = new boolean[] { false, false };
    100 
    101             public boolean isCellEditable(int rowIndex, int columnIndex) {
    102                 return canEdit[columnIndex];
    103             }
    104         });
    105 
    106         aboutUITable.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
    107         aboutUITable.setOpaque(false);
    108         aboutUITable.setRowHeight(Common.TABLE_ROW_HEIGHT);
    109         aboutUITable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    110         aboutUITable.setSurrendersFocusOnKeystroke(true);
    111         aboutUITable.getTableHeader().setReorderingAllowed(false);
    112         aboutUITable.addMouseListener(new MouseListener() {
    113 
    114             public void mouseReleased(MouseEvent e) {
    115 
    116             }
    117 
    118             public void mousePressed(MouseEvent e) {
    119                 if (e.getClickCount() == 2) {
    120                     matchUrlOperation();
    121                 }
    122             }
    123 
    124             public void mouseExited(MouseEvent e) {
    125 
    126             }
    127 
    128             public void mouseEntered(MouseEvent e) {
    129 
    130             }
    131 
    132             public void mouseClicked(MouseEvent e) {
    133 
    134             }
    135         });
    136         rightScrollPane.setViewportView(aboutUITable);
    137     }
    138 
    139     private void matchUrlOperation() {
    140         int id = aboutUITable.getSelectedRow();
    141         String url = (String) aboutUITable.getValueAt(id, 1);
    142         if (url.equals(Common.HOME_PAGE)) {
    143             askAccessBlogOperation();
    144         }
    145     }
    146 
    147     // Show a dialog to access URL request.
    148     // You will access the URL if you click 'Yes'.
    149     protected void askAccessBlogOperation() {
    150         int option = JOptionPane.showConfirmDialog(AboutUI.this, Common.ACCESS_URL + Common.HOME_PAGE + Common.BLANK + Common.QUESTION_MARK, Common.ACCESS_URL_REQUEST, JOptionPane.YES_NO_OPTION);
    151         if (option == JOptionPane.YES_OPTION) {
    152             NotepadUtil.accessURL(Common.HOME_PAGE);
    153         }
    154     }
    155 
    156     private void initDescriptionLabel() {
    157         descriptionLabel.setFont(new java.awt.Font(Common.FONT_LUCIDA_CONSOLE, 1, 18));
    158         descriptionLabel.setHorizontalAlignment(SwingConstants.CENTER);
    159         descriptionLabel.setText(Common.AUTHOR_DESC);
    160     }
    161 
    162     private void initElement() {
    163         mainPanel = new JPanel();
    164         hongtenButton = new JButton();
    165         rightScrollPane = new JScrollPane();
    166         aboutUITable = new JTable();
    167         descriptionLabel = new JLabel();
    168     }
    169     
    170     public void setHelpMenuUtil(HelpMenuUtil helpMenuUtil){
    171         this.help = helpMenuUtil;
    172     }
    173 
    174     /**
    175      * If not necessary, please do not change
    176      */
    177     private void mainPanelLayout() {
    178         GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
    179         mainPanel.setLayout(mainPanelLayout);
    180         mainPanelLayout.setHorizontalGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(mainPanelLayout.createSequentialGroup().addContainerGap().addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.TRAILING).addComponent(hongtenButton).addComponent(descriptionLabel, GroupLayout.PREFERRED_SIZE, 265, GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addComponent(rightScrollPane, GroupLayout.PREFERRED_SIZE, 243, GroupLayout.PREFERRED_SIZE).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
    181         mainPanelLayout.setVerticalGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(mainPanelLayout.createSequentialGroup().addContainerGap().addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false).addComponent(rightScrollPane, GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE).addGroup(mainPanelLayout.createSequentialGroup().addComponent(hongtenButton, GroupLayout.PREFERRED_SIZE, 256, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(descriptionLabel, GroupLayout.PREFERRED_SIZE, 31, GroupLayout.PREFERRED_SIZE))).addGap(0, 0, Short.MAX_VALUE)));
    182 
    183         GroupLayout layout = new GroupLayout(getContentPane());
    184         getContentPane().setLayout(layout);
    185         layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(mainPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addContainerGap()));
    186         layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(mainPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addContainerGap()));
    187 
    188         pack();
    189     }
    190 }

    /notepad/src/main/java/com/b510/notepad/ui/FindManagerUI.java

      1 package com.b510.notepad.ui;
      2 
      3 import java.awt.Dimension;
      4 import java.awt.event.ActionEvent;
      5 import java.awt.event.WindowAdapter;
      6 import java.awt.event.WindowEvent;
      7 
      8 import javax.swing.GroupLayout;
      9 import javax.swing.JButton;
     10 import javax.swing.JCheckBox;
     11 import javax.swing.JLabel;
     12 import javax.swing.JOptionPane;
     13 import javax.swing.JPanel;
     14 import javax.swing.JRadioButton;
     15 import javax.swing.JTextField;
     16 import javax.swing.LayoutStyle;
     17 
     18 import org.apache.log4j.Logger;
     19 
     20 import com.b510.notepad.common.Common;
     21 import com.b510.notepad.util.EditMenuUtil;
     22 
     23 /**
     24  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
     25  * @created Nov 20, 2014
     26  */
     27 public class FindManagerUI extends MainUI {
     28     private static final long serialVersionUID = 1L;
     29     static Logger log = Logger.getLogger(FindManagerUI.class);
     30 
     31     private JPanel bGJPanel;
     32     private JRadioButton backwardJRadioButton;
     33     private JButton cancelJButton;
     34     private JCheckBox caseSensitiveJCheckBox;
     35     private JButton findNextJButton;
     36     private JLabel findWhatJLabel;
     37     private JRadioButton forwardJRadioButton;
     38     private JTextField keyWordJTextField;
     39 
     40     public static boolean isForward = true;
     41     public static boolean isCaseSensitive = false;
     42 
     43     private EditMenuUtil edit;
     44 
     45     public FindManagerUI(String title) {
     46         super(title);
     47         initComponents();
     48 
     49         initSelf();
     50         setAlwaysOnTop(true);
     51         addWindowListener(new WindowAdapter() {
     52             @Override
     53             public void windowClosing(WindowEvent e) {
     54                 distoryFindManagerUI();
     55             }
     56         });
     57     }
     58 
     59     public void initSelf() {
     60         this.setVisible(true);
     61         setResizable(false);
     62         this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150);
     63     }
     64 
     65     /**
     66      * If not necessary, do not change the order.
     67      */
     68     private void initComponents() {
     69         initElements();
     70         initFindWhat();
     71         initCaseSensitive();
     72         initFindNext();
     73         initCancle();
     74         initDirection();
     75         initLayout();
     76     }
     77     
     78     private void initElements() {
     79         bGJPanel = new JPanel();
     80         findWhatJLabel = new JLabel();
     81         keyWordJTextField = new JTextField();
     82         caseSensitiveJCheckBox = new JCheckBox();
     83         findNextJButton = new JButton();
     84         cancelJButton = new JButton();
     85         forwardJRadioButton = new JRadioButton();
     86         backwardJRadioButton = new JRadioButton();
     87     }
     88 
     89     private void initDirection() {
     90         forwardJRadioButton.setSelected(true);
     91         forwardJRadioButton.setText(Common.FORWARD);
     92         forwardJRadioButton.addActionListener(this);
     93 
     94         backwardJRadioButton.setText(Common.BACKWARD);
     95         backwardJRadioButton.addActionListener(this);
     96     }
     97 
     98     private void initCancle() {
     99         cancelJButton.setText(Common.CANCEL);
    100         cancelJButton.setMaximumSize(new Dimension(87, 23));
    101         cancelJButton.setMinimumSize(new Dimension(87, 23));
    102         cancelJButton.setPreferredSize(new Dimension(87, 23));
    103         cancelJButton.addActionListener(this);
    104     }
    105 
    106     private void initFindNext() {
    107         findNextJButton.setText(Common.FIND_NEXT);
    108         findNextJButton.addActionListener(this);
    109     }
    110 
    111     private void initCaseSensitive() {
    112         caseSensitiveJCheckBox.setText(Common.CASE_SENSITIVE);
    113         caseSensitiveJCheckBox.addActionListener(this);
    114     }
    115 
    116     private void initFindWhat() {
    117         findWhatJLabel.setText(Common.FIND_WHAT);
    118         
    119         if (null == textArea.getSelectedText() || Common.EMPTY.equals(textArea.getSelectedText().trim())) {
    120             keyWordJTextField.setText(findWhat);
    121         } else if(null != textArea.getSelectedText() && !Common.EMPTY.equals(textArea.getSelectedText().trim())){
    122             keyWordJTextField.setText(textArea.getSelectedText());
    123         }else{
    124             keyWordJTextField.setText(findWhat);
    125         }
    126     }
    127 
    128     public void actionPerformed(ActionEvent e) {
    129         if (e.getSource() == backwardJRadioButton) {
    130             directionOfOperation(false);
    131         } else if (e.getSource() == forwardJRadioButton) {
    132             directionOfOperation(true);
    133         } else if (e.getSource() == findNextJButton) {
    134             findNextOperation();
    135         } else if (e.getSource() == cancelJButton) {
    136             distoryFindManagerUI();
    137         } else if (e.getSource() == caseSensitiveJCheckBox) {
    138             caseSensitiveSwitch();
    139         }
    140     }
    141 
    142     private void findNextOperation() {
    143         findWhat = keyWordJTextField.getText();
    144         if (Common.EMPTY.equals(findWhat)) {
    145             JOptionPane.showMessageDialog(FindManagerUI.this, Common.WHAT_DO_YOU_WANT_TO_FIND, Common.NOTEPAD, JOptionPane.INFORMATION_MESSAGE);
    146             keyWordJTextField.setFocusable(true);
    147         }
    148         edit.findNext();
    149     }
    150 
    151     /**
    152      * Operation for Cancel button
    153      */
    154     private void distoryFindManagerUI() {
    155         FindManagerUI.this.setVisible(false);
    156         edit.distoryFindManagerUI();
    157     }
    158 
    159     /**
    160      * Case Sensitive Switch 
    161      */
    162     private void caseSensitiveSwitch() {
    163         if (null == caseSensitiveJCheckBox.getSelectedObjects()) {
    164             isCaseSensitive = false;
    165         } else {
    166             isCaseSensitive = true;
    167         }
    168         log.debug(isCaseSensitive);
    169     }
    170 
    171     /**
    172      * Direction of Operation<br>
    173      * <li>Forward  : <code>directionOfOperation(true);</code></li>
    174      * <li>Backward : <code>directionOfOperation(false);</code></li>
    175      * @param b <code>b = true;</code> Forward is selected; <code>b = false;</code> Backward is selected.<br>
    176      */
    177     private void directionOfOperation(boolean b) {
    178         isForward = b;
    179         forwardJRadioButton.setSelected(b);
    180         backwardJRadioButton.setSelected(!b);
    181         log.debug(isForward);
    182     }
    183     
    184 
    185     public void setEditMenuUtil(EditMenuUtil editMenuUtil) {
    186         this.edit = editMenuUtil;
    187     }
    188 
    189     /**
    190      * If not necessary, do not change.
    191      */
    192     private void initLayout() {
    193         GroupLayout bGJPanelLayout = new GroupLayout(bGJPanel);
    194         bGJPanel.setLayout(bGJPanelLayout);
    195         bGJPanelLayout.setHorizontalGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(bGJPanelLayout.createSequentialGroup().addContainerGap().addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(bGJPanelLayout.createSequentialGroup().addComponent(findWhatJLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(keyWordJTextField, GroupLayout.PREFERRED_SIZE, 221, GroupLayout.PREFERRED_SIZE)).addGroup(bGJPanelLayout.createSequentialGroup().addComponent(caseSensitiveJCheckBox).addGap(18, 18, 18).addComponent(forwardJRadioButton).addGap(18, 18, 18).addComponent(backwardJRadioButton))).addGap(18, 18, 18).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(findNextJButton, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(cancelJButton, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addContainerGap()));
    196         bGJPanelLayout.setVerticalGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(bGJPanelLayout.createSequentialGroup().addGap(14, 14, 14).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(findWhatJLabel).addComponent(keyWordJTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addComponent(findNextJButton)).addGap(18, 18, 18).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(cancelJButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addComponent(caseSensitiveJCheckBox).addComponent(forwardJRadioButton).addComponent(backwardJRadioButton)).addContainerGap()));
    197 
    198         GroupLayout layout = new GroupLayout(getContentPane());
    199         getContentPane().setLayout(layout);
    200         layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(bGJPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addContainerGap()));
    201         layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(bGJPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addContainerGap()));
    202         pack();
    203     }
    204 }

    /notepad/src/main/java/com/b510/notepad/ui/FontManagerUI.java

      1 package com.b510.notepad.ui;
      2 
      3 import java.awt.Font;
      4 import java.awt.GraphicsEnvironment;
      5 import java.awt.event.ActionEvent;
      6 import java.awt.event.WindowAdapter;
      7 import java.awt.event.WindowEvent;
      8 
      9 import javax.swing.DefaultComboBoxModel;
     10 import javax.swing.GroupLayout;
     11 import javax.swing.JComboBox;
     12 import javax.swing.JLabel;
     13 import javax.swing.JSeparator;
     14 import javax.swing.LayoutStyle;
     15 
     16 import com.b510.notepad.common.Common;
     17 import com.b510.notepad.util.FormatMenuUtil;
     18 
     19 /**
     20  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
     21  * @created Nov 20, 2014
     22  */
     23 public class FontManagerUI extends MainUI {
     24     private static final long serialVersionUID = -37011351219515242L;
     25 
     26     private JLabel currentFontDescJLabel;
     27     private JLabel currentFontJLabel;
     28     private JLabel descJlabel;
     29     private JSeparator line;
     30     private JComboBox<String> fontJComboBox;
     31     
     32     private FormatMenuUtil format;
     33     
     34     GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
     35     String fontNames[] = ge.getAvailableFontFamilyNames();
     36     
     37     public static String FONT_TYPE = Common.FONT_TYPE;
     38     public static int FONT_SIZE = Common.FONT_SIZE;
     39     public static String FONT_STYPLE = Common.FONT_STYLE_DEFAULT;
     40     
     41     public FontManagerUI(String title) {
     42         super(title);
     43         initComponents();
     44 
     45         initSelf();
     46         setAlwaysOnTop(true);
     47         addWindowListener(new WindowAdapter() {
     48             @Override
     49             public void windowClosing(WindowEvent e) {
     50                 FontManagerUI.this.setVisible(false);
     51                 format.distoryFontManagerUI();
     52             }
     53         });
     54     }
     55 
     56     public void initSelf() {
     57         this.setVisible(true);
     58         setResizable(false);
     59         this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150);
     60     }
     61 
     62     private void initComponents() {
     63         initElement();
     64         currentFontJLabel.setText(Common.CURRENT_FONT);
     65 
     66         fontJComboBox.setModel(new DefaultComboBoxModel<String>(fontNames));
     67         int i = 0;
     68         for(String name : fontNames){
     69             if(FontManagerUI.FONT_TYPE.equals(name)){
     70                 fontNum = i;
     71             }
     72             i++;
     73         }
     74         fontJComboBox.setSelectedIndex(fontNum);
     75         fontJComboBox.addActionListener(this);
     76 
     77         descJlabel.setText(Common.DESCRIPTION_WITH_COLOR);
     78 
     79         currentFontDescJLabel.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE));
     80         currentFontDescJLabel.setText(Common.THIS_IS_A_SIMPLE);
     81         pageGourpLayout();
     82     }
     83 
     84     private void initElement() {
     85         currentFontJLabel = new JLabel();
     86         fontJComboBox = new JComboBox<String>();
     87         descJlabel = new JLabel();
     88         currentFontDescJLabel = new JLabel();
     89         line = new JSeparator();
     90     }
     91 
     92     @Override
     93     public void actionPerformed(ActionEvent e) {
     94         if (e.getSource() == fontJComboBox) {
     95             updateSkin();
     96         }
     97     }
     98 
     99     public synchronized void updateSkin() {
    100         fontNum = fontJComboBox.getSelectedIndex();
    101         log.debug(fontJComboBox.getSelectedItem().toString());
    102         FontManagerUI.FONT_TYPE = fontJComboBox.getSelectedItem().toString();
    103         currentFontDescJLabel.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE));
    104         currentFontDescJLabel.setText(Common.THIS_IS_A_SIMPLE);
    105         textArea.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE));
    106         setJUI();
    107     }
    108 
    109     public void setFormatMenuUtil(FormatMenuUtil formatMenuUtil){
    110         this.format = formatMenuUtil;
    111     }
    112     
    113     /**
    114      * If not necessary, please do not change
    115      */
    116     private void pageGourpLayout() {
    117         GroupLayout layout = new GroupLayout(getContentPane());
    118         getContentPane().setLayout(layout);
    119         horizontalGroupLayout(layout);
    120         verticalGroupLayout(layout);
    121         pack();
    122     }
    123 
    124     private void verticalGroupLayout(GroupLayout layout) {
    125         layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(
    126                 layout.createSequentialGroup()
    127                         .addGap(40, 40, 40)
    128                         .addGroup(
    129                                 layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(currentFontJLabel)
    130                                         .addComponent(fontJComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addGap(26, 26, 26)
    131                         .addComponent(line, GroupLayout.PREFERRED_SIZE, 11, GroupLayout.PREFERRED_SIZE).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
    132                         .addComponent(descJlabel).addGap(18, 18, 18).addComponent(currentFontDescJLabel).addContainerGap(47, Short.MAX_VALUE)));
    133     }
    134 
    135     private void horizontalGroupLayout(GroupLayout layout) {
    136         layout.setHorizontalGroup(layout
    137                 .createParallelGroup(GroupLayout.Alignment.LEADING)
    138                 .addGroup(
    139                         layout.createSequentialGroup()
    140                                 .addGap(21, 21, 21)
    141                                 .addGroup(
    142                                         layout.createParallelGroup(GroupLayout.Alignment.LEADING)
    143                                                 .addComponent(currentFontDescJLabel)
    144                                                 .addComponent(descJlabel)
    145                                                 .addGroup(
    146                                                         layout.createSequentialGroup().addComponent(currentFontJLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
    147                                                                 .addComponent(fontJComboBox, GroupLayout.PREFERRED_SIZE, 195, GroupLayout.PREFERRED_SIZE)))
    148                                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    149                 .addGroup(layout.createSequentialGroup().addComponent(line, GroupLayout.PREFERRED_SIZE, 355, GroupLayout.PREFERRED_SIZE).addGap(0, 0, Short.MAX_VALUE)));
    150     }
    151 }

    /notepad/src/main/java/com/b510/notepad/ui/FontSizeManagerUI.java

      1 package com.b510.notepad.ui;
      2 
      3 import java.awt.Font;
      4 import java.awt.event.ActionEvent;
      5 import java.awt.event.WindowAdapter;
      6 import java.awt.event.WindowEvent;
      7 
      8 import javax.swing.DefaultComboBoxModel;
      9 import javax.swing.GroupLayout;
     10 import javax.swing.JComboBox;
     11 import javax.swing.JLabel;
     12 import javax.swing.JSeparator;
     13 import javax.swing.LayoutStyle;
     14 
     15 import com.b510.notepad.common.Common;
     16 import com.b510.notepad.util.FormatMenuUtil;
     17 
     18 /**
     19  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
     20  * @created Nov 20, 2014
     21  */
     22 public class FontSizeManagerUI extends MainUI {
     23     private static final long serialVersionUID = -37011351219515242L;
     24 
     25     private JLabel currentFontSizeDescJLabel;
     26     private JLabel currentFontSizeJLabel;
     27     private JLabel descJlabel;
     28     private JSeparator line;
     29     private JComboBox<String> fontSizeJComboBox;
     30     
     31     private FormatMenuUtil format;
     32     
     33     String fontSizes[] = {"8", "9", "10", "11", "12", "14", "16", "18", "20", "22", "24", "26", "28", "36", "48", "72"};
     34     
     35     public FontSizeManagerUI(String title) {
     36         super(title);
     37         initComponents();
     38 
     39         initSelf();
     40         setAlwaysOnTop(true);
     41         addWindowListener(new WindowAdapter() {
     42             @Override
     43             public void windowClosing(WindowEvent e) {
     44                 FontSizeManagerUI.this.setVisible(false);
     45                 format.distoryFontSizeManagerUI();
     46             }
     47         });
     48     }
     49 
     50     public void initSelf() {
     51         this.setVisible(true);
     52         setResizable(false);
     53         this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150);
     54     }
     55 
     56     private void initComponents() {
     57         initElement();
     58         currentFontSizeJLabel.setText(Common.CURRENT_FONT_SIZE);
     59 
     60         fontSizeJComboBox.setModel(new DefaultComboBoxModel<String>(fontSizes));
     61         int i = 0;
     62         for(String size : fontSizes){
     63             if(Integer.valueOf(size) == FontManagerUI.FONT_SIZE){
     64                 fontSizeNum = i;
     65             }
     66             i++;
     67         }
     68         fontSizeJComboBox.setSelectedIndex(fontSizeNum);
     69         fontSizeJComboBox.addActionListener(this);
     70 
     71         descJlabel.setText(Common.DESCRIPTION_WITH_COLOR);
     72 
     73         currentFontSizeDescJLabel.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE));
     74         currentFontSizeDescJLabel.setText(Common.SIMPLE);
     75         pageGourpLayout();
     76     }
     77 
     78     private void initElement() {
     79         currentFontSizeJLabel = new JLabel();
     80         fontSizeJComboBox = new JComboBox<String>();
     81         descJlabel = new JLabel();
     82         currentFontSizeDescJLabel = new JLabel();
     83         line = new JSeparator();
     84     }
     85 
     86     @Override
     87     public void actionPerformed(ActionEvent e) {
     88         if (e.getSource() == fontSizeJComboBox) {
     89             updateSkin();
     90         }
     91     }
     92 
     93     public synchronized void updateSkin() {
     94         fontNum = fontSizeJComboBox.getSelectedIndex();
     95         log.debug(fontSizeJComboBox.getSelectedItem().toString());
     96         FontManagerUI.FONT_SIZE = Integer.valueOf((String) fontSizeJComboBox.getSelectedItem());
     97         currentFontSizeDescJLabel.setFont(new Font(FontManagerUI.FONT_TYPE, Font.PLAIN, FontManagerUI.FONT_SIZE));
     98         currentFontSizeDescJLabel.setText(Common.SIMPLE);
     99         textArea.setFont(new Font(FontManagerUI.FONT_TYPE, Font.PLAIN, FontManagerUI.FONT_SIZE));
    100         setJUI();
    101     }
    102 
    103     public void setFormatMenuUtil(FormatMenuUtil formatMenuUtil){
    104         this.format = formatMenuUtil;
    105     }
    106     
    107     /**
    108      * If not necessary, please do not change
    109      */
    110     private void pageGourpLayout() {
    111         GroupLayout layout = new GroupLayout(getContentPane());
    112         getContentPane().setLayout(layout);
    113         horizontalGroupLayout(layout);
    114         verticalGroupLayout(layout);
    115         pack();
    116     }
    117 
    118     private void verticalGroupLayout(GroupLayout layout) {
    119         layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(
    120                 layout.createSequentialGroup()
    121                         .addGap(40, 40, 40)
    122                         .addGroup(
    123                                 layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(currentFontSizeJLabel)
    124                                         .addComponent(fontSizeJComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addGap(26, 26, 26)
    125                         .addComponent(line, GroupLayout.PREFERRED_SIZE, 11, GroupLayout.PREFERRED_SIZE).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
    126                         .addComponent(descJlabel).addGap(18, 18, 18).addComponent(currentFontSizeDescJLabel).addContainerGap(47, Short.MAX_VALUE)));
    127     }
    128 
    129     private void horizontalGroupLayout(GroupLayout layout) {
    130         layout.setHorizontalGroup(layout
    131                 .createParallelGroup(GroupLayout.Alignment.LEADING)
    132                 .addGroup(
    133                         layout.createSequentialGroup()
    134                                 .addGap(21, 21, 21)
    135                                 .addGroup(
    136                                         layout.createParallelGroup(GroupLayout.Alignment.LEADING)
    137                                                 .addComponent(currentFontSizeDescJLabel)
    138                                                 .addComponent(descJlabel)
    139                                                 .addGroup(
    140                                                         layout.createSequentialGroup().addComponent(currentFontSizeJLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
    141                                                                 .addComponent(fontSizeJComboBox, GroupLayout.PREFERRED_SIZE, 195, GroupLayout.PREFERRED_SIZE)))
    142                                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    143                 .addGroup(layout.createSequentialGroup().addComponent(line, GroupLayout.PREFERRED_SIZE, 355, GroupLayout.PREFERRED_SIZE).addGap(0, 0, Short.MAX_VALUE)));
    144     }
    145 }

    /notepad/src/main/java/com/b510/notepad/ui/FontStyleManagerUI.java

      1 package com.b510.notepad.ui;
      2 
      3 import java.awt.Font;
      4 import java.awt.event.ActionEvent;
      5 import java.awt.event.WindowAdapter;
      6 import java.awt.event.WindowEvent;
      7 
      8 import javax.swing.DefaultComboBoxModel;
      9 import javax.swing.GroupLayout;
     10 import javax.swing.JComboBox;
     11 import javax.swing.JLabel;
     12 import javax.swing.JSeparator;
     13 import javax.swing.LayoutStyle;
     14 
     15 import com.b510.notepad.common.Common;
     16 import com.b510.notepad.util.FormatMenuUtil;
     17 
     18 /**
     19  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
     20  * @created Nov 20, 2014
     21  */
     22 public class FontStyleManagerUI extends MainUI {
     23     private static final long serialVersionUID = -37011351219515242L;
     24 
     25     private JLabel currentFontStyleDescJLabel;
     26     private JLabel currentFontStyleJLabel;
     27     private JLabel descJlabel;
     28     private JSeparator line;
     29     private JComboBox<String> fontStyleJComboBox;
     30     
     31     private FormatMenuUtil format;
     32     
     33     String fontStyles[] = {"Regular", "Italic", "Bold", "Bold Italic"};
     34     
     35     public FontStyleManagerUI(String title) {
     36         super(title);
     37         initComponents();
     38 
     39         initSelf();
     40         setAlwaysOnTop(true);
     41         addWindowListener(new WindowAdapter() {
     42             @Override
     43             public void windowClosing(WindowEvent e) {
     44                 FontStyleManagerUI.this.setVisible(false);
     45                 format.distoryFontSizeManagerUI();
     46             }
     47         });
     48     }
     49 
     50     public void initSelf() {
     51         this.setVisible(true);
     52         setResizable(false);
     53         this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150);
     54     }
     55 
     56     private void initComponents() {
     57         initElement();
     58         currentFontStyleJLabel.setText(Common.CURRENT_FONT_STYLE);
     59 
     60         fontStyleJComboBox.setModel(new DefaultComboBoxModel<String>(fontStyles));
     61         int i = 0;
     62         for(String     style : fontStyles){
     63             if(style.equals(FontManagerUI.FONT_STYPLE)){
     64                 fontStyleNum = i;
     65             }
     66             i++;
     67         }
     68         fontStyleJComboBox.setSelectedIndex(fontStyleNum);
     69         fontStyleJComboBox.addActionListener(this);
     70 
     71         descJlabel.setText(Common.DESCRIPTION_WITH_COLOR);
     72         // do here...
     73         currentFontStyleDescJLabel.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE));
     74         currentFontStyleDescJLabel.setText(Common.SIMPLE);
     75         pageGourpLayout();
     76     }
     77 
     78     private void initElement() {
     79         currentFontStyleJLabel = new JLabel();
     80         fontStyleJComboBox = new JComboBox<String>();
     81         descJlabel = new JLabel();
     82         currentFontStyleDescJLabel = new JLabel();
     83         line = new JSeparator();
     84     }
     85 
     86     @Override
     87     public void actionPerformed(ActionEvent e) {
     88         if (e.getSource() == fontStyleJComboBox) {
     89             updateSkin();
     90         }
     91     }
     92 
     93     public synchronized void updateSkin() {
     94         fontStyleNum = fontStyleJComboBox.getSelectedIndex();
     95         FontManagerUI.FONT_STYPLE = (String) fontStyleJComboBox.getSelectedItem();
     96         currentFontStyleDescJLabel.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE));
     97         currentFontStyleDescJLabel.setText(Common.SIMPLE);
     98         textArea.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE));
     99         setJUI();
    100     }
    101 
    102     public void setFormatMenuUtil(FormatMenuUtil formatMenuUtil){
    103         this.format = formatMenuUtil;
    104     }
    105     
    106     /**
    107      * If not necessary, please do not change
    108      */
    109     private void pageGourpLayout() {
    110         GroupLayout layout = new GroupLayout(getContentPane());
    111         getContentPane().setLayout(layout);
    112         horizontalGroupLayout(layout);
    113         verticalGroupLayout(layout);
    114         pack();
    115     }
    116 
    117     private void verticalGroupLayout(GroupLayout layout) {
    118         layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(
    119                 layout.createSequentialGroup()
    120                         .addGap(40, 40, 40)
    121                         .addGroup(
    122                                 layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(currentFontStyleJLabel)
    123                                         .addComponent(fontStyleJComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addGap(26, 26, 26)
    124                         .addComponent(line, GroupLayout.PREFERRED_SIZE, 11, GroupLayout.PREFERRED_SIZE).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
    125                         .addComponent(descJlabel).addGap(18, 18, 18).addComponent(currentFontStyleDescJLabel).addContainerGap(47, Short.MAX_VALUE)));
    126     }
    127 
    128     private void horizontalGroupLayout(GroupLayout layout) {
    129         layout.setHorizontalGroup(layout
    130                 .createParallelGroup(GroupLayout.Alignment.LEADING)
    131                 .addGroup(
    132                         layout.createSequentialGroup()
    133                                 .addGap(21, 21, 21)
    134                                 .addGroup(
    135                                         layout.createParallelGroup(GroupLayout.Alignment.LEADING)
    136                                                 .addComponent(currentFontStyleDescJLabel)
    137                                                 .addComponent(descJlabel)
    138                                                 .addGroup(
    139                                                         layout.createSequentialGroup().addComponent(currentFontStyleJLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
    140                                                                 .addComponent(fontStyleJComboBox, GroupLayout.PREFERRED_SIZE, 195, GroupLayout.PREFERRED_SIZE)))
    141                                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    142                 .addGroup(layout.createSequentialGroup().addComponent(line, GroupLayout.PREFERRED_SIZE, 355, GroupLayout.PREFERRED_SIZE).addGap(0, 0, Short.MAX_VALUE)));
    143     }
    144 }

    /notepad/src/main/java/com/b510/notepad/ui/JUI.java

      1 /**
      2  * 
      3  */
      4 package com.b510.notepad.ui;
      5 
      6 import javax.swing.JDialog;
      7 import javax.swing.JFrame;
      8 import javax.swing.UIManager;
      9 import javax.swing.UnsupportedLookAndFeelException;
     10 
     11 import org.apache.log4j.Logger;
     12 import org.jvnet.substance.SubstanceLookAndFeel;
     13 import org.jvnet.substance.border.StandardBorderPainter;
     14 import org.jvnet.substance.button.ClassicButtonShaper;
     15 import org.jvnet.substance.painter.StandardGradientPainter;
     16 import org.jvnet.substance.skin.AutumnSkin;
     17 import org.jvnet.substance.skin.BusinessBlackSteelSkin;
     18 import org.jvnet.substance.skin.ChallengerDeepSkin;
     19 import org.jvnet.substance.skin.CremeCoffeeSkin;
     20 import org.jvnet.substance.skin.CremeSkin;
     21 import org.jvnet.substance.skin.EbonyHighContrastSkin;
     22 import org.jvnet.substance.skin.EmeraldDuskSkin;
     23 import org.jvnet.substance.skin.FieldOfWheatSkin;
     24 import org.jvnet.substance.skin.FindingNemoSkin;
     25 import org.jvnet.substance.skin.GreenMagicSkin;
     26 import org.jvnet.substance.skin.MagmaSkin;
     27 import org.jvnet.substance.skin.MangoSkin;
     28 import org.jvnet.substance.skin.MistSilverSkin;
     29 import org.jvnet.substance.skin.ModerateSkin;
     30 import org.jvnet.substance.skin.NebulaBrickWallSkin;
     31 import org.jvnet.substance.skin.NebulaSkin;
     32 import org.jvnet.substance.skin.OfficeBlue2007Skin;
     33 import org.jvnet.substance.skin.RavenGraphiteGlassSkin;
     34 import org.jvnet.substance.skin.RavenGraphiteSkin;
     35 import org.jvnet.substance.skin.RavenSkin;
     36 import org.jvnet.substance.skin.SaharaSkin;
     37 import org.jvnet.substance.skin.SubstanceAbstractSkin;
     38 import org.jvnet.substance.theme.SubstanceAquaTheme;
     39 import org.jvnet.substance.watermark.SubstanceBubblesWatermark;
     40 
     41 /**
     42  * The basic class extends <code>java.awt.JFrame</code>, there are three methods provided:<br>
     43  * <code>getSkin()</code> to change the frame skin.<br>
     44  * and there are 21 skins to provided. And the<br> 
     45  * default skin is <code>MagmaSkin</code> .You can change value to change <br>
     46  * skin if possible. and you should call the method <code>setJUI()</code> to refresh the page when you change the value.
     47  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
     48  * @created Nov 19, 2014
     49  */
     50 public class JUI extends JFrame {
     51 
     52     private static final long serialVersionUID = 1L;
     53     
     54     Logger log = Logger.getLogger(JUI.class);
     55 
     56     static SubstanceAbstractSkin skin;
     57     static int skinNum = 11;
     58     String title;
     59 
     60     /**
     61      * Total skins : 21. Get the skin according to the <code>skinNums</code> value, and the default skin is <code>MagmaSkin</code>
     62      * @param num <code>skinNum</code> value
     63      * @return
     64      */
     65     public SubstanceAbstractSkin getSkin(int num) {
     66         switch (num) {
     67         case 1:
     68             skin = new AutumnSkin();
     69             break;
     70         case 2:
     71             skin = new BusinessBlackSteelSkin();
     72             break;
     73         case 3:
     74             skin = new ChallengerDeepSkin();
     75             break;
     76         case 4:
     77             skin = new CremeCoffeeSkin();
     78             break;
     79         case 5:
     80             skin = new CremeSkin();
     81             break;
     82         case 6:
     83             skin = new EbonyHighContrastSkin();
     84             break;
     85         case 7:
     86             skin = new EmeraldDuskSkin();
     87             break;
     88         case 8:
     89             skin = new FieldOfWheatSkin();
     90             break;
     91         case 9:
     92             skin = new FindingNemoSkin();
     93             break;
     94         case 10:
     95             skin = new GreenMagicSkin();
     96             break;
     97         case 11:
     98             skin = new MagmaSkin();
     99             break;
    100         case 12:
    101             skin = new MangoSkin();
    102             break;
    103         case 13:
    104             skin = new MistSilverSkin();
    105             break;
    106         case 14:
    107             skin = new ModerateSkin();
    108             break;
    109         case 15:
    110             skin = new NebulaBrickWallSkin();
    111             break;
    112         case 16:
    113             skin = new NebulaSkin();
    114             break;
    115         case 17:
    116             skin = new OfficeBlue2007Skin();
    117             break;
    118         case 18:
    119             skin = new RavenGraphiteGlassSkin();
    120             break;
    121         case 19:
    122             skin = new RavenGraphiteSkin();
    123             break;
    124         case 20:
    125             skin = new RavenSkin();
    126             break;
    127         case 21:
    128             skin = new SaharaSkin();
    129             break;
    130         default:
    131             skin = new FieldOfWheatSkin();
    132             break;
    133         }
    134         return skin;
    135     }
    136 
    137     /**
    138      * Set the page UI. including the theme, skin, watermark.etc.
    139      */
    140     public void setJUI() {
    141         try {
    142             UIManager.setLookAndFeel(new SubstanceLookAndFeel());
    143             JFrame.setDefaultLookAndFeelDecorated(true);
    144             JDialog.setDefaultLookAndFeelDecorated(true);
    145             SubstanceLookAndFeel.setCurrentTheme(new SubstanceAquaTheme());
    146             SubstanceLookAndFeel.setSkin(getSkin(skinNum));
    147             SubstanceLookAndFeel.setCurrentButtonShaper(new ClassicButtonShaper());
    148             SubstanceLookAndFeel.setCurrentWatermark(new SubstanceBubblesWatermark());
    149             SubstanceLookAndFeel.setCurrentBorderPainter(new StandardBorderPainter());
    150             SubstanceLookAndFeel.setCurrentGradientPainter(new StandardGradientPainter());
    151         } catch (UnsupportedLookAndFeelException e1) {
    152             e1.printStackTrace();
    153         }
    154     }
    155 
    156     public JUI(String title) {
    157         this.title = title;
    158         setJUI();
    159     }
    160 
    161     public void init() {
    162 
    163     }
    164 }

    /notepad/src/main/java/com/b510/notepad/ui/MainUI.java

      1 /**
      2  * 
      3  */
      4 package com.b510.notepad.ui;
      5 
      6 import java.awt.Font;
      7 import java.awt.Rectangle;
      8 import java.awt.event.ActionEvent;
      9 import java.awt.event.InputEvent;
     10 import java.awt.event.MouseEvent;
     11 import java.awt.event.MouseMotionListener;
     12 import java.awt.event.WindowAdapter;
     13 import java.awt.event.WindowEvent;
     14 
     15 import javax.swing.JMenu;
     16 import javax.swing.JMenuBar;
     17 import javax.swing.JMenuItem;
     18 import javax.swing.JScrollPane;
     19 import javax.swing.JSeparator;
     20 import javax.swing.JTextArea;
     21 import javax.swing.KeyStroke;
     22 import javax.swing.event.CaretEvent;
     23 import javax.swing.event.CaretListener;
     24 import javax.swing.event.UndoableEditEvent;
     25 import javax.swing.event.UndoableEditListener;
     26 import javax.swing.undo.UndoManager;
     27 
     28 import org.apache.log4j.Logger;
     29 
     30 import com.b510.notepad.common.Common;
     31 import com.b510.notepad.util.EditMenuUtil;
     32 import com.b510.notepad.util.FileMenuUtil;
     33 import com.b510.notepad.util.FormatMenuUtil;
     34 import com.b510.notepad.util.HelpMenuUtil;
     35 import com.b510.notepad.util.NotepadUtil;
     36 import com.b510.notepad.util.ViewMenuUtil;
     37 
     38 /**
     39  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
     40  * @created Nov 19, 2014
     41  */
     42 public class MainUI extends NotepadUI {
     43 
     44     private static final long serialVersionUID = 1L;
     45 
     46     static Logger log = Logger.getLogger(MainUI.class);
     47 
     48     JMenuBar menuBar;
     49     JSeparator line;
     50     // Menus
     51     JMenu file, edit, format, view, help, viewHelp, source;
     52     // File Items
     53     JMenuItem news, open, save, saveAs, properties, exit;
     54     // Edit Items
     55     JMenuItem undo, copy, paste, cut, find, findNext, replace, selectAll, timeDate;
     56     // Format Items
     57     JMenuItem wordWrap, resetFont, font, fontSize, fontStyle;
     58     // View Items
     59     JMenuItem skin;
     60     // Help Items
     61     JMenuItem about, homePage, skinPage, sourceCode, sourceCodeDownload, api;
     62     // textArea
     63     public static JTextArea textArea;
     64     // textArea font
     65     Font textAreaFont;
     66     // textArea scroll
     67     JScrollPane textAreaScroll;
     68     
     69     public static UndoManager undoManager;
     70     
     71     public static String filePath = Common.EMPTY;
     72     boolean saved = false;
     73     public static boolean lineWrap = true;
     74     // Default position is (0, 0)
     75     public static int pointX = 0;
     76     public static int pointY = 0;
     77     public static String savedText = Common.EMPTY;
     78     public static int fontNum = Common.FONT_NUM;
     79     public static int fontSizeNum = Common.FONT_SIZE_NUM;
     80     public static int fontStyleNum = Common.FONT_STYLE_NUM;
     81     public static String findWhat = Common.EMPTY;    
     82     
     83     private void setMainUIXY() {
     84         pointX = getMainUIX();
     85         pointY = getMainUIY();
     86     }
     87     
     88     private int getMainUIY() {
     89         return (int) getLocation().getY();
     90     }
     91 
     92     private int getMainUIX() {
     93         return (int) getLocation().getX();
     94     }
     95 
     96     public MainUI(String title) {
     97         super(title);
     98         setTitle(title);
     99     }
    100 
    101     public void init() {
    102         initMenu();
    103         initTextArea();
    104         this.setResizable(true);
    105         this.setBounds(new Rectangle(150, 100, 800, 550));
    106         this.setVisible(true);
    107         addWindowListener(new WindowAdapter() {
    108             public void windowClosing(WindowEvent e) {
    109                 FileMenuUtil file = new FileMenuUtil(Common.EMPTY);
    110                 file.exit(MainUI.this);
    111             }
    112         });
    113         
    114         setMainUIXY();
    115     }
    116     
    117     private void initMenu() {
    118         menuBar();
    119         menuFile();
    120         menuEdit();
    121         menuFormat();
    122         menuView();
    123         menuHelp();
    124         setJMenuBar(menuBar);
    125         setDisabledMenuAtCreating(false);
    126     }
    127 
    128     private void menuBar() {
    129         menuBar = new JMenuBar();
    130     }
    131 
    132     private void menuFile() {
    133         file = new JMenu(Common.FILE);
    134 
    135         news = new JMenuItem(Common.NEW);
    136         news.addActionListener(this);
    137         news.setAccelerator(KeyStroke.getKeyStroke(Common.N, InputEvent.CTRL_MASK));
    138         file.add(news);
    139 
    140         open = new JMenuItem(Common.OPEN);
    141         open.addActionListener(this);
    142         open.setAccelerator(KeyStroke.getKeyStroke(Common.O, InputEvent.CTRL_MASK));
    143         file.add(open);
    144 
    145         save = new JMenuItem(Common.SAVE);
    146         save.addActionListener(this);
    147         save.setAccelerator(KeyStroke.getKeyStroke(Common.S, InputEvent.CTRL_MASK));
    148         file.add(save);
    149 
    150         saveAs = new JMenuItem(Common.SAVE_AS);
    151         saveAs.addActionListener(this);
    152         saveAs.setAccelerator(KeyStroke.getKeyStroke(Common.S, InputEvent.CTRL_MASK + InputEvent.SHIFT_MASK));
    153         file.add(saveAs);
    154 
    155         line = new JSeparator();
    156         file.add(line);
    157 
    158         properties = new JMenuItem(Common.PROPERTIES);
    159         properties.addActionListener(this);
    160         file.add(properties);
    161 
    162         line = new JSeparator();
    163         file.add(line);
    164 
    165         exit = new JMenuItem(Common.EXIT);
    166         exit.addActionListener(this);
    167         file.add(exit);
    168 
    169         menuBar.add(file);
    170     }
    171 
    172     private void menuEdit() {
    173         edit = new JMenu(Common.EDIT);
    174 
    175         undo = new JMenuItem(Common.UNDO);
    176         undo.addActionListener(this);
    177         undo.setAccelerator(KeyStroke.getKeyStroke(Common.Z, InputEvent.CTRL_MASK));
    178         edit.add(undo);
    179 
    180         line = new JSeparator();
    181         edit.add(line);
    182 
    183         cut = new JMenuItem(Common.CUT);
    184         cut.addActionListener(this);
    185         cut.setAccelerator(KeyStroke.getKeyStroke(Common.X, InputEvent.CTRL_MASK));
    186         edit.add(cut);
    187         
    188         copy = new JMenuItem(Common.COPY);
    189         copy.addActionListener(this);
    190         copy.setAccelerator(KeyStroke.getKeyStroke(Common.C, InputEvent.CTRL_MASK));
    191         edit.add(copy);
    192 
    193         paste = new JMenuItem(Common.PASTE);
    194         paste.addActionListener(this);
    195         paste.setAccelerator(KeyStroke.getKeyStroke(Common.V, InputEvent.CTRL_MASK));
    196         edit.add(paste);
    197 
    198         line = new JSeparator();
    199         edit.add(line);
    200 
    201         find = new JMenuItem(Common.FIND);
    202         find.addActionListener(this);
    203         find.setAccelerator(KeyStroke.getKeyStroke(Common.F, InputEvent.CTRL_MASK));
    204         edit.add(find);
    205 
    206         findNext = new JMenuItem(Common.FIND_NEXT);
    207         findNext.addActionListener(this);
    208         findNext.setAccelerator(KeyStroke.getKeyStroke(Common.F, InputEvent.CTRL_MASK + InputEvent.SHIFT_MASK));
    209         edit.add(findNext);
    210 
    211         replace = new JMenuItem(Common.REPLACE);
    212         replace.addActionListener(this);
    213         replace.setAccelerator(KeyStroke.getKeyStroke(Common.H, InputEvent.CTRL_MASK));
    214         edit.add(replace);
    215 
    216         line = new JSeparator();
    217         edit.add(line);
    218 
    219         selectAll = new JMenuItem(Common.SELECT_ALL);
    220         selectAll.addActionListener(this);
    221         selectAll.setAccelerator(KeyStroke.getKeyStroke(Common.A, InputEvent.CTRL_MASK));
    222         edit.add(selectAll);
    223 
    224         timeDate = new JMenuItem(Common.TIME_DATE);
    225         timeDate.addActionListener(this);
    226         timeDate.setAccelerator(KeyStroke.getKeyStroke(Common.T, InputEvent.CTRL_MASK));
    227         edit.add(timeDate);
    228 
    229         menuBar.add(edit);
    230     }
    231 
    232     private void menuFormat() {
    233         format = new JMenu(Common.FORMAT);
    234 
    235         wordWrap = new JMenuItem(Common.WORD_WRAP);
    236         wordWrap.addActionListener(this);
    237         wordWrap.setAccelerator(KeyStroke.getKeyStroke(Common.W, InputEvent.CTRL_MASK));
    238         format.add(wordWrap);
    239         
    240         resetFont = new JMenuItem(Common.RESET_FONT);
    241         resetFont.addActionListener(this);
    242         format.add(resetFont);
    243         
    244         line = new JSeparator();
    245         format.add(line);
    246 
    247         font = new JMenuItem(Common.FONT);
    248         font.addActionListener(this);
    249         format.add(font);
    250 
    251         fontSize = new JMenuItem(Common.FONT_SIZE_TITLE);
    252         fontSize.addActionListener(this);
    253         format.add(fontSize);
    254         
    255         fontStyle = new JMenuItem(Common.FONT_STYLE);
    256         fontStyle.addActionListener(this);
    257         format.add(fontStyle);
    258 
    259         menuBar.add(format);
    260     }
    261 
    262     private void menuView() {
    263         view = new JMenu(Common.VIEW);
    264 
    265         skin = new JMenuItem(Common.SKIN);
    266         skin.addActionListener(this);
    267         view.add(skin);
    268 
    269         menuBar.add(view);
    270     }
    271 
    272     private void menuHelp() {
    273         help = new JMenu(Common.Help);
    274 
    275         viewHelp = new JMenu(Common.VIEW_HELP);
    276         help.add(viewHelp);
    277         
    278         homePage = new JMenuItem(Common.NOTEPAD_HOME_PAGE);
    279         homePage.addActionListener(this);
    280         viewHelp.add(homePage);
    281         
    282         skinPage = new JMenuItem(Common.NOTEPAD_SKINS);
    283         skinPage.addActionListener(this);
    284         viewHelp.add(skinPage);
    285 
    286         source = new JMenu(Common.SOURCE);
    287         viewHelp.add(source);
    288         
    289         sourceCode = new JMenuItem(Common.SOURCE_CODE);
    290         sourceCode.addActionListener(this);
    291         source.add(sourceCode);
    292         
    293         sourceCodeDownload = new JMenuItem(Common.SOURCE_CODE_DOWNLOAD);
    294         sourceCodeDownload.addActionListener(this);
    295         source.add(sourceCodeDownload);
    296         
    297         api = new JMenuItem(Common.NOTEPAD_API);
    298         api.addActionListener(this);
    299         viewHelp.add(api);
    300 
    301         line = new JSeparator();
    302         help.add(line);
    303 
    304         about = new JMenuItem(Common.ABOUT_NOTEPAD);
    305         about.addActionListener(this);
    306         help.add(about);
    307 
    308         menuBar.add(help);
    309     }
    310 
    311     private void initUndoManager(){
    312         undoManager = new UndoManager();
    313     }
    314     
    315     private void setDisabledMenuAtCreating(boolean b){
    316         undo.setEnabled(b);
    317         cut.setEnabled(b);
    318         copy.setEnabled(b);
    319         find.setEnabled(b);    
    320         findNext.setEnabled(b);
    321     }
    322     
    323     private void setDisabledMenuAtSelecting(boolean b){
    324         cut.setEnabled(b);
    325         copy.setEnabled(b);
    326     }
    327     
    328     private void initTextArea() {
    329         textArea = new JTextArea(Common.EMPTY);
    330         textArea.setLineWrap(true);
    331         lineWrap = true;
    332         textAreaFont = new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE);
    333         textArea.setFont(textAreaFont);
    334         initUndoManager();
    335         // add Undoable edit listener
    336         textArea.getDocument().addUndoableEditListener(new UndoableEditListener() {
    337             public void undoableEditHappened(UndoableEditEvent e) {
    338                 undoManager.addEdit(e.getEdit());
    339             }
    340         });
    341         // add caret listener
    342         textArea.addCaretListener(new CaretListener() {
    343             public void caretUpdate(CaretEvent e) {
    344                 if (null != savedText && null != textArea.getText()) {
    345                     if (savedText.equals(textArea.getText())) {
    346                         setSaved(true);
    347                     } else {
    348                         setSaved(false);
    349                     }
    350                 }
    351                 textArea.setFocusable(true);
    352                 setDisabledMenuAtCreating(true);
    353             }
    354         });
    355         // add mouse motion listener
    356         textArea.addMouseMotionListener(new MouseMotionListener() {
    357             public void mouseMoved(MouseEvent e) {
    358                 isSelectedText();
    359             }
    360             
    361             public void mouseDragged(MouseEvent e) {
    362                 isSelectedText();
    363             }
    364             
    365         });
    366         textAreaScroll = new JScrollPane(textArea);
    367         this.add(textAreaScroll);
    368     }
    369     
    370     private void isSelectedText() {
    371         textArea.setFocusable(true);
    372         String selectText = textArea.getSelectedText();
    373         if(null != selectText){
    374             setDisabledMenuAtSelecting(true);
    375         }else{
    376             setDisabledMenuAtSelecting(false);
    377         }
    378     }
    379 
    380     public void actionPerformed(ActionEvent e) {
    381         actionForFileItem(e);
    382         actionForEditItem(e);
    383         actionForFormatItem(e);
    384         actionForViewItem(e);
    385         actionForHelpItem(e);
    386     }
    387 
    388     private void actionForFileItem(ActionEvent e) {
    389         if (e.getSource() == news) {
    390             FileMenuUtil.news(MainUI.this);
    391         } else if (e.getSource() == open) {
    392             FileMenuUtil file = new FileMenuUtil(Common.EMPTY);
    393             file.open(MainUI.this);
    394         } else if (e.getSource() == save) {
    395             FileMenuUtil.save(MainUI.this);
    396         } else if (e.getSource() == saveAs) {
    397             FileMenuUtil.saveAs(MainUI.this);
    398         } else if (e.getSource() == properties) {
    399             FileMenuUtil file = new FileMenuUtil(Common.EMPTY);
    400             file.readProperties(MainUI.this);
    401         } else if (e.getSource() == exit) {
    402             FileMenuUtil file = new FileMenuUtil(Common.EMPTY);
    403             file.exit(MainUI.this);
    404         }
    405     }
    406 
    407     private void actionForEditItem(ActionEvent e) {
    408         if (e.getSource() == undo) {
    409             EditMenuUtil.undo();
    410         } else if (e.getSource() == copy) {
    411             EditMenuUtil.copy();
    412         } else if (e.getSource() == paste) {
    413             EditMenuUtil.paste();
    414         } else if (e.getSource() == cut) {
    415             EditMenuUtil.cut();
    416         } else if (e.getSource() == find) {
    417             setMainUIXY();
    418             EditMenuUtil edit = new EditMenuUtil(Common.EMPTY);
    419             edit.find();
    420         } else if (e.getSource() == findNext) {
    421             EditMenuUtil edit = new EditMenuUtil(Common.EMPTY);
    422             edit.findNext();
    423         } else if (e.getSource() == replace) {
    424             setMainUIXY();
    425             EditMenuUtil edit = new EditMenuUtil(Common.EMPTY);
    426             edit.replace();
    427         } else if (e.getSource() == selectAll) {
    428             EditMenuUtil.selectAll();
    429         } else if (e.getSource() == timeDate) {
    430             EditMenuUtil.timeDate();
    431         }
    432     }
    433 
    434     private void actionForFormatItem(ActionEvent e) {
    435         if (e.getSource() == wordWrap) {
    436             FormatMenuUtil.wordWrap();
    437         } else if(e.getSource() == resetFont){
    438             FormatMenuUtil format = new FormatMenuUtil(Common.EMPTY);
    439             format.resetFont(MainUI.this);
    440         }else if (e.getSource() == font) {
    441             setMainUIXY();
    442             FormatMenuUtil format = new FormatMenuUtil(Common.EMPTY);
    443             format.font(MainUI.this);
    444         } else if (e.getSource() == fontSize) {
    445             setMainUIXY();
    446             FormatMenuUtil format = new FormatMenuUtil(Common.EMPTY);
    447             format.fontSize(MainUI.this);
    448         }else if(e.getSource() == fontStyle){
    449             setMainUIXY();
    450             FormatMenuUtil format = new FormatMenuUtil(Common.EMPTY);
    451             format.fontStyle(MainUI.this);
    452         }
    453     }
    454 
    455     private void actionForViewItem(ActionEvent e) {
    456         if (e.getSource() == skin) {
    457             setMainUIXY();
    458             ViewMenuUtil view = new ViewMenuUtil(Common.EMPTY);
    459             view.skin(MainUI.this);
    460         }
    461     }
    462 
    463     private void actionForHelpItem(ActionEvent e) {
    464         if (e.getSource() == homePage) {
    465             log.debug(Common.NOTEPAD_HOME_PAGE);
    466             NotepadUtil.accessURL(Common.NOTEPAD_PUBLISHED_PAGE);
    467         } else if(e.getSource() == skinPage){
    468             log.debug(Common.NOTEPAD_SKINS);
    469             NotepadUtil.accessURL(Common.NOTEPAD_SUBSTANCE_SKINS_PAGE);
    470         }else if(e.getSource() == sourceCode){
    471             log.debug(Common.SOURCE_CODE);
    472             NotepadUtil.accessURL(Common.NOTEPAD_PUBLISHED_BOOKMARK_PAGE + Common.SOURCE_CODE_BOOKMARK);
    473         }else if(e.getSource() == sourceCodeDownload){
    474             log.debug(Common.SOURCE_CODE_DOWNLOAD);
    475             NotepadUtil.accessURL(Common.NOTEPAD_PUBLISHED_BOOKMARK_PAGE + Common.SOURCE_CODE_DOWNLOAD_BOOKMARK);
    476         }else if(e.getSource() == api){
    477             log.debug(Common.NOTEPAD_API);
    478             NotepadUtil.accessURL(Common.NOTEPAD_PUBLISHED_BOOKMARK_PAGE + Common.NOTEPAD_API_BOOKMARK);
    479         }else if (e.getSource() == about) {
    480             setMainUIXY();
    481             HelpMenuUtil help = new HelpMenuUtil(Common.EMPTY);
    482             help.about(MainUI.this);
    483         }
    484     }
    485 
    486     public boolean isSaved() {
    487         return saved;
    488     }
    489 
    490     public void setSaved(boolean saved) {
    491         this.saved = saved;
    492     }
    493 }

    /notepad/src/main/java/com/b510/notepad/ui/NotepadUI.java

     1 /**
     2  * 
     3  */
     4 package com.b510.notepad.ui;
     5 
     6 import java.awt.event.ActionEvent;
     7 import java.awt.event.ActionListener;
     8 
     9 /**
    10  * The <code>NotepadUI</code> class extends <code>JUI</code> and implements
    11  * <code>ActionListener</code>.
    12  * 
    13  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
    14  * @created Nov 19, 2014
    15  */
    16 public class NotepadUI extends JUI implements ActionListener {
    17     
    18     private static final long serialVersionUID = 1L;
    19 
    20     private MainUI mainUI;
    21 
    22     public NotepadUI(String title) {
    23         super(title);
    24     }
    25 
    26     public void init() {
    27         if (null == mainUI) {
    28             mainUI = new MainUI(title);
    29         }
    30         mainUI.init();
    31     }
    32 
    33     public void actionPerformed(ActionEvent e) {
    34     }
    35 }

    /notepad/src/main/java/com/b510/notepad/ui/ReplaceManagerUI.java

      1 package com.b510.notepad.ui;
      2 
      3 import java.awt.Dimension;
      4 import java.awt.event.ActionEvent;
      5 import java.awt.event.WindowAdapter;
      6 import java.awt.event.WindowEvent;
      7 
      8 import javax.swing.GroupLayout;
      9 import javax.swing.JButton;
     10 import javax.swing.JCheckBox;
     11 import javax.swing.JLabel;
     12 import javax.swing.JOptionPane;
     13 import javax.swing.JPanel;
     14 import javax.swing.JTextField;
     15 import javax.swing.LayoutStyle;
     16 
     17 import org.apache.log4j.Logger;
     18 
     19 import com.b510.notepad.common.Common;
     20 import com.b510.notepad.util.EditMenuUtil;
     21 
     22 public class ReplaceManagerUI extends MainUI {
     23     private static final long serialVersionUID = 1L;
     24     
     25     static Logger log = Logger.getLogger(ReplaceManagerUI.class);
     26 
     27     private JPanel bGJPanel;
     28     private JButton cancelJButton;
     29     private JCheckBox caseSensitiveJCheckBox;
     30     private JButton findNextJButton;
     31     private JLabel findWhatJLabel;
     32     private JTextField findWordJTextField;
     33     private JButton replaceAllJButton;
     34     private JLabel replaceToJLabel;
     35     private JTextField replaceToJTextField;
     36     private JButton replaceJButton;
     37 
     38     public static boolean isCaseSensitive = false;
     39 
     40     private EditMenuUtil edit;
     41     public static String replaceWord = Common.EMPTY;
     42     public static int replaceCount = 0;
     43 
     44     public ReplaceManagerUI(String title) {
     45         super(title);
     46         initComponents();
     47 
     48         initSelf();
     49         setAlwaysOnTop(true);
     50         addWindowListener(new WindowAdapter() {
     51             @Override
     52             public void windowClosing(WindowEvent e) {
     53                 distoryReplaceManagerUI();
     54             }
     55         });
     56     }
     57 
     58     public void initSelf() {
     59         this.setVisible(true);
     60         setResizable(false);
     61         this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150);
     62     }
     63 
     64     /**
     65      * If not necessary, please do not change the order.
     66      */
     67     private void initComponents() {
     68         initElement();
     69         initLabel();
     70         initFindWordTextField();
     71         initReplaceToTextField();
     72         initCaseSensitiveCheckBox();
     73         initFindNextButton();
     74         initReplaceButton();
     75         initReplaceAllButton();
     76         initCancleButton();
     77         initLayout();
     78     }
     79 
     80     private void initElement() {
     81         bGJPanel = new JPanel();
     82         findWhatJLabel = new JLabel();
     83         replaceToJLabel = new JLabel();
     84         findWordJTextField = new JTextField();
     85         replaceToJTextField = new JTextField();
     86         caseSensitiveJCheckBox = new JCheckBox();
     87         findNextJButton = new JButton();
     88         replaceJButton = new JButton();
     89         replaceAllJButton = new JButton();
     90         cancelJButton = new JButton();
     91     }
     92 
     93     private void initLabel() {
     94         findWhatJLabel.setText(Common.FIND_WHAT);
     95         replaceToJLabel.setText(Common.REPLACE_TO);
     96     }
     97 
     98     private void initFindWordTextField() {
     99         if (null == textArea.getSelectedText() || Common.EMPTY.equals(textArea.getSelectedText().trim())) {
    100             findWordJTextField.setText(findWhat);
    101         } else if(null != textArea.getSelectedText() && !Common.EMPTY.equals(textArea.getSelectedText().trim())){
    102             findWordJTextField.setText(textArea.getSelectedText());
    103         }else{
    104             findWordJTextField.setText(findWhat);
    105         }
    106     }
    107 
    108     private void initReplaceToTextField() {
    109         replaceToJTextField.setText(Common.EMPTY);
    110     }
    111 
    112     private void initCaseSensitiveCheckBox() {
    113         caseSensitiveJCheckBox.setText(Common.CASE_SENSITIVE);
    114         caseSensitiveJCheckBox.addActionListener(this);
    115     }
    116 
    117     private void initFindNextButton() {
    118         findNextJButton.setText(Common.FIND_NEXT);
    119         findNextJButton.setMaximumSize(new Dimension(99, 23));
    120         findNextJButton.setMinimumSize(new Dimension(99, 23));
    121         findNextJButton.setPreferredSize(new Dimension(99, 23));
    122         findNextJButton.addActionListener(this);
    123     }
    124 
    125     private void initReplaceButton() {
    126         replaceJButton.setText(Common.REPLACE);
    127         replaceJButton.setMaximumSize(new Dimension(99, 23));
    128         replaceJButton.setMinimumSize(new Dimension(99, 23));
    129         replaceJButton.setPreferredSize(new Dimension(99, 23));
    130         replaceJButton.addActionListener(this);
    131     }
    132 
    133     private void initReplaceAllButton() {
    134         replaceAllJButton.setText(Common.REPLACE_ALL);
    135         replaceAllJButton.addActionListener(this);
    136     }
    137 
    138     private void initCancleButton() {
    139         cancelJButton.setText(Common.CANCEL);
    140         cancelJButton.setMaximumSize(new Dimension(99, 23));
    141         cancelJButton.setMinimumSize(new Dimension(99, 23));
    142         cancelJButton.setPreferredSize(new Dimension(99, 23));
    143         cancelJButton.addActionListener(this);
    144     }
    145 
    146     public void actionPerformed(ActionEvent e) {
    147         if (e.getSource() == findNextJButton) {
    148             if(!isEmptyForFindWordJTextField()){
    149                 edit.findNext();
    150             }else{
    151                 typingFindWhat();
    152             }
    153         } else if (e.getSource() == replaceAllJButton) {
    154             if(!isEmptyForFindWordJTextField()){
    155                 edit.replaceAllOperation();
    156             }else{
    157                 typingFindWhat();
    158             }
    159         } else if (e.getSource() == replaceJButton) {
    160             if(!isEmptyForFindWordJTextField()){
    161                 edit.replaceOperation();
    162             }else{
    163                 typingFindWhat();
    164             }
    165         } else if (e.getSource() == cancelJButton) {
    166             distoryReplaceManagerUI();
    167         } else if (e.getSource() == caseSensitiveJCheckBox) {
    168             caseSensitiveSwitch();
    169         }
    170     }
    171 
    172     private void typingFindWhat() {
    173         JOptionPane.showMessageDialog(ReplaceManagerUI.this, Common.WHAT_DO_YOU_WANT_TO_FIND, Common.NOTEPAD, JOptionPane.INFORMATION_MESSAGE);
    174         findWordJTextField.setFocusable(true);
    175     }
    176     
    177     private boolean isEmptyForFindWordJTextField(){
    178         findWhat = findWordJTextField.getText();
    179         replaceWord = replaceToJTextField.getText();
    180         if(!Common.EMPTY.equals(findWordJTextField.getText())){
    181             return false;
    182         }else{
    183             return true;
    184         }
    185     }
    186 
    187     /**
    188      * Operation for Cancel button
    189      */
    190     private void distoryReplaceManagerUI() {
    191         ReplaceManagerUI.this.setVisible(false);
    192         edit.distoryReplaceeManagerUI();
    193     }
    194 
    195     /**
    196      * Case Sensitive Switch
    197      */
    198     private void caseSensitiveSwitch() {
    199         if (null == caseSensitiveJCheckBox.getSelectedObjects()) {
    200             isCaseSensitive = false;
    201         } else {
    202             isCaseSensitive = true;
    203         }
    204         log.debug(isCaseSensitive);
    205     }
    206 
    207     public void setEditMenuUtil(EditMenuUtil editMenuUtil) {
    208         this.edit = editMenuUtil;
    209     }
    210 
    211     /**
    212      * If not necessary, please do not change.
    213      */
    214     private void initLayout() {
    215         GroupLayout bGJPanelLayout = new GroupLayout(bGJPanel);
    216         bGJPanel.setLayout(bGJPanelLayout);
    217         bGJPanelLayout.setHorizontalGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(
    218                 bGJPanelLayout.createSequentialGroup().addContainerGap().addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false).addGroup(bGJPanelLayout.createSequentialGroup().addComponent(findWhatJLabel).addGap(18, 18, 18).addComponent(findWordJTextField, GroupLayout.PREFERRED_SIZE, 227, GroupLayout.PREFERRED_SIZE)).addGroup(bGJPanelLayout.createSequentialGroup().addComponent(replaceToJLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(replaceToJTextField))).addComponent(caseSensitiveJCheckBox)).addGap(18, 18, 18).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(findNextJButton, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(replaceJButton, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(replaceAllJButton, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(cancelJButton, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addContainerGap()));
    219         bGJPanelLayout.setVerticalGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(
    220                 bGJPanelLayout.createSequentialGroup().addGap(17, 17, 17).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(bGJPanelLayout.createSequentialGroup().addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(findWhatJLabel).addComponent(findWordJTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addGap(12, 12, 12).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(replaceToJLabel).addComponent(replaceToJTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addComponent(replaceJButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))).addComponent(findNextJButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(replaceAllJButton)
    221                         .addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(bGJPanelLayout.createSequentialGroup().addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(cancelJButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addGroup(bGJPanelLayout.createSequentialGroup().addGap(2, 2, 2).addComponent(caseSensitiveJCheckBox))).addContainerGap(8, Short.MAX_VALUE)));
    222 
    223         GroupLayout layout = new GroupLayout(getContentPane());
    224         getContentPane().setLayout(layout);
    225         layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(bGJPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
    226         layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(bGJPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addContainerGap()));
    227 
    228         pack();
    229     }
    230 }

    /notepad/src/main/java/com/b510/notepad/ui/SkinManagerUI.java

      1 package com.b510.notepad.ui;
      2 
      3 import java.awt.event.ActionEvent;
      4 import java.awt.event.MouseEvent;
      5 import java.awt.event.MouseListener;
      6 import java.awt.event.WindowAdapter;
      7 import java.awt.event.WindowEvent;
      8 import java.io.IOException;
      9 
     10 import javax.swing.DefaultComboBoxModel;
     11 import javax.swing.GroupLayout;
     12 import javax.swing.JComboBox;
     13 import javax.swing.JLabel;
     14 import javax.swing.JSeparator;
     15 import javax.swing.LayoutStyle;
     16 
     17 import com.b510.notepad.common.Common;
     18 import com.b510.notepad.util.ViewMenuUtil;
     19 
     20 /**
     21  * @author Hongten
     22  * @created Nov 20, 2014
     23  */
     24 public class SkinManagerUI extends MainUI {
     25     private static final long serialVersionUID = 1L;
     26 
     27     private JLabel currentSkinDescJLabel;
     28     private JLabel currentSkinJLabel;
     29     private JLabel descJlabel;
     30     private JSeparator line;
     31     private JComboBox<String> sinkJComboBox;
     32 
     33     private ViewMenuUtil view;
     34 
     35     public String[][] skins = { { "AutumnSkin", "1", "<html><a href=''>What is the AutumnSkin skin?</a></html>" }, { "BusinessBlackSteelSkin", "2", "<html><a href=''>What is the BusinessBlackSteelSkin skin?</a></html>" }, { "ChallengerDeepSkin", "3", "<html><a href=''>What is the ChallengerDeepSkin skin?</a></html>" }, { "CremeCoffeeSkin", "4", "<html><a href=''>What is the CremeCoffeeSkin skin?</a></html>" }, { "CremeSkin", "5", "<html><a href=''>What is the CremeSkin skin?</a></html>" }, { "EbonyHighContrastSkin", "6", "<html><a href=''>What is the EbonyHighContrastSkin skin?</a></html>" }, { "EmeraldDuskSkin", "7", "<html><a href=''>What is the EmeraldDuskSkin skin?</a></html>" }, { "FieldOfWheatSkin", "8", "<html><a href=''>What is the FieldOfWheatSkin skin?</a></html>" }, { "FindingNemoSkin", "9", "<html><a href=''>What is the FindingNemoSkin skin?</a></html>" }, { "GreenMagicSkin", "10", "<html><a href=''>What is the GreenMagicSkin skin?</a></html>" }, { "MagmaSkin", "11", "<html><a href=''>What is the MagmaSkin skin?</a></html>" }, { "MangoSkin", "12", "<html><a href=''>What is the MangoSkin skin?</a></html>" }, { "MistSilverSkin", "13", "<html><a href=''>What is the MistSilverSkin skin?</a></html>" },
     36             { "ModerateSkin", "14", "<html><a href=''>What is the ModerateSkin skin?</a></html>" }, { "NebulaBrickWallSkin", "15", "<html><a href=''>What is the NebulaBrickWallSkin skin?</a></html>" }, { "NebulaSkin", "16", "<html><a href=''>What is the NebulaSkin skin?</a></html>" }, { "OfficeBlue2007Skin", "17", "<html><a href=''>What is the OfficeBlue2007Skin skin?</a></html>" }, { "RavenGraphiteGlassSkin", "18", "<html><a href=''>What is the RavenGraphiteGlassSkin skin?</a></html>" }, { "RavenGraphiteSkin", "19", "<html><a href=''>What is the RavenGraphiteSkin skin?</a></html>" }, { "RavenSkin", "20", "<html><a href=''>What is the RavenSkin skin?</a></html>" }, { "SaharaSkin", "21", "<html><a href=''>What is the SaharaSkin skin?</a></html>" } };
     37 
     38     private String[] skinNames() {
     39         String[] os = new String[skins.length];
     40         for (int i = 0; i < skins.length; i++) {
     41             os[i] = skins[i][0];
     42         }
     43         return os;
     44     }
     45 
     46     private Object[] getSkinDetails(Object obj) {
     47         for (int i = 0; i < skins.length; i++) {
     48             if (skins[i][0].equals(obj)) {
     49                 Object[] os = new Object[skins[i].length - 1];
     50                 for (int j = 0; j < os.length; j++) {
     51                     os[j] = skins[i][j + 1];
     52                 }
     53                 return os;
     54             }
     55         }
     56         return new Object[] {};
     57     }
     58 
     59     public SkinManagerUI(String title) {
     60         super(title);
     61         initComponents();
     62 
     63         initSelf();
     64         setAlwaysOnTop(true);
     65         addWindowListener(new WindowAdapter() {
     66             @Override
     67             public void windowClosing(WindowEvent e) {
     68                 SkinManagerUI.this.setVisible(false);
     69                 view.distorySkinManagerUI();
     70             }
     71         });
     72     }
     73 
     74     public void initSelf() {
     75         this.setVisible(true);
     76         setResizable(false);
     77         this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150);
     78     }
     79 
     80     private void initComponents() {
     81         initElement();
     82         currentSkinJLabel.setText(Common.CURRENT_SINK);
     83 
     84         String[] skinNames = skinNames();
     85         sinkJComboBox.setModel(new DefaultComboBoxModel<String>(skinNames));
     86         sinkJComboBox.setSelectedIndex(skinNum - 1);
     87         sinkJComboBox.addActionListener(this);
     88 
     89         descJlabel.setText(Common.DESCRIPTION_WITH_COLOR);
     90 
     91         currentSkinDescJLabel.setText(skins[skinNum][2]);
     92         currentSkinDescJLabel.addMouseListener(new MouseListener() {
     93             public void mouseClicked(MouseEvent e) {
     94                 try {
     95                     Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + Common.SUBSTANCE_SKINS_PAGE + sinkJComboBox.getSelectedItem());
     96                 } catch (IOException e1) {
     97                     e1.printStackTrace();
     98                 }
     99             }
    100 
    101             public void mousePressed(MouseEvent e) {
    102 
    103             }
    104 
    105             public void mouseReleased(MouseEvent e) {
    106 
    107             }
    108 
    109             public void mouseEntered(MouseEvent e) {
    110 
    111             }
    112 
    113             public void mouseExited(MouseEvent e) {
    114 
    115             }
    116         });
    117         pageGourpLayout();
    118     }
    119 
    120     private void initElement() {
    121         currentSkinJLabel = new JLabel();
    122         sinkJComboBox = new JComboBox<String>();
    123         descJlabel = new JLabel();
    124         currentSkinDescJLabel = new JLabel();
    125         line = new JSeparator();
    126     }
    127 
    128     @Override
    129     public void actionPerformed(ActionEvent e) {
    130         if (e.getSource() == sinkJComboBox) {
    131             updateSkin();
    132         }
    133     }
    134 
    135     public synchronized void updateSkin() {
    136         Object[] os = getSkinDetails(sinkJComboBox.getSelectedItem());
    137         String index = (String) os[0];
    138         String desc = (String) os[1];
    139         skinNum = Integer.valueOf(index);
    140         currentSkinDescJLabel.setText(desc);
    141         setJUI();
    142     }
    143 
    144     public void setViewMenuUtil(ViewMenuUtil viewMenuUtil) {
    145         this.view = viewMenuUtil;
    146     }
    147 
    148     /**
    149      * If not necessary, please do not change
    150      */
    151     private void pageGourpLayout() {
    152         GroupLayout layout = new GroupLayout(getContentPane());
    153         getContentPane().setLayout(layout);
    154         horizontalGroupLayout(layout);
    155         verticalGroupLayout(layout);
    156         pack();
    157     }
    158 
    159     private void verticalGroupLayout(GroupLayout layout) {
    160         layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(40, 40, 40).addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(currentSkinJLabel).addComponent(sinkJComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addGap(26, 26, 26).addComponent(line, GroupLayout.PREFERRED_SIZE, 11, GroupLayout.PREFERRED_SIZE).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addComponent(descJlabel).addGap(18, 18, 18).addComponent(currentSkinDescJLabel).addContainerGap(47, Short.MAX_VALUE)));
    161     }
    162 
    163     private void horizontalGroupLayout(GroupLayout layout) {
    164         layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(21, 21, 21).addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(currentSkinDescJLabel).addComponent(descJlabel).addGroup(layout.createSequentialGroup().addComponent(currentSkinJLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(sinkJComboBox, GroupLayout.PREFERRED_SIZE, 195, GroupLayout.PREFERRED_SIZE))).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addGroup(layout.createSequentialGroup().addComponent(line, GroupLayout.PREFERRED_SIZE, 355, GroupLayout.PREFERRED_SIZE).addGap(0, 0, Short.MAX_VALUE)));
    165     }
    166 }

    /notepad/src/main/java/com/b510/notepad/util/EditMenuUtil.java

      1 /**
      2  * 
      3  */
      4 package com.b510.notepad.util;
      5 
      6 import javax.swing.JOptionPane;
      7 
      8 import org.apache.log4j.Logger;
      9 
     10 import com.b510.notepad.common.Common;
     11 import com.b510.notepad.ui.FindManagerUI;
     12 import com.b510.notepad.ui.MainUI;
     13 import com.b510.notepad.ui.ReplaceManagerUI;
     14 
     15 /**
     16  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
     17  * @created Nov 19, 2014
     18  */
     19 public class EditMenuUtil extends MainUI {
     20     
     21     private static final long serialVersionUID = 1L;
     22     
     23     static Logger log = Logger.getLogger(EditMenuUtil.class);
     24 
     25     private static FindManagerUI findManagerUI;
     26     private static ReplaceManagerUI replaceeManagerUI;
     27     
     28     public EditMenuUtil(String title) {
     29         super(title);
     30     }
     31 
     32     public static void undo() {
     33         log.debug(Common.UNDO);
     34         if(undoManager.canUndo()){
     35             undoManager.undo();
     36         }
     37     }
     38 
     39     public static void copy() {
     40         log.debug(Common.COPY);
     41         textArea.copy();
     42     }
     43 
     44     public static void paste() {
     45         log.debug(Common.PASTE);
     46         textArea.paste();
     47     }
     48 
     49     public static void cut() {
     50         log.debug(Common.CUT);
     51         textArea.cut();
     52     }
     53 
     54     /**
     55      * Showing the <code>FindManagerUI</code> window.
     56      */
     57     public void find() {
     58         log.debug(Common.FIND);
     59         if (null == findManagerUI) {
     60             findManagerUI = new FindManagerUI(Common.FIND);
     61             findManagerUI.setEditMenuUtil(EditMenuUtil.this);
     62         } else {
     63             findManagerUI.setVisible(true);
     64             findManagerUI.setFocusable(true);
     65         }
     66     }
     67 
     68     /**
     69      * The directory : isForward(true : Forward and false : Backward)<br>
     70      * The Case Sensitive : isCaseSensitive(true : Case Sensitive and false : Not Case Sensitive)</br>
     71      */
     72     public void findNext() {
     73         log.debug(Common.FIND_NEXT);
     74         if (Common.EMPTY.equals(findWhat)) {
     75             JOptionPane.showMessageDialog(EditMenuUtil.this, Common.WHAT_DO_YOU_WANT_TO_FIND, Common.NOTEPAD, JOptionPane.INFORMATION_MESSAGE);
     76         } else if (findWhat.length() > textArea.getText().length()) {
     77             canNotFindKeyWord();
     78         } else {
     79             String content = textArea.getText();
     80             String temp = Common.EMPTY;
     81             int position = textArea.getSelectionEnd() - findWhat.length() + 1;
     82             if (FindManagerUI.isForward) {
     83                 if(position > content.length() - findWhat.length()){
     84                     canNotFindKeyWordOperation(content.length(), content.length());
     85                 }
     86                 for (; position <= content.length() - findWhat.length(); position++) {
     87                     temp = content.substring(position, position + findWhat.length());
     88                     if (FindManagerUI.isCaseSensitive) {
     89                         if (temp.equals(findWhat)) {
     90                             setTextAreaSelection(position, position + findWhat.length());
     91                             break;
     92                         } else if (position >= content.length() - findWhat.length()) {
     93                             canNotFindKeyWordOperation(content.length(), content.length());
     94                             break;
     95                         }
     96                     } else {
     97                         if (temp.equalsIgnoreCase(findWhat)) {
     98                             setTextAreaSelection(position, position + findWhat.length());
     99                             break;
    100                         } else if (position >= content.length() - findWhat.length()) {
    101                             canNotFindKeyWordOperation(content.length(), content.length());
    102                             break;
    103                         }
    104                     }
    105                 }
    106             } else {// Backward
    107                 if(null != textArea.getSelectedText() && !Common.EMPTY.equals(textArea.getSelectedText().trim())){
    108                     position = textArea.getSelectionStart();
    109                 }
    110                 if(position < findWhat.length()){
    111                     canNotFindKeyWordOperation(0, 0);
    112                 }
    113                 for (; position - findWhat.length() >= 0; position--) {
    114                     temp = content.substring(position - findWhat.length(), position);
    115                     if (FindManagerUI.isCaseSensitive) {//Case Sensitive
    116                         if (temp.equals(findWhat)) {
    117                             setTextAreaSelection(position - findWhat.length(), position);
    118                             break;
    119                         } else if (position - findWhat.length() == 0) {
    120                             canNotFindKeyWordOperation(0, 0);
    121                             break;
    122                         }
    123                     } else {
    124                         if (temp.equalsIgnoreCase(findWhat)) {
    125                             setTextAreaSelection(position - findWhat.length(), position);
    126                             break;
    127                         } else if (position - findWhat.length() == 0) {
    128                             canNotFindKeyWordOperation(0, 0);
    129                             break;
    130                         }
    131                     }
    132                 }
    133             }
    134         }
    135     }
    136 
    137 
    138     private void canNotFindKeyWordOperation(int start, int end){
    139         setTextAreaSelection(start, end);
    140         canNotFindKeyWord();
    141     }
    142     
    143     private void canNotFindKeyWord() {
    144         JOptionPane.showMessageDialog(this, Common.CAN_NOT_FIND + findWhat, Common.NOTEPAD, JOptionPane.INFORMATION_MESSAGE);
    145     }
    146     
    147     private void setTextAreaSelection(int start, int end){
    148         textArea.setSelectionStart(start);
    149         textArea.setSelectionEnd(end);
    150     }
    151 
    152     /**
    153      * Showing the <code>ReplaceManagerUI</code> window.
    154      */
    155     public void replace() {
    156         log.debug(Common.REPLACE);
    157         if (null == replaceeManagerUI) {
    158             replaceeManagerUI = new ReplaceManagerUI(Common.REPLACE);
    159             replaceeManagerUI.setEditMenuUtil(EditMenuUtil.this);
    160         } else {
    161             replaceeManagerUI.setVisible(true);
    162             replaceeManagerUI.setFocusable(true);
    163         }
    164     }
    165     
    166     
    167     /**
    168      * Default direction is Forward. The <code>replaceOperation</code> method can NOT be called when <br>
    169      * <code>null == textArea.getSelectedText();</code> <br>Or <br><code>Common.EMPTY.equals(textArea.getSelectedText().trim());</code><br>
    170      */
    171     public void replaceOperation(){
    172         FindManagerUI.isForward = true;
    173         findNext();
    174         if (null != textArea.getSelectedText() && !Common.EMPTY.equals(textArea.getSelectedText().trim())) {
    175             textArea.replaceRange(ReplaceManagerUI.replaceWord, textArea.getSelectionStart(), textArea.getSelectionEnd());
    176         }
    177     }
    178 
    179     /**
    180      * When user want to call Replace_All method, the application will replace all with case sensitive.<br>
    181      * A information window will display after replacing all words.<br>Finally, the application will set <br>
    182      * <code>ReplaceManagerUI.replaceCount = 0;</code>
    183      */
    184     public void replaceAllOperation() {
    185         String replaceWord = ReplaceManagerUI.replaceWord;
    186         String content = textArea.getText();
    187         String temp;
    188         for (int i = 0; i <= content.length() - findWhat.length(); i++) {
    189             temp = content.substring(i, i + findWhat.length());
    190             if (ReplaceManagerUI.isCaseSensitive) {
    191                 if (temp.equals(findWhat)) {
    192                     replaceRangeOperation(findWhat, replaceWord, i);
    193                 }
    194             } else {
    195                 if (temp.equalsIgnoreCase(findWhat)) {
    196                     replaceRangeOperation(findWhat, replaceWord, i);
    197                 }
    198             }
    199         }
    200         JOptionPane.showMessageDialog(this, ReplaceManagerUI.replaceCount + Common.MATCHES_REPLACED, Common.NOTEPAD, JOptionPane.INFORMATION_MESSAGE);
    201         ReplaceManagerUI.replaceCount = 0;
    202     }
    203 
    204     private void replaceRangeOperation(String findWhat, String replaceWord, int i) {
    205         ReplaceManagerUI.replaceCount++;
    206         textArea.setSelectionStart(i);
    207         textArea.setSelectionEnd(i + findWhat.length());
    208         textArea.replaceRange(replaceWord, textArea.getSelectionStart(), textArea.getSelectionEnd());
    209     }
    210 
    211     public static void selectAll() {
    212         log.debug(Common.SELECT_ALL);
    213         textArea.selectAll();
    214     }
    215 
    216     public static void timeDate() {
    217         log.debug(Common.TIME_DATE);
    218         textArea.replaceRange(NotepadUtil.getTimeDate(), textArea.getSelectionStart(), textArea.getSelectionEnd());
    219     }
    220     
    221     public void distoryFindManagerUI() {
    222         if (null != findManagerUI) {
    223             findManagerUI = null;
    224         }
    225     }
    226     
    227     public void distoryReplaceeManagerUI() {
    228         if (null != replaceeManagerUI) {
    229             replaceeManagerUI = null;
    230         }
    231     }
    232 
    233 }

    /notepad/src/main/java/com/b510/notepad/util/FileMenuUtil.java

      1 /**
      2  * 
      3  */
      4 package com.b510.notepad.util;
      5 
      6 import java.awt.FileDialog;
      7 import java.io.BufferedReader;
      8 import java.io.File;
      9 import java.io.FileInputStream;
     10 import java.io.FileOutputStream;
     11 import java.io.InputStreamReader;
     12 import java.io.OutputStreamWriter;
     13 
     14 import javax.swing.JFileChooser;
     15 import javax.swing.JOptionPane;
     16 import javax.swing.filechooser.FileNameExtensionFilter;
     17 
     18 import org.apache.log4j.Logger;
     19 
     20 import com.b510.notepad.common.Common;
     21 import com.b510.notepad.ui.MainUI;
     22 
     23 /**
     24  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
     25  * @created Nov 19, 2014
     26  */
     27 public class FileMenuUtil extends MainUI {
     28 
     29     private static final long serialVersionUID = 1L;
     30 
     31     static Logger log = Logger.getLogger(FileMenuUtil.class);
     32 
     33     public FileMenuUtil(String title) {
     34         super(title);
     35     }
     36 
     37     /**
     38      * Create a new Notepad. <br>
     39      * 1. If the content of the Notepad is empty, then, create a new Notepad is
     40      * itself.<br>
     41      * 2. If the content of the Notepad is NOT empty, then, we want to create a
     42      * new Notepad:<br>
     43      * 2.1. If the Notepad is saved, then, create a new Notepad and let the
     44      * parent <code>setVisible(false)</code><br>
     45      * 2.2. If the Notepad is NOT saved<br>
     46      * 2.2.1. If the user want to save the content, "YES", <code>save()</code>,
     47      * go to step 2.1<br>
     48      * 2.2.2. If the user do NOT want to save the content, "NO", clean the
     49      * textArea, go to step 1<br>
     50      * 2.2.3. If the user select the "Cancel" option, nothing to do and return
     51      * to textArea.<br>
     52      * 
     53      * @param mainUI
     54      */
     55     public static void news(MainUI mainUI) {
     56         log.debug(Common.NEW);
     57         if (!Common.EMPTY.equals(filePath)) {
     58             if (savedText.equals(textArea.getText())) {
     59                 createMainUI(mainUI);
     60             } else {
     61                 confirmSave(mainUI);
     62             }
     63         } else {
     64             if (Common.EMPTY.equals(textArea.getText())) {
     65                 createMainUI(mainUI);
     66             } else {
     67                 confirmSave(mainUI);
     68             }
     69         }
     70     }
     71 
     72     /**
     73      * @param mainUI
     74      */
     75     private static void confirmSave(MainUI mainUI) {
     76         int option = JOptionPane.showConfirmDialog(mainUI, Common.DO_YOU_WANT_TO_SAVE_CHANGES, Common.NOTEPAD, JOptionPane.YES_NO_CANCEL_OPTION);
     77         if (option == JOptionPane.YES_OPTION) {
     78             save(mainUI);
     79             createMainUI(mainUI);
     80         } else if (option == JOptionPane.NO_OPTION) {
     81             createMainUI(mainUI);
     82         } else if (option == JOptionPane.CANCEL_OPTION) {
     83             textArea.setFocusable(true);
     84         }
     85     }
     86 
     87     /**
     88      * Open a text file:<br>
     89      * 1. If the textArea is empty, then, click the "Open" menu to open a text
     90      * file.<br>
     91      * 2. If the textArea is NOT empty, then, we want to open a text file:<br>
     92      * 2.1. If the content of textArea was saved, then we click the "Open" menu
     93      * to open a text file.<br>
     94      * 2.2. If the content of textArea was NOT saved. There is a dialog display.<br>
     95      * 2.2.1. Selecting "Yes" to save content, and open a text file.<br>
     96      * 2.2.2. Selecting "No", then do NOT save the content, and open a text
     97      * file.<br>
     98      * 2.2.3. Selecting "Cancel", nothing to do and return to textArea.<br>
     99      * 
    100      * @param mainUI
    101      * @see com.b510.notepad.util.FileMenuUtil#openOperation()
    102      */
    103     public void open(MainUI mainUI) {
    104         log.debug(Common.OPEN);
    105         if (!Common.EMPTY.equals(filePath)) {
    106             if (savedText.equals(textArea.getText())) {
    107                 openOperation(mainUI);
    108             } else {
    109                 confirmOpen(mainUI);
    110             }
    111         } else {
    112             if (Common.EMPTY.equals(textArea.getText())) {
    113                 openOperation(mainUI);
    114             } else {
    115                 confirmOpen(mainUI);
    116             }
    117         }
    118     }
    119 
    120     private void confirmOpen(MainUI mainUI) {
    121         int option = JOptionPane.showConfirmDialog(FileMenuUtil.this, Common.DO_YOU_WANT_TO_SAVE_CHANGES, Common.CONFIM_EXIT, JOptionPane.YES_NO_CANCEL_OPTION);
    122         if (option == JOptionPane.YES_OPTION) {
    123             save(mainUI);
    124             openOperation(mainUI);
    125         } else if (option == JOptionPane.NO_OPTION) {
    126             openOperation(mainUI);
    127         } else if (option == JOptionPane.CANCEL_OPTION) {
    128             textArea.setFocusable(true);
    129         }
    130     }
    131 
    132     /**
    133      * The operation of the open<br>
    134      * When the user want to open a TXT file, this method will be called.<br>
    135      * 
    136      * @param mainUI
    137      * @see com.b510.notepad.util.FileMenuUtil#open()
    138      */
    139     private static void openOperation(MainUI mainUI) {
    140         String path;
    141         JFileChooser chooser = new JFileChooser();
    142         FileNameExtensionFilter filter;
    143         filter = new FileNameExtensionFilter(Common.TXT_FILE, Common.TXT);
    144         chooser.setFileFilter(filter);
    145         chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    146         chooser.setDialogTitle(Common.OPEN);
    147         int ret = chooser.showOpenDialog(null);
    148         if (ret == JFileChooser.APPROVE_OPTION) {
    149             path = chooser.getSelectedFile().getAbsolutePath();
    150             String name = chooser.getSelectedFile().getName();
    151             try {
    152                 BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path), Common.GB2312));
    153                 StringBuffer buffer = new StringBuffer();
    154                 String line = null;
    155                 while ((line = reader.readLine()) != null) {
    156                     buffer.append(line).append(Common.NEW_LINE);
    157                 }
    158                 reader.close();
    159                 textArea.setText(String.valueOf(buffer));
    160                 mainUI.setTitle(name + Common.NOTEPAD_NOTEPAD);
    161                 savedText = textArea.getText();
    162                 mainUI.setSaved(true);
    163                 filePath = path;
    164             } catch (Exception e) {
    165                 e.printStackTrace();
    166             }
    167         }
    168     }
    169 
    170     /**
    171      * Saving a TXT file.<br>
    172      * 1. If the user want to create a new TXT file, and type the content(empty
    173      * is allowed) to save. In this case, a dialog will display.<br>
    174      * 2. If the user want to save a existing file. then call
    175      * <code>save()</code> method to save content.<br>
    176      * 3. A existing file with some changes, then the user want to save it. The
    177      * operation as same as step 2.<br>
    178      * 
    179      * @param mainUI
    180      */
    181     public static void save(MainUI mainUI) {
    182         log.debug(Common.SAVE);
    183         try {
    184             if (null != filePath && !Common.EMPTY.equals(filePath)) {
    185                 OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(filePath));
    186                 out.write(textArea.getText());
    187                 out.close();
    188                 mainUI.setSaved(true);
    189                 savedText = textArea.getText();
    190             } else {
    191                 FileDialog fileDialog = new FileDialog(mainUI, Common.SAVE, FileDialog.SAVE);
    192                 fileDialog.setVisible(true);
    193                 if (fileDialog.getDirectory() != null && fileDialog.getFile() != null) {
    194                     String fileName = fileDialog.getFile();
    195                     if (!Common.TXT.equalsIgnoreCase(NotepadUtil.getPostfix(fileName))) {
    196                         fileName = fileName + Common.POINT + Common.TXT;
    197                     }
    198                     String path = fileDialog.getDirectory() + fileName;
    199                     OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path));
    200                     out.write(textArea.getText());
    201                     out.close();
    202                     mainUI.setTitle(fileName + Common.NOTEPAD_NOTEPAD);
    203                     filePath = path;
    204                     mainUI.setSaved(true);
    205                     savedText = textArea.getText();
    206                 }
    207             }
    208         } catch (Exception e) {
    209             log.debug(e);
    210         }
    211     }
    212 
    213     public static void saveAs(MainUI mainUI) {
    214         log.debug(Common.SAVE_AS);
    215         String path = filePath;
    216         filePath = Common.EMPTY;
    217         save(mainUI);
    218         if (Common.EMPTY.equals(filePath)) {
    219             filePath = path;
    220         }
    221     }
    222 
    223     public void readProperties(MainUI mainUI) {
    224         log.debug(Common.PROPERTIES);
    225         if (!Common.EMPTY.equals(filePath) && mainUI.isSaved()) {
    226             File file = new File(filePath);
    227             JOptionPane.showMessageDialog(FileMenuUtil.this, NotepadUtil.fileProperties(file), Common.NOTEPAD, JOptionPane.INFORMATION_MESSAGE);
    228         } else {
    229             confirmSave(mainUI);
    230         }
    231     }
    232 
    233     public void exit(MainUI mainUI) {
    234         log.debug(Common.EXIT);
    235         if (!Common.EMPTY.equals(filePath)) {
    236             if (savedText.equals(textArea.getText())) {
    237                 NotepadUtil.exit();
    238             } else {
    239                 confirmExit(mainUI);
    240             }
    241         } else {
    242             if (Common.EMPTY.equals(textArea.getText())) {
    243                 NotepadUtil.exit();
    244             } else {
    245                 confirmExit(mainUI);
    246             }
    247         }
    248     }
    249 
    250     private void confirmExit(MainUI mainUI) {
    251         int option = JOptionPane.showConfirmDialog(FileMenuUtil.this, Common.DO_YOU_WANT_TO_SAVE_CHANGES, Common.CONFIM_EXIT, JOptionPane.YES_NO_CANCEL_OPTION);
    252         if (option == JOptionPane.YES_OPTION) {
    253             save(mainUI);
    254             NotepadUtil.exit();
    255         } else if (option == JOptionPane.NO_OPTION) {
    256             NotepadUtil.exit();
    257         } else if (option == JOptionPane.CANCEL_OPTION) {
    258             textArea.setFocusable(true);
    259         }
    260     }
    261 
    262     private static void createMainUI(MainUI mainUI) {
    263         mainUI.setTitle(Common.UNTITLE + Common.NOTEPAD_NOTEPAD);
    264         textArea.setText(Common.EMPTY);
    265         filePath = Common.EMPTY;
    266         savedText = Common.EMPTY;
    267         mainUI.setSaved(false);
    268     }
    269 
    270 }

    /notepad/src/main/java/com/b510/notepad/util/FormatMenuUtil.java

      1 /**
      2  * 
      3  */
      4 package com.b510.notepad.util;
      5 
      6 import java.awt.Font;
      7 
      8 import org.apache.log4j.Logger;
      9 
     10 import com.b510.notepad.common.Common;
     11 import com.b510.notepad.ui.FontManagerUI;
     12 import com.b510.notepad.ui.FontSizeManagerUI;
     13 import com.b510.notepad.ui.FontStyleManagerUI;
     14 import com.b510.notepad.ui.MainUI;
     15 
     16 /**
     17  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
     18  * @created Nov 19, 2014
     19  */
     20 public class FormatMenuUtil extends MainUI {
     21 
     22     private static final long serialVersionUID = 1L;
     23 
     24     static Logger log = Logger.getLogger(FormatMenuUtil.class);
     25     
     26     private static FontManagerUI fontManagerUI;
     27     private static FontSizeManagerUI fontSizeManagerUI;
     28     private static FontStyleManagerUI fontStyleManagerUI;
     29 
     30     public FormatMenuUtil(String title) {
     31         super(title);
     32     }
     33 
     34     public static void wordWrap() {
     35         log.debug(Common.WORD_WRAP);
     36         if (lineWrap) {
     37             textArea.setLineWrap(false);
     38             lineWrap = false;
     39         } else {
     40             textArea.setLineWrap(true);
     41             lineWrap = true;
     42         }
     43     }
     44     
     45     public void resetFont(MainUI mainUI) {
     46         log.debug(Common.RESET_FONT);
     47         fontNum = Common.FONT_NUM;
     48         FontManagerUI.FONT_TYPE = Common.FONT_LUCIDA_CONSOLE;
     49         fontSizeNum = Common.FONT_SIZE_NUM;
     50         FontManagerUI.FONT_SIZE = Common.FONT_SIZE;
     51         FontManagerUI.FONT_STYPLE = Common.FONT_STYLE_DEFAULT;
     52         fontStyleNum = Common.FONT_STYLE_NUM;
     53         textArea.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE));
     54         setJUI();
     55     }
     56 
     57     public void font(MainUI mainUI) {
     58         log.debug(Common.FONT);
     59         if (null == fontManagerUI) {
     60             fontManagerUI = new FontManagerUI(Common.FONT);
     61             fontManagerUI.setFormatMenuUtil(FormatMenuUtil.this);
     62         } else {
     63             fontManagerUI.setVisible(true);
     64             fontManagerUI.setFocusable(true);
     65         }
     66     }
     67 
     68     public void fontSize(MainUI mainUI) {
     69         log.debug(Common.FONT_SIZE_TITLE);
     70         if (null == fontSizeManagerUI) {
     71             fontSizeManagerUI = new FontSizeManagerUI(Common.FONT);
     72             fontSizeManagerUI.setFormatMenuUtil(FormatMenuUtil.this);
     73         } else {
     74             fontSizeManagerUI.setVisible(true);
     75             fontSizeManagerUI.setFocusable(true);
     76         }
     77     }
     78     
     79     public void fontStyle(MainUI mainUI) {
     80         log.debug(Common.FONT_SIZE_TITLE);
     81         if (null == fontStyleManagerUI) {
     82             fontStyleManagerUI = new FontStyleManagerUI(Common.FONT_STYLE);
     83             fontStyleManagerUI.setFormatMenuUtil(FormatMenuUtil.this);
     84         } else {
     85             fontStyleManagerUI.setVisible(true);
     86             fontStyleManagerUI.setFocusable(true);
     87         }
     88     }
     89     
     90     public void distoryFontManagerUI() {
     91         if (null != fontManagerUI) {
     92             fontManagerUI = null;
     93         }
     94     }
     95     
     96     public void distoryFontSizeManagerUI() {
     97         if (null != fontSizeManagerUI) {
     98             fontSizeManagerUI = null;
     99         }
    100     }
    101     
    102     public void distoryFontStyleManagerUI() {
    103         if (null != fontSizeManagerUI) {
    104             fontSizeManagerUI = null;
    105         }
    106     }
    107 }

    /notepad/src/main/java/com/b510/notepad/util/HelpMenuUtil.java

     1 /**
     2  * 
     3  */
     4 package com.b510.notepad.util;
     5 
     6 import org.apache.log4j.Logger;
     7 
     8 import com.b510.notepad.common.Common;
     9 import com.b510.notepad.ui.AboutUI;
    10 import com.b510.notepad.ui.MainUI;
    11 
    12 /**
    13  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
    14  * @created Nov 19, 2014
    15  */
    16 public class HelpMenuUtil extends MainUI {
    17 
    18     private static final long serialVersionUID = 1L;
    19 
    20     static Logger log = Logger.getLogger(HelpMenuUtil.class);
    21 
    22     private static AboutUI aboutUI;
    23 
    24     public HelpMenuUtil(String title) {
    25         super(title);
    26     }
    27 
    28     public void about(MainUI mainUI) {
    29         log.debug(Common.ABOUT_NOTEPAD);
    30         if (null == aboutUI) {
    31             aboutUI = new AboutUI(Common.ABOUT_NOTEPAD);
    32             aboutUI.setHelpMenuUtil(HelpMenuUtil.this);
    33         } else {
    34             aboutUI.setVisible(true);
    35             aboutUI.setFocusable(true);
    36         }
    37     }
    38 
    39     public void distoryAboutUI() {
    40         if (null != aboutUI) {
    41             aboutUI = null;
    42         }
    43     }
    44 }

    /notepad/src/main/java/com/b510/notepad/util/NotepadUtil.java

     1 /**
     2  * 
     3  */
     4 package com.b510.notepad.util;
     5 
     6 import java.io.File;
     7 import java.io.IOException;
     8 import java.text.SimpleDateFormat;
     9 import java.util.Date;
    10 
    11 import org.apache.log4j.Logger;
    12 
    13 import com.b510.notepad.common.Common;
    14 
    15 /**
    16  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
    17  * @created Nov 19, 2014
    18  */
    19 public class NotepadUtil {
    20 
    21     static Logger log = Logger.getLogger(NotepadUtil.class);
    22 
    23     public static void exit() {
    24         log.debug(Common.SYSTEM_EXIT);
    25         System.exit(0);
    26     }
    27     
    28     public static void accessURL(String url) {
    29         if (null == url || Common.EMPTY.equals(url)) {
    30             return;
    31         }
    32         try {
    33             Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
    34         } catch (IOException e1) {
    35             e1.printStackTrace();
    36         }
    37     }
    38     
    39     /**
    40      * @return i.e. 3:49 PM 11/20/2014
    41      */
    42     public static String getTimeDate(){
    43         SimpleDateFormat sdf = new SimpleDateFormat(Common.DATE_FORMAT);
    44         Date date = new Date();
    45         String timeDate = sdf.format(date);
    46         return timeDate;
    47     }
    48     
    49     /**
    50      * @param path i.e. com/b510/resources/images/hongten.png
    51      * @return i.e. png
    52      */
    53     public static String getPostfix(String path) {
    54         if (path == null || Common.EMPTY.equals(path.trim())) {
    55             return Common.EMPTY;
    56         }
    57         if (path.contains(Common.POINT)) {
    58             return path.substring(path.lastIndexOf(Common.POINT) + 1, path.length());
    59         }
    60         return Common.EMPTY;
    61     }
    62     
    63     public static String fileProperties(File file) {
    64         return "<html>"
    65                 + "File Name   : " + file.getName() + "<br/>"
    66                 + "File Type   : "+ getPostfix(file.getAbsolutePath()) +" file<br/>"
    67                 + "File Size   : " + file.length()/1024 +" KB<br/>"
    68                 + "Modify Date : " + new SimpleDateFormat().format(file.lastModified()) + "<br/>"
    69                 + "Location    : " + file.getParent() + "<br/>"
    70                 + "CanRead     : " + file.canRead() + "<br/>"
    71                 + "CanWrite    : " + file.canWrite() + "<html>";
    72     }
    73 }

    /notepad/src/main/java/com/b510/notepad/util/ViewMenuUtil.java

     1 /**
     2  * 
     3  */
     4 package com.b510.notepad.util;
     5 
     6 import org.apache.log4j.Logger;
     7 
     8 import com.b510.notepad.common.Common;
     9 import com.b510.notepad.ui.MainUI;
    10 import com.b510.notepad.ui.SkinManagerUI;
    11 
    12 /**
    13  * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
    14  * @created Nov 19, 2014
    15  */
    16 public class ViewMenuUtil extends MainUI {
    17 
    18     private static final long serialVersionUID = 1L;
    19 
    20     static Logger log = Logger.getLogger(ViewMenuUtil.class);
    21 
    22     private static SkinManagerUI skinManagerUI;
    23 
    24     public ViewMenuUtil(String title) {
    25         super(title);
    26     }
    27 
    28     public void skin(MainUI mainUI) {
    29         log.debug(Common.SKIN);
    30         if (null == skinManagerUI) {
    31             skinManagerUI = new SkinManagerUI(Common.SKIN);
    32             skinManagerUI.setViewMenuUtil(ViewMenuUtil.this);
    33         } else {
    34             skinManagerUI.setVisible(true);
    35             skinManagerUI.setFocusable(true);
    36         }
    37     }
    38 
    39     public void distorySkinManagerUI() {
    40         if (null != skinManagerUI) {
    41             skinManagerUI = null;
    42         }
    43     }
    44 
    45 }

    /notepad/src/main/java/log4j.properties

     1 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
     2 log4j.appender.stdout.Target=System.out
     3 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
     4 log4j.appender.stdout.layout.ConversionPattern=[Notepad] %d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c:%L - %m%n
     5 
     6 log4j.appender.notepad=org.apache.log4j.DailyRollingFileAppender
     7 log4j.appender.notepad.File=C:\log4j\log4j-notepad
     8 log4j.appender.notepad.DatePattern='_'yyyy-MM-dd'.log'
     9 log4j.appender.notepad.layout=org.apache.log4j.PatternLayout 
    10 log4j.appender.notepad.layout.ConversionPattern=[Notepad] %d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c:%L - %m%n
    11 
    12 log4j.rootLogger=debug,stdout,notepad

    /notepad/pom.xml

     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4 
     5     <groupId>com.b510.notepad</groupId>
     6     <artifactId>notepad</artifactId>
     7     <version>1.0</version>
     8     <packaging>jar</packaging>
     9 
    10     <name>notepad</name>
    11     <url>http://maven.apache.org</url>
    12 
    13     <properties>
    14         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    15     </properties>
    16 
    17     <dependencies>
    18         <dependency>
    19             <groupId>junit</groupId>
    20             <artifactId>junit</artifactId>
    21             <version>4.10</version>
    22             <scope>test</scope>
    23         </dependency>
    24 
    25         <dependency>
    26             <groupId>log4j</groupId>
    27             <artifactId>log4j</artifactId>
    28             <version>1.2.16</version>
    29         </dependency>
    30         
    31         <!-- substance dependency start-->
    32         <dependency>
    33             <groupId>org.jvnet.substance</groupId>
    34             <artifactId>substance</artifactId>
    35             <version>1.0</version>
    36         </dependency>
    37         <!-- substance dependency end-->
    38     </dependencies>
    39 </project>

    =================================================
    More Information About Notepad:
    =================================================

    Author : Hongten
    E-mail : hongtenzone@foxmail.com
    Home Page : http://www.cnblogs.com
    Notepad Page : http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
    Notepad Skin Page : http://www.cnblogs.com/hongten/p/hongten_notepad_substance_skins.html
    Windows Notepad : http://windows.microsoft.com/en-us/windows/notepad-faq#1TC=windows-7

    =================================================
    Download:
    =================================================

    Source Code Download : 

    http://files.cnblogs.com/hongten/notepad_src.rar    

    http://pan.baidu.com/s/1o6wU49k

    Notepad API : 

    http://files.cnblogs.com/hongten/notepad_API.rar

     http://pan.baidu.com/s/1o6wU49k

    Notepad_1.1 :  Updating My Notepad_1.1

    ========================================================

    More reading,and english is important.

    I'm Hongten

     

    大哥哥大姐姐,觉得有用打赏点哦!多多少少没关系,一分也是对我的支持和鼓励。谢谢。
    Hongten博客排名在100名以内。粉丝过千。
    Hongten出品,必是精品。

    E | hongtenzone@foxmail.com  B | http://www.cnblogs.com/hongten

    ========================================================

  • 相关阅读:
    python 类继承演示范例的代码
    C#监控指定目录的文件变化的代码
    如何开启红米手机4X的ROOT超级权限
    C# 发送电子邮件源码片段
    android中使用afinal一行源码显示网络图片
    (详细)华为畅享7 SLA-AL00的usb调试模式在哪里打开的流程
    C#自定义FTP访问类的代码
    C#的String.Split 分割字符串用法详解的代码
    红米Note 5A完美卡刷开发版获得ROOT超级权限的方法
    C# 类如何声明索引器以提供对类的类似数组的访问的代码
  • 原文地址:https://www.cnblogs.com/hongten/p/hongten_notepad_index.html
Copyright © 2011-2022 走看看