My Notepad

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

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

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

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

Well, I will introduce my Notepad.

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

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

 

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

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

 

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

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

There are TWO ways to provided.

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

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


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

 

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

 

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

Some UIs Show

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

1. The Notepad Main UI

 

2. File Menu

 

3. Edit Menu

 

4. Format Menu

 

5. View Menu

 

6.Help Menu

 

7.Untitle Notepad

 

8. Open a File

 

9. About Notepad

 

10. Change Skin

 

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

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

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

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

  1 package com.b510.notepad.common;
  2 
  3 /**
  4  * @author Hongten
  5  * @created Nov 19, 2014
  6  */
  7 public class Common {
  8 
  9     public static final String HYPHEN = "-";
 10     public static final String EMPTY = "";
 11     public static final String NEW_LINE = "\r\n";
 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     // notepad\src\main\resources\images
 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 : 

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

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

Notepad API : 

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

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

 

Notepad_1.1 :  Updating My Notepad_1.1

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

More reading,and english is important.

I'm Hongten

 

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

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

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

posted @ 2014-11-28 22:17  Hongten  阅读(2463)  评论(0编辑  收藏  举报
Fork me on GitHub