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 :
http://files.cnblogs.com/hongten/notepad_src.rar
http://pan.baidu.com/s/1o6wU49k
Notepad API :
http://files.cnblogs.com/hongten/notepad_API.rar
http://pan.baidu.com/s/1o6wU49k
Notepad_1.1 : Updating My Notepad_1.1
E | hongtenzone@foxmail.com B | http://www.cnblogs.com/hongten