My Notepad

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:

My Notepad

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:

My Notepad

My Notepad

=================================================
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

My Notepad

2. File Menu

My Notepad

3. Edit Menu

My Notepad

4. Format Menu

My Notepad

5. View Menu

My Notepad

6.Help Menu

My Notepad

7.Untitle Notepad

My Notepad

8. Open a File

My Notepad

9. About Notepad

My Notepad

10. Change Skin

My Notepad

=================================================
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

My Notepad 

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

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

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