My Notepad
I have spent near more two weeks to write this Notepad application. At this moment, I want to share with you.
I wonder that do you know the Notepad in Windows XP/7. If you have no idea, I am pleasure to display the Notepad
in Windows 7 with you, and it displays as below:
It has large future and simple interface, so does my Notepad!
Well, I will introduce my Notepad.
First, Let's look at the structure of the my Notepad application:
=================================================
The structure of the project:
=================================================
-src/main/java
-com.b510.notepad
-client
-Client.java
-common
-Common.java
-ui
-AboutUI.java
-FindManagerUI.java
-FontManagerUI.java
-FontSizeManagerUI.java
-JUI.java
-MainUI.java
-NotepadUI.java
-ReplaceManagerUI.java
-SkinManagerUI.java
-util
-EditMenuUtil.java
-FileMenuUtil.java
-FormatMenuUtil.java
-HelpMenuUtil.java
-NotepadUtil.java
-ViewMenuUtil.java
-log4j.properties
-lib
-skin
-substance-1.0.jar
-pom.xml
=================================================
Describe for all files:
=================================================
-Client.java --> The entry of the notepad application. It contains the main method.
-Common.java --> All constants in here.
-AboutUI.java --> About notepad page.
-FindManagerUI.java --> Find page.
-FontManagerUI.java --> Font setting page.
-FontSizeManagerUI.java --> Font sizt setting page.
-JUI.java --> The parent class for the NotepadUI, It extends JFrame.
-MainUI.java --> The main page of the notepad.
-NotepadUI.java --> The parent class for the MainUI, It extends JUI and implements ActionListener.
-ReplaceManagerUI.java --> Replace page.
-SkinManagerUI.java --> Skin setting page.
-EditMenuUtil.java --> Edit menu functions provider.
-FileMenuUtil.java --> File menu functions provider.
-FormatMenuUtil.java --> Format menu functions provider.
-HelpMenuUtil.java --> Help menu functions provider.
-NotepadUtil.java --> Common functions provider.
-ViewMenuUtil.java --> View menu functions provider.
-log4j.properties --> A properties for the log4j.
-substance-1.0.jar --> substance dependency.
-pom.xml --> pom.xml
=================================================
How to add substance to your project build path?
=================================================
NOTE:
Your computer should install the Maven(apache-maven-3.2.2 is good choice) before running this project!
There are TWO ways to provided.
1. Using eclipse tool to add the substance-1.0.jar to project build path.
1.1.Finding the substance-1.0.jar with the path "notepad/lib/skin/substance-1.0.jar".
Right Click --> Build Path --> Add to Build Path.
1.2.Then open the opm.xml(with the path "notepad/pom.xml")
Deleting the substance dependency:
<dependency>
<groupId>org.jvnet.substance</groupId>
<artifactId>substance</artifactId>
<version>1.0</version>
</dependency>
2. Copy the substance-1.0.jar to your repository.
2.1.Finding the substance-1.0.jar with the path "notepad/lib/skin/substance-1.0.jar".
Copying the substance-1.0.jar file to your repository.
The default path of the repository is "${user.home}/.m2/repository/org/jvnet/substance/substance/1.0/substance-1.0.jar"
=================================================
How to run notepad project?
=================================================
Using the eclipse tool and finding the Client.java file with the path "notepad/src/main/java/com/b510/notepad/client/Client.java".
Right Click --> Run As --> Java Application
==================
Some UIs Show
==================
1. The Notepad Main UI
2. File Menu
3. Edit Menu
4. Format Menu
5. View Menu
6.Help Menu
7.Untitle Notepad
8. Open a File
9. About Notepad
10. Change Skin
=================================================
Source Code:
=================================================
/notepad/src/main/java/com/b510/notepad/client/Client.java
1 /** 2 * 3 */ 4 package com.b510.notepad.client; 5 6 import com.b510.notepad.common.Common; 7 import com.b510.notepad.ui.MainUI; 8 9 /** 10 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 11 * @created Nov 19, 2014 12 */ 13 public class Client { 14 15 public static void main(String[] args) { 16 start(); 17 } 18 19 public static MainUI start() { 20 MainUI ui = new MainUI(Common.TITLE); 21 ui.init(); 22 return ui; 23 } 24 }
/notepad/src/main/java/com/b510/notepad/common/Common.java
1 package com.b510.notepad.common; 2 3 /** 4 * @author Hongten 5 * @created Nov 19, 2014 6 */ 7 public class Common { 8 9 public static final String HYPHEN = "-"; 10 public static final String EMPTY = ""; 11 public static final String NEW_LINE = "\r\n"; 12 public static final String BLANK = " "; 13 public static final String QUESTION_MARK = "?"; 14 public static final String POINT = "."; 15 public static final String COLOR = ":"; 16 public static final String START = "*"; 17 public static final String TXT = "txt"; 18 public static final String TXT_FILE = START + POINT + TXT; 19 20 public static final String UNTITLE = "Untitled"; 21 public static final String NOTEPAD = "Notepad"; 22 public static final String NOTEPAD_NOTEPAD = BLANK + HYPHEN + BLANK + NOTEPAD; 23 public static final String TITLE = UNTITLE + NOTEPAD_NOTEPAD; 24 public static final String SYSTEM_EXIT = "System exit"; 25 public static final String SYSTEM_OPEN = "System open"; 26 27 public static final String FILE = "File"; 28 public static final String EDIT = "Edit"; 29 public static final String FORMAT = "Format"; 30 public static final String VIEW = "View"; 31 public static final String Help = "Help"; 32 33 // File Items 34 public static final String NEW = "New"; 35 public static final String OPEN = "Open..."; 36 public static final String SAVE = "Save"; 37 public static final String SAVE_AS = "Save as..."; 38 public static final String PROPERTIES = "Properties"; 39 public static final String EXIT = "Exit"; 40 41 // Edit Items 42 public static final String UNDO = "Undo"; 43 public static final String COPY = "Copy"; 44 public static final String PASTE = "Paste"; 45 public static final String CUT = "Cut"; 46 public static final String DELETE = "Delete"; 47 public static final String FIND = "Find..."; 48 public static final String FIND_NEXT = "Find Next"; 49 public static final String REPLACE = "Replace"; 50 public static final String GO_TO = "Go To..."; 51 public static final String SELECT_ALL = "Select All"; 52 public static final String TIME_DATE = "Time/Date"; 53 54 // Format Items 55 public static final String WORD_WRAP = "Word Wrap"; 56 public static final String RESET_FONT = "Reset Font"; 57 public static final String FONT = "Font"; 58 public static final String FONT_STYLE = "Font Style"; 59 public static final String FONT_SIZE_TITLE = "Font Size"; 60 61 // View 62 public static final String STATUS_BAR = "Status Bar"; 63 public static final String SKIN = "Change Skin"; 64 65 // Help Items 66 public static final String VIEW_HELP = "View Help"; 67 public static final String ABOUT_NOTEPAD = "About NotePad"; 68 69 // KeyStroke 70 public static final char A = 'A'; 71 public static final char N = 'N'; 72 public static final char O = 'O'; 73 public static final char L = 'L'; 74 public static final char Z = 'Z'; 75 public static final char C = 'C'; 76 public static final char D = 'D'; 77 public static final char W = 'W'; 78 public static final char H = 'H'; 79 public static final char F = 'F'; 80 public static final char V = 'V'; 81 public static final char X = 'X'; 82 public static final char G = 'G'; 83 public static final char S = 'S'; 84 public static final char P = 'P'; 85 public static final char T = 'T'; 86 public static final char SPACE = ' '; 87 88 // notepad\src\main\resources\images 89 public static final String IMAGE_PATH = "images/"; 90 91 public static final String HONGTEN_PIC = IMAGE_PATH + "hongten.png"; 92 93 // About UI 94 public static final String AUTHOR = "Author"; 95 public static final String AUTHOR_NAME = "Hongten"; 96 public static final String AUTHOR_DESC = "I'm " + AUTHOR_NAME; 97 public static final String ITEM = "Item"; 98 public static final String DESCRIPTION = "Desctiption"; 99 public static final String APPLICATION = "Application"; 100 public static final String NAME = "Name"; 101 public static final String APPLICATION_NAME = APPLICATION + BLANK + NAME; 102 public static final String NOTEPAD_APP = NOTEPAD; 103 public static final String APPLICATION_DESCRIPTION = APPLICATION + BLANK + DESCRIPTION; 104 public static final String APPLICATION_DESCRIPTION_DETAIL = "A " + NOTEPAD; 105 public static final String VERSION = "Version"; 106 public static final String VERSION_VALUE = "1.0"; 107 public static final String BLOG = "Blog"; 108 public static final String HOME_PAGE = "http://www.cnblogs.com/hongten"; 109 public static final String NOTEPAD_PUBLISHED_PAGE = HOME_PAGE + "/p/hongten_notepad_index.html"; 110 public static final String NOTEPAD_SUBSTANCE_SKINS_PAGE = HOME_PAGE + "/p/hongten_notepad_substance_skins.html"; 111 public static final String SUBSTANCE_SKINS_PAGE = NOTEPAD_SUBSTANCE_SKINS_PAGE + "#"; 112 public static final String NOTEPAD_PUBLISHED_BOOKMARK_PAGE = NOTEPAD_PUBLISHED_PAGE + "#"; 113 114 public static final int TABLE_ROW_HEIGHT = 20; 115 116 // Dialog messages and titles 117 public static final String CONFIM_EXIT = "Confim Exit"; 118 public static final String ACCESS_URL_REQUEST = "Access URL Request"; 119 public static final String ACCESS_URL = "Access URL : "; 120 121 public static final String FONT_LUCIDA_CONSOLE = "Lucida Console"; 122 public static final String FONT_TYPE = "宋体"; 123 public static final int FONT_SIZE = 12; 124 public static final int FONT_NUM = 148; 125 public static final int FONT_SIZE_NUM = 4; 126 public static final int FONT_STYLE_NUM = 0; 127 public static final String FONT_STYLE_DEFAULT = "Regular"; 128 public static final String DATE_FORMAT = "HH:mm MM/dd/yyyy"; 129 public static final String THIS_IS_A_SIMPLE = "This is a Simple"; 130 public static final String SIMPLE = "Simple"; 131 132 public static final String CURRENT_SINK = "Current Skin" + BLANK + COLOR + BLANK; 133 public static final String DESCRIPTION_WITH_COLOR = DESCRIPTION + BLANK + COLOR + BLANK; 134 public static final String CURRENT_FONT = "Current Font" + BLANK + COLOR + BLANK; 135 public static final String CURRENT_FONT_SIZE = "Current Font Size" + BLANK + COLOR + BLANK; 136 public static final String CURRENT_FONT_STYLE = "Current Font Style" + BLANK + COLOR + BLANK; 137 138 public static final String DO_YOU_WANT_TO_SAVE_CHANGES = "Do you want to save changes?"; 139 public static final String WHAT_DO_YOU_WANT_TO_FIND = "Please type what do you want to find."; 140 public static final String CAN_NOT_FIND = "Cannot find "; 141 public static final String MATCHES_REPLACED = " matches replaced!"; 142 143 public static final String FIND_WHAT = "Find What :"; 144 public static final String REPLACE_TO = "Replace To :"; 145 public static final String REPLACE_ALL = "Replace All"; 146 public static final String CASE_SENSITIVE = "Case Sensitive"; 147 public static final String FORWARD = "Forward"; 148 public static final String BACKWARD = "Backward"; 149 public static final String CANCEL = "Cancel"; 150 public static final String GB2312 = "GB2312"; 151 152 public static final String NOTEPAD_HOME_PAGE = "Home Page"; 153 public static final String NOTEPAD_SKINS = "Notepad Skins"; 154 public static final String SOURCE = "Source"; 155 public static final String SOURCE_CODE = SOURCE + " Code"; 156 public static final String SOURCE_CODE_DOWNLOAD = SOURCE_CODE + " Download"; 157 public static final String NOTEPAD_API = "Notepad API"; 158 159 public static final String SOURCE_CODE_BOOKMARK = "Source.Code"; 160 public static final String SOURCE_CODE_DOWNLOAD_BOOKMARK = SOURCE_CODE_BOOKMARK + ".Download"; 161 public static final String NOTEPAD_API_BOOKMARK = "Notepad.API"; 162 }
/notepad/src/main/java/com/b510/notepad/ui/AboutUI.java
1 package com.b510.notepad.ui; 2 3 import java.awt.Cursor; 4 import java.awt.event.MouseEvent; 5 import java.awt.event.MouseListener; 6 import java.awt.event.WindowAdapter; 7 import java.awt.event.WindowEvent; 8 9 import javax.swing.GroupLayout; 10 import javax.swing.ImageIcon; 11 import javax.swing.JButton; 12 import javax.swing.JLabel; 13 import javax.swing.JOptionPane; 14 import javax.swing.JPanel; 15 import javax.swing.JScrollPane; 16 import javax.swing.JTable; 17 import javax.swing.ListSelectionModel; 18 import javax.swing.SwingConstants; 19 import javax.swing.table.DefaultTableModel; 20 21 import org.apache.log4j.Logger; 22 23 import com.b510.notepad.common.Common; 24 import com.b510.notepad.util.HelpMenuUtil; 25 import com.b510.notepad.util.NotepadUtil; 26 27 /** 28 * Location : MainUI --> Help --> About Notepad<br> 29 * <p> 30 * The <code>AboutUI</code> display the information about this application.<br> 31 * <p> 32 * i.e., Author, Application Name, Application description, Version, Blog.etc.<br> 33 * <p> 34 * If you have a try to double-click the row which name is 'Blog', then the dialog will be displaying in front of this page.<br> 35 * The dialog is a access URL request dialog, and you will access the URL(<a href='http://www.cnblogs.com/hongten'>http://www.cnblogs.com/hongten</a>) if you click 'Yes'.<br> 36 * <p> 37 * If you want to use this class, you should do as below:<br> 38 * <p><blockquote><pre> 39 * <code>AboutUI aboutUI = new AboutUI("About Notepad");</code> 40 * </pre></blockquote><p> 41 * 42 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 43 * @created Nov 20, 2014 44 */ 45 public class AboutUI extends MainUI { 46 47 private static final long serialVersionUID = 1L; 48 49 static Logger log = Logger.getLogger(AboutUI.class); 50 51 private JLabel descriptionLabel; 52 private JButton hongtenButton; 53 private JTable aboutUITable; 54 private JPanel mainPanel; 55 private JScrollPane rightScrollPane; 56 57 private HelpMenuUtil help; 58 59 public AboutUI(String title) { 60 super(title); 61 initComponents(); 62 initSelf(); 63 setAlwaysOnTop(true); 64 addWindowListener(new WindowAdapter() { 65 @Override 66 public void windowClosing(WindowEvent e) { 67 AboutUI.this.setVisible(false); 68 help.distoryAboutUI(); 69 } 70 }); 71 } 72 73 public void initSelf() { 74 this.setVisible(true); 75 setResizable(false); 76 this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150); 77 } 78 79 private void initComponents() { 80 initElement(); 81 initHongtenButton(); 82 initAboutUITable(); 83 initDescriptionLabel(); 84 mainPanelLayout(); 85 } 86 87 private void initHongtenButton() { 88 hongtenButton.setIcon(new ImageIcon(this.getClass().getClassLoader().getResource(Common.HONGTEN_PIC))); 89 hongtenButton.setToolTipText(Common.ABOUT_NOTEPAD); 90 } 91 92 private void initAboutUITable() { 93 Object[][] values = new Object[][] { { Common.AUTHOR, Common.AUTHOR_NAME }, { Common.APPLICATION_NAME, Common.NOTEPAD_APP }, { Common.APPLICATION_DESCRIPTION, Common.APPLICATION_DESCRIPTION_DETAIL }, { Common.VERSION, Common.VERSION_VALUE }, { Common.BLOG, Common.HOME_PAGE } }; 94 95 String[] titles = new String[] { Common.ITEM, Common.DESCRIPTION }; 96 97 aboutUITable.setModel(new DefaultTableModel(values, titles) { 98 private static final long serialVersionUID = 1L; 99 boolean[] canEdit = new boolean[] { false, false }; 100 101 public boolean isCellEditable(int rowIndex, int columnIndex) { 102 return canEdit[columnIndex]; 103 } 104 }); 105 106 aboutUITable.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 107 aboutUITable.setOpaque(false); 108 aboutUITable.setRowHeight(Common.TABLE_ROW_HEIGHT); 109 aboutUITable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 110 aboutUITable.setSurrendersFocusOnKeystroke(true); 111 aboutUITable.getTableHeader().setReorderingAllowed(false); 112 aboutUITable.addMouseListener(new MouseListener() { 113 114 public void mouseReleased(MouseEvent e) { 115 116 } 117 118 public void mousePressed(MouseEvent e) { 119 if (e.getClickCount() == 2) { 120 matchUrlOperation(); 121 } 122 } 123 124 public void mouseExited(MouseEvent e) { 125 126 } 127 128 public void mouseEntered(MouseEvent e) { 129 130 } 131 132 public void mouseClicked(MouseEvent e) { 133 134 } 135 }); 136 rightScrollPane.setViewportView(aboutUITable); 137 } 138 139 private void matchUrlOperation() { 140 int id = aboutUITable.getSelectedRow(); 141 String url = (String) aboutUITable.getValueAt(id, 1); 142 if (url.equals(Common.HOME_PAGE)) { 143 askAccessBlogOperation(); 144 } 145 } 146 147 // Show a dialog to access URL request. 148 // You will access the URL if you click 'Yes'. 149 protected void askAccessBlogOperation() { 150 int option = JOptionPane.showConfirmDialog(AboutUI.this, Common.ACCESS_URL + Common.HOME_PAGE + Common.BLANK + Common.QUESTION_MARK, Common.ACCESS_URL_REQUEST, JOptionPane.YES_NO_OPTION); 151 if (option == JOptionPane.YES_OPTION) { 152 NotepadUtil.accessURL(Common.HOME_PAGE); 153 } 154 } 155 156 private void initDescriptionLabel() { 157 descriptionLabel.setFont(new java.awt.Font(Common.FONT_LUCIDA_CONSOLE, 1, 18)); 158 descriptionLabel.setHorizontalAlignment(SwingConstants.CENTER); 159 descriptionLabel.setText(Common.AUTHOR_DESC); 160 } 161 162 private void initElement() { 163 mainPanel = new JPanel(); 164 hongtenButton = new JButton(); 165 rightScrollPane = new JScrollPane(); 166 aboutUITable = new JTable(); 167 descriptionLabel = new JLabel(); 168 } 169 170 public void setHelpMenuUtil(HelpMenuUtil helpMenuUtil){ 171 this.help = helpMenuUtil; 172 } 173 174 /** 175 * If not necessary, please do not change 176 */ 177 private void mainPanelLayout() { 178 GroupLayout mainPanelLayout = new GroupLayout(mainPanel); 179 mainPanel.setLayout(mainPanelLayout); 180 mainPanelLayout.setHorizontalGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(mainPanelLayout.createSequentialGroup().addContainerGap().addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.TRAILING).addComponent(hongtenButton).addComponent(descriptionLabel, GroupLayout.PREFERRED_SIZE, 265, GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addComponent(rightScrollPane, GroupLayout.PREFERRED_SIZE, 243, GroupLayout.PREFERRED_SIZE).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); 181 mainPanelLayout.setVerticalGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(mainPanelLayout.createSequentialGroup().addContainerGap().addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false).addComponent(rightScrollPane, GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE).addGroup(mainPanelLayout.createSequentialGroup().addComponent(hongtenButton, GroupLayout.PREFERRED_SIZE, 256, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(descriptionLabel, GroupLayout.PREFERRED_SIZE, 31, GroupLayout.PREFERRED_SIZE))).addGap(0, 0, Short.MAX_VALUE))); 182 183 GroupLayout layout = new GroupLayout(getContentPane()); 184 getContentPane().setLayout(layout); 185 layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(mainPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addContainerGap())); 186 layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(mainPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addContainerGap())); 187 188 pack(); 189 } 190 }
/notepad/src/main/java/com/b510/notepad/ui/FindManagerUI.java
1 package com.b510.notepad.ui; 2 3 import java.awt.Dimension; 4 import java.awt.event.ActionEvent; 5 import java.awt.event.WindowAdapter; 6 import java.awt.event.WindowEvent; 7 8 import javax.swing.GroupLayout; 9 import javax.swing.JButton; 10 import javax.swing.JCheckBox; 11 import javax.swing.JLabel; 12 import javax.swing.JOptionPane; 13 import javax.swing.JPanel; 14 import javax.swing.JRadioButton; 15 import javax.swing.JTextField; 16 import javax.swing.LayoutStyle; 17 18 import org.apache.log4j.Logger; 19 20 import com.b510.notepad.common.Common; 21 import com.b510.notepad.util.EditMenuUtil; 22 23 /** 24 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 25 * @created Nov 20, 2014 26 */ 27 public class FindManagerUI extends MainUI { 28 private static final long serialVersionUID = 1L; 29 static Logger log = Logger.getLogger(FindManagerUI.class); 30 31 private JPanel bGJPanel; 32 private JRadioButton backwardJRadioButton; 33 private JButton cancelJButton; 34 private JCheckBox caseSensitiveJCheckBox; 35 private JButton findNextJButton; 36 private JLabel findWhatJLabel; 37 private JRadioButton forwardJRadioButton; 38 private JTextField keyWordJTextField; 39 40 public static boolean isForward = true; 41 public static boolean isCaseSensitive = false; 42 43 private EditMenuUtil edit; 44 45 public FindManagerUI(String title) { 46 super(title); 47 initComponents(); 48 49 initSelf(); 50 setAlwaysOnTop(true); 51 addWindowListener(new WindowAdapter() { 52 @Override 53 public void windowClosing(WindowEvent e) { 54 distoryFindManagerUI(); 55 } 56 }); 57 } 58 59 public void initSelf() { 60 this.setVisible(true); 61 setResizable(false); 62 this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150); 63 } 64 65 /** 66 * If not necessary, do not change the order. 67 */ 68 private void initComponents() { 69 initElements(); 70 initFindWhat(); 71 initCaseSensitive(); 72 initFindNext(); 73 initCancle(); 74 initDirection(); 75 initLayout(); 76 } 77 78 private void initElements() { 79 bGJPanel = new JPanel(); 80 findWhatJLabel = new JLabel(); 81 keyWordJTextField = new JTextField(); 82 caseSensitiveJCheckBox = new JCheckBox(); 83 findNextJButton = new JButton(); 84 cancelJButton = new JButton(); 85 forwardJRadioButton = new JRadioButton(); 86 backwardJRadioButton = new JRadioButton(); 87 } 88 89 private void initDirection() { 90 forwardJRadioButton.setSelected(true); 91 forwardJRadioButton.setText(Common.FORWARD); 92 forwardJRadioButton.addActionListener(this); 93 94 backwardJRadioButton.setText(Common.BACKWARD); 95 backwardJRadioButton.addActionListener(this); 96 } 97 98 private void initCancle() { 99 cancelJButton.setText(Common.CANCEL); 100 cancelJButton.setMaximumSize(new Dimension(87, 23)); 101 cancelJButton.setMinimumSize(new Dimension(87, 23)); 102 cancelJButton.setPreferredSize(new Dimension(87, 23)); 103 cancelJButton.addActionListener(this); 104 } 105 106 private void initFindNext() { 107 findNextJButton.setText(Common.FIND_NEXT); 108 findNextJButton.addActionListener(this); 109 } 110 111 private void initCaseSensitive() { 112 caseSensitiveJCheckBox.setText(Common.CASE_SENSITIVE); 113 caseSensitiveJCheckBox.addActionListener(this); 114 } 115 116 private void initFindWhat() { 117 findWhatJLabel.setText(Common.FIND_WHAT); 118 119 if (null == textArea.getSelectedText() || Common.EMPTY.equals(textArea.getSelectedText().trim())) { 120 keyWordJTextField.setText(findWhat); 121 } else if(null != textArea.getSelectedText() && !Common.EMPTY.equals(textArea.getSelectedText().trim())){ 122 keyWordJTextField.setText(textArea.getSelectedText()); 123 }else{ 124 keyWordJTextField.setText(findWhat); 125 } 126 } 127 128 public void actionPerformed(ActionEvent e) { 129 if (e.getSource() == backwardJRadioButton) { 130 directionOfOperation(false); 131 } else if (e.getSource() == forwardJRadioButton) { 132 directionOfOperation(true); 133 } else if (e.getSource() == findNextJButton) { 134 findNextOperation(); 135 } else if (e.getSource() == cancelJButton) { 136 distoryFindManagerUI(); 137 } else if (e.getSource() == caseSensitiveJCheckBox) { 138 caseSensitiveSwitch(); 139 } 140 } 141 142 private void findNextOperation() { 143 findWhat = keyWordJTextField.getText(); 144 if (Common.EMPTY.equals(findWhat)) { 145 JOptionPane.showMessageDialog(FindManagerUI.this, Common.WHAT_DO_YOU_WANT_TO_FIND, Common.NOTEPAD, JOptionPane.INFORMATION_MESSAGE); 146 keyWordJTextField.setFocusable(true); 147 } 148 edit.findNext(); 149 } 150 151 /** 152 * Operation for Cancel button 153 */ 154 private void distoryFindManagerUI() { 155 FindManagerUI.this.setVisible(false); 156 edit.distoryFindManagerUI(); 157 } 158 159 /** 160 * Case Sensitive Switch 161 */ 162 private void caseSensitiveSwitch() { 163 if (null == caseSensitiveJCheckBox.getSelectedObjects()) { 164 isCaseSensitive = false; 165 } else { 166 isCaseSensitive = true; 167 } 168 log.debug(isCaseSensitive); 169 } 170 171 /** 172 * Direction of Operation<br> 173 * <li>Forward : <code>directionOfOperation(true);</code></li> 174 * <li>Backward : <code>directionOfOperation(false);</code></li> 175 * @param b <code>b = true;</code> Forward is selected; <code>b = false;</code> Backward is selected.<br> 176 */ 177 private void directionOfOperation(boolean b) { 178 isForward = b; 179 forwardJRadioButton.setSelected(b); 180 backwardJRadioButton.setSelected(!b); 181 log.debug(isForward); 182 } 183 184 185 public void setEditMenuUtil(EditMenuUtil editMenuUtil) { 186 this.edit = editMenuUtil; 187 } 188 189 /** 190 * If not necessary, do not change. 191 */ 192 private void initLayout() { 193 GroupLayout bGJPanelLayout = new GroupLayout(bGJPanel); 194 bGJPanel.setLayout(bGJPanelLayout); 195 bGJPanelLayout.setHorizontalGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(bGJPanelLayout.createSequentialGroup().addContainerGap().addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(bGJPanelLayout.createSequentialGroup().addComponent(findWhatJLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(keyWordJTextField, GroupLayout.PREFERRED_SIZE, 221, GroupLayout.PREFERRED_SIZE)).addGroup(bGJPanelLayout.createSequentialGroup().addComponent(caseSensitiveJCheckBox).addGap(18, 18, 18).addComponent(forwardJRadioButton).addGap(18, 18, 18).addComponent(backwardJRadioButton))).addGap(18, 18, 18).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(findNextJButton, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(cancelJButton, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addContainerGap())); 196 bGJPanelLayout.setVerticalGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(bGJPanelLayout.createSequentialGroup().addGap(14, 14, 14).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(findWhatJLabel).addComponent(keyWordJTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addComponent(findNextJButton)).addGap(18, 18, 18).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(cancelJButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addComponent(caseSensitiveJCheckBox).addComponent(forwardJRadioButton).addComponent(backwardJRadioButton)).addContainerGap())); 197 198 GroupLayout layout = new GroupLayout(getContentPane()); 199 getContentPane().setLayout(layout); 200 layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(bGJPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addContainerGap())); 201 layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(bGJPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addContainerGap())); 202 pack(); 203 } 204 }
/notepad/src/main/java/com/b510/notepad/ui/FontManagerUI.java
1 package com.b510.notepad.ui; 2 3 import java.awt.Font; 4 import java.awt.GraphicsEnvironment; 5 import java.awt.event.ActionEvent; 6 import java.awt.event.WindowAdapter; 7 import java.awt.event.WindowEvent; 8 9 import javax.swing.DefaultComboBoxModel; 10 import javax.swing.GroupLayout; 11 import javax.swing.JComboBox; 12 import javax.swing.JLabel; 13 import javax.swing.JSeparator; 14 import javax.swing.LayoutStyle; 15 16 import com.b510.notepad.common.Common; 17 import com.b510.notepad.util.FormatMenuUtil; 18 19 /** 20 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 21 * @created Nov 20, 2014 22 */ 23 public class FontManagerUI extends MainUI { 24 private static final long serialVersionUID = -37011351219515242L; 25 26 private JLabel currentFontDescJLabel; 27 private JLabel currentFontJLabel; 28 private JLabel descJlabel; 29 private JSeparator line; 30 private JComboBox<String> fontJComboBox; 31 32 private FormatMenuUtil format; 33 34 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 35 String fontNames[] = ge.getAvailableFontFamilyNames(); 36 37 public static String FONT_TYPE = Common.FONT_TYPE; 38 public static int FONT_SIZE = Common.FONT_SIZE; 39 public static String FONT_STYPLE = Common.FONT_STYLE_DEFAULT; 40 41 public FontManagerUI(String title) { 42 super(title); 43 initComponents(); 44 45 initSelf(); 46 setAlwaysOnTop(true); 47 addWindowListener(new WindowAdapter() { 48 @Override 49 public void windowClosing(WindowEvent e) { 50 FontManagerUI.this.setVisible(false); 51 format.distoryFontManagerUI(); 52 } 53 }); 54 } 55 56 public void initSelf() { 57 this.setVisible(true); 58 setResizable(false); 59 this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150); 60 } 61 62 private void initComponents() { 63 initElement(); 64 currentFontJLabel.setText(Common.CURRENT_FONT); 65 66 fontJComboBox.setModel(new DefaultComboBoxModel<String>(fontNames)); 67 int i = 0; 68 for(String name : fontNames){ 69 if(FontManagerUI.FONT_TYPE.equals(name)){ 70 fontNum = i; 71 } 72 i++; 73 } 74 fontJComboBox.setSelectedIndex(fontNum); 75 fontJComboBox.addActionListener(this); 76 77 descJlabel.setText(Common.DESCRIPTION_WITH_COLOR); 78 79 currentFontDescJLabel.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE)); 80 currentFontDescJLabel.setText(Common.THIS_IS_A_SIMPLE); 81 pageGourpLayout(); 82 } 83 84 private void initElement() { 85 currentFontJLabel = new JLabel(); 86 fontJComboBox = new JComboBox<String>(); 87 descJlabel = new JLabel(); 88 currentFontDescJLabel = new JLabel(); 89 line = new JSeparator(); 90 } 91 92 @Override 93 public void actionPerformed(ActionEvent e) { 94 if (e.getSource() == fontJComboBox) { 95 updateSkin(); 96 } 97 } 98 99 public synchronized void updateSkin() { 100 fontNum = fontJComboBox.getSelectedIndex(); 101 log.debug(fontJComboBox.getSelectedItem().toString()); 102 FontManagerUI.FONT_TYPE = fontJComboBox.getSelectedItem().toString(); 103 currentFontDescJLabel.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE)); 104 currentFontDescJLabel.setText(Common.THIS_IS_A_SIMPLE); 105 textArea.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE)); 106 setJUI(); 107 } 108 109 public void setFormatMenuUtil(FormatMenuUtil formatMenuUtil){ 110 this.format = formatMenuUtil; 111 } 112 113 /** 114 * If not necessary, please do not change 115 */ 116 private void pageGourpLayout() { 117 GroupLayout layout = new GroupLayout(getContentPane()); 118 getContentPane().setLayout(layout); 119 horizontalGroupLayout(layout); 120 verticalGroupLayout(layout); 121 pack(); 122 } 123 124 private void verticalGroupLayout(GroupLayout layout) { 125 layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup( 126 layout.createSequentialGroup() 127 .addGap(40, 40, 40) 128 .addGroup( 129 layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(currentFontJLabel) 130 .addComponent(fontJComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addGap(26, 26, 26) 131 .addComponent(line, GroupLayout.PREFERRED_SIZE, 11, GroupLayout.PREFERRED_SIZE).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) 132 .addComponent(descJlabel).addGap(18, 18, 18).addComponent(currentFontDescJLabel).addContainerGap(47, Short.MAX_VALUE))); 133 } 134 135 private void horizontalGroupLayout(GroupLayout layout) { 136 layout.setHorizontalGroup(layout 137 .createParallelGroup(GroupLayout.Alignment.LEADING) 138 .addGroup( 139 layout.createSequentialGroup() 140 .addGap(21, 21, 21) 141 .addGroup( 142 layout.createParallelGroup(GroupLayout.Alignment.LEADING) 143 .addComponent(currentFontDescJLabel) 144 .addComponent(descJlabel) 145 .addGroup( 146 layout.createSequentialGroup().addComponent(currentFontJLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) 147 .addComponent(fontJComboBox, GroupLayout.PREFERRED_SIZE, 195, GroupLayout.PREFERRED_SIZE))) 148 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 149 .addGroup(layout.createSequentialGroup().addComponent(line, GroupLayout.PREFERRED_SIZE, 355, GroupLayout.PREFERRED_SIZE).addGap(0, 0, Short.MAX_VALUE))); 150 } 151 }
/notepad/src/main/java/com/b510/notepad/ui/FontSizeManagerUI.java
1 package com.b510.notepad.ui; 2 3 import java.awt.Font; 4 import java.awt.event.ActionEvent; 5 import java.awt.event.WindowAdapter; 6 import java.awt.event.WindowEvent; 7 8 import javax.swing.DefaultComboBoxModel; 9 import javax.swing.GroupLayout; 10 import javax.swing.JComboBox; 11 import javax.swing.JLabel; 12 import javax.swing.JSeparator; 13 import javax.swing.LayoutStyle; 14 15 import com.b510.notepad.common.Common; 16 import com.b510.notepad.util.FormatMenuUtil; 17 18 /** 19 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 20 * @created Nov 20, 2014 21 */ 22 public class FontSizeManagerUI extends MainUI { 23 private static final long serialVersionUID = -37011351219515242L; 24 25 private JLabel currentFontSizeDescJLabel; 26 private JLabel currentFontSizeJLabel; 27 private JLabel descJlabel; 28 private JSeparator line; 29 private JComboBox<String> fontSizeJComboBox; 30 31 private FormatMenuUtil format; 32 33 String fontSizes[] = {"8", "9", "10", "11", "12", "14", "16", "18", "20", "22", "24", "26", "28", "36", "48", "72"}; 34 35 public FontSizeManagerUI(String title) { 36 super(title); 37 initComponents(); 38 39 initSelf(); 40 setAlwaysOnTop(true); 41 addWindowListener(new WindowAdapter() { 42 @Override 43 public void windowClosing(WindowEvent e) { 44 FontSizeManagerUI.this.setVisible(false); 45 format.distoryFontSizeManagerUI(); 46 } 47 }); 48 } 49 50 public void initSelf() { 51 this.setVisible(true); 52 setResizable(false); 53 this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150); 54 } 55 56 private void initComponents() { 57 initElement(); 58 currentFontSizeJLabel.setText(Common.CURRENT_FONT_SIZE); 59 60 fontSizeJComboBox.setModel(new DefaultComboBoxModel<String>(fontSizes)); 61 int i = 0; 62 for(String size : fontSizes){ 63 if(Integer.valueOf(size) == FontManagerUI.FONT_SIZE){ 64 fontSizeNum = i; 65 } 66 i++; 67 } 68 fontSizeJComboBox.setSelectedIndex(fontSizeNum); 69 fontSizeJComboBox.addActionListener(this); 70 71 descJlabel.setText(Common.DESCRIPTION_WITH_COLOR); 72 73 currentFontSizeDescJLabel.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE)); 74 currentFontSizeDescJLabel.setText(Common.SIMPLE); 75 pageGourpLayout(); 76 } 77 78 private void initElement() { 79 currentFontSizeJLabel = new JLabel(); 80 fontSizeJComboBox = new JComboBox<String>(); 81 descJlabel = new JLabel(); 82 currentFontSizeDescJLabel = new JLabel(); 83 line = new JSeparator(); 84 } 85 86 @Override 87 public void actionPerformed(ActionEvent e) { 88 if (e.getSource() == fontSizeJComboBox) { 89 updateSkin(); 90 } 91 } 92 93 public synchronized void updateSkin() { 94 fontNum = fontSizeJComboBox.getSelectedIndex(); 95 log.debug(fontSizeJComboBox.getSelectedItem().toString()); 96 FontManagerUI.FONT_SIZE = Integer.valueOf((String) fontSizeJComboBox.getSelectedItem()); 97 currentFontSizeDescJLabel.setFont(new Font(FontManagerUI.FONT_TYPE, Font.PLAIN, FontManagerUI.FONT_SIZE)); 98 currentFontSizeDescJLabel.setText(Common.SIMPLE); 99 textArea.setFont(new Font(FontManagerUI.FONT_TYPE, Font.PLAIN, FontManagerUI.FONT_SIZE)); 100 setJUI(); 101 } 102 103 public void setFormatMenuUtil(FormatMenuUtil formatMenuUtil){ 104 this.format = formatMenuUtil; 105 } 106 107 /** 108 * If not necessary, please do not change 109 */ 110 private void pageGourpLayout() { 111 GroupLayout layout = new GroupLayout(getContentPane()); 112 getContentPane().setLayout(layout); 113 horizontalGroupLayout(layout); 114 verticalGroupLayout(layout); 115 pack(); 116 } 117 118 private void verticalGroupLayout(GroupLayout layout) { 119 layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup( 120 layout.createSequentialGroup() 121 .addGap(40, 40, 40) 122 .addGroup( 123 layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(currentFontSizeJLabel) 124 .addComponent(fontSizeJComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addGap(26, 26, 26) 125 .addComponent(line, GroupLayout.PREFERRED_SIZE, 11, GroupLayout.PREFERRED_SIZE).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) 126 .addComponent(descJlabel).addGap(18, 18, 18).addComponent(currentFontSizeDescJLabel).addContainerGap(47, Short.MAX_VALUE))); 127 } 128 129 private void horizontalGroupLayout(GroupLayout layout) { 130 layout.setHorizontalGroup(layout 131 .createParallelGroup(GroupLayout.Alignment.LEADING) 132 .addGroup( 133 layout.createSequentialGroup() 134 .addGap(21, 21, 21) 135 .addGroup( 136 layout.createParallelGroup(GroupLayout.Alignment.LEADING) 137 .addComponent(currentFontSizeDescJLabel) 138 .addComponent(descJlabel) 139 .addGroup( 140 layout.createSequentialGroup().addComponent(currentFontSizeJLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) 141 .addComponent(fontSizeJComboBox, GroupLayout.PREFERRED_SIZE, 195, GroupLayout.PREFERRED_SIZE))) 142 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 143 .addGroup(layout.createSequentialGroup().addComponent(line, GroupLayout.PREFERRED_SIZE, 355, GroupLayout.PREFERRED_SIZE).addGap(0, 0, Short.MAX_VALUE))); 144 } 145 }
/notepad/src/main/java/com/b510/notepad/ui/FontStyleManagerUI.java
1 package com.b510.notepad.ui; 2 3 import java.awt.Font; 4 import java.awt.event.ActionEvent; 5 import java.awt.event.WindowAdapter; 6 import java.awt.event.WindowEvent; 7 8 import javax.swing.DefaultComboBoxModel; 9 import javax.swing.GroupLayout; 10 import javax.swing.JComboBox; 11 import javax.swing.JLabel; 12 import javax.swing.JSeparator; 13 import javax.swing.LayoutStyle; 14 15 import com.b510.notepad.common.Common; 16 import com.b510.notepad.util.FormatMenuUtil; 17 18 /** 19 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 20 * @created Nov 20, 2014 21 */ 22 public class FontStyleManagerUI extends MainUI { 23 private static final long serialVersionUID = -37011351219515242L; 24 25 private JLabel currentFontStyleDescJLabel; 26 private JLabel currentFontStyleJLabel; 27 private JLabel descJlabel; 28 private JSeparator line; 29 private JComboBox<String> fontStyleJComboBox; 30 31 private FormatMenuUtil format; 32 33 String fontStyles[] = {"Regular", "Italic", "Bold", "Bold Italic"}; 34 35 public FontStyleManagerUI(String title) { 36 super(title); 37 initComponents(); 38 39 initSelf(); 40 setAlwaysOnTop(true); 41 addWindowListener(new WindowAdapter() { 42 @Override 43 public void windowClosing(WindowEvent e) { 44 FontStyleManagerUI.this.setVisible(false); 45 format.distoryFontSizeManagerUI(); 46 } 47 }); 48 } 49 50 public void initSelf() { 51 this.setVisible(true); 52 setResizable(false); 53 this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150); 54 } 55 56 private void initComponents() { 57 initElement(); 58 currentFontStyleJLabel.setText(Common.CURRENT_FONT_STYLE); 59 60 fontStyleJComboBox.setModel(new DefaultComboBoxModel<String>(fontStyles)); 61 int i = 0; 62 for(String style : fontStyles){ 63 if(style.equals(FontManagerUI.FONT_STYPLE)){ 64 fontStyleNum = i; 65 } 66 i++; 67 } 68 fontStyleJComboBox.setSelectedIndex(fontStyleNum); 69 fontStyleJComboBox.addActionListener(this); 70 71 descJlabel.setText(Common.DESCRIPTION_WITH_COLOR); 72 // do here... 73 currentFontStyleDescJLabel.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE)); 74 currentFontStyleDescJLabel.setText(Common.SIMPLE); 75 pageGourpLayout(); 76 } 77 78 private void initElement() { 79 currentFontStyleJLabel = new JLabel(); 80 fontStyleJComboBox = new JComboBox<String>(); 81 descJlabel = new JLabel(); 82 currentFontStyleDescJLabel = new JLabel(); 83 line = new JSeparator(); 84 } 85 86 @Override 87 public void actionPerformed(ActionEvent e) { 88 if (e.getSource() == fontStyleJComboBox) { 89 updateSkin(); 90 } 91 } 92 93 public synchronized void updateSkin() { 94 fontStyleNum = fontStyleJComboBox.getSelectedIndex(); 95 FontManagerUI.FONT_STYPLE = (String) fontStyleJComboBox.getSelectedItem(); 96 currentFontStyleDescJLabel.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE)); 97 currentFontStyleDescJLabel.setText(Common.SIMPLE); 98 textArea.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE)); 99 setJUI(); 100 } 101 102 public void setFormatMenuUtil(FormatMenuUtil formatMenuUtil){ 103 this.format = formatMenuUtil; 104 } 105 106 /** 107 * If not necessary, please do not change 108 */ 109 private void pageGourpLayout() { 110 GroupLayout layout = new GroupLayout(getContentPane()); 111 getContentPane().setLayout(layout); 112 horizontalGroupLayout(layout); 113 verticalGroupLayout(layout); 114 pack(); 115 } 116 117 private void verticalGroupLayout(GroupLayout layout) { 118 layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup( 119 layout.createSequentialGroup() 120 .addGap(40, 40, 40) 121 .addGroup( 122 layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(currentFontStyleJLabel) 123 .addComponent(fontStyleJComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addGap(26, 26, 26) 124 .addComponent(line, GroupLayout.PREFERRED_SIZE, 11, GroupLayout.PREFERRED_SIZE).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) 125 .addComponent(descJlabel).addGap(18, 18, 18).addComponent(currentFontStyleDescJLabel).addContainerGap(47, Short.MAX_VALUE))); 126 } 127 128 private void horizontalGroupLayout(GroupLayout layout) { 129 layout.setHorizontalGroup(layout 130 .createParallelGroup(GroupLayout.Alignment.LEADING) 131 .addGroup( 132 layout.createSequentialGroup() 133 .addGap(21, 21, 21) 134 .addGroup( 135 layout.createParallelGroup(GroupLayout.Alignment.LEADING) 136 .addComponent(currentFontStyleDescJLabel) 137 .addComponent(descJlabel) 138 .addGroup( 139 layout.createSequentialGroup().addComponent(currentFontStyleJLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) 140 .addComponent(fontStyleJComboBox, GroupLayout.PREFERRED_SIZE, 195, GroupLayout.PREFERRED_SIZE))) 141 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 142 .addGroup(layout.createSequentialGroup().addComponent(line, GroupLayout.PREFERRED_SIZE, 355, GroupLayout.PREFERRED_SIZE).addGap(0, 0, Short.MAX_VALUE))); 143 } 144 }
/notepad/src/main/java/com/b510/notepad/ui/JUI.java
1 /** 2 * 3 */ 4 package com.b510.notepad.ui; 5 6 import javax.swing.JDialog; 7 import javax.swing.JFrame; 8 import javax.swing.UIManager; 9 import javax.swing.UnsupportedLookAndFeelException; 10 11 import org.apache.log4j.Logger; 12 import org.jvnet.substance.SubstanceLookAndFeel; 13 import org.jvnet.substance.border.StandardBorderPainter; 14 import org.jvnet.substance.button.ClassicButtonShaper; 15 import org.jvnet.substance.painter.StandardGradientPainter; 16 import org.jvnet.substance.skin.AutumnSkin; 17 import org.jvnet.substance.skin.BusinessBlackSteelSkin; 18 import org.jvnet.substance.skin.ChallengerDeepSkin; 19 import org.jvnet.substance.skin.CremeCoffeeSkin; 20 import org.jvnet.substance.skin.CremeSkin; 21 import org.jvnet.substance.skin.EbonyHighContrastSkin; 22 import org.jvnet.substance.skin.EmeraldDuskSkin; 23 import org.jvnet.substance.skin.FieldOfWheatSkin; 24 import org.jvnet.substance.skin.FindingNemoSkin; 25 import org.jvnet.substance.skin.GreenMagicSkin; 26 import org.jvnet.substance.skin.MagmaSkin; 27 import org.jvnet.substance.skin.MangoSkin; 28 import org.jvnet.substance.skin.MistSilverSkin; 29 import org.jvnet.substance.skin.ModerateSkin; 30 import org.jvnet.substance.skin.NebulaBrickWallSkin; 31 import org.jvnet.substance.skin.NebulaSkin; 32 import org.jvnet.substance.skin.OfficeBlue2007Skin; 33 import org.jvnet.substance.skin.RavenGraphiteGlassSkin; 34 import org.jvnet.substance.skin.RavenGraphiteSkin; 35 import org.jvnet.substance.skin.RavenSkin; 36 import org.jvnet.substance.skin.SaharaSkin; 37 import org.jvnet.substance.skin.SubstanceAbstractSkin; 38 import org.jvnet.substance.theme.SubstanceAquaTheme; 39 import org.jvnet.substance.watermark.SubstanceBubblesWatermark; 40 41 /** 42 * The basic class extends <code>java.awt.JFrame</code>, there are three methods provided:<br> 43 * <code>getSkin()</code> to change the frame skin.<br> 44 * and there are 21 skins to provided. And the<br> 45 * default skin is <code>MagmaSkin</code> .You can change value to change <br> 46 * skin if possible. and you should call the method <code>setJUI()</code> to refresh the page when you change the value. 47 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 48 * @created Nov 19, 2014 49 */ 50 public class JUI extends JFrame { 51 52 private static final long serialVersionUID = 1L; 53 54 Logger log = Logger.getLogger(JUI.class); 55 56 static SubstanceAbstractSkin skin; 57 static int skinNum = 11; 58 String title; 59 60 /** 61 * Total skins : 21. Get the skin according to the <code>skinNums</code> value, and the default skin is <code>MagmaSkin</code> 62 * @param num <code>skinNum</code> value 63 * @return 64 */ 65 public SubstanceAbstractSkin getSkin(int num) { 66 switch (num) { 67 case 1: 68 skin = new AutumnSkin(); 69 break; 70 case 2: 71 skin = new BusinessBlackSteelSkin(); 72 break; 73 case 3: 74 skin = new ChallengerDeepSkin(); 75 break; 76 case 4: 77 skin = new CremeCoffeeSkin(); 78 break; 79 case 5: 80 skin = new CremeSkin(); 81 break; 82 case 6: 83 skin = new EbonyHighContrastSkin(); 84 break; 85 case 7: 86 skin = new EmeraldDuskSkin(); 87 break; 88 case 8: 89 skin = new FieldOfWheatSkin(); 90 break; 91 case 9: 92 skin = new FindingNemoSkin(); 93 break; 94 case 10: 95 skin = new GreenMagicSkin(); 96 break; 97 case 11: 98 skin = new MagmaSkin(); 99 break; 100 case 12: 101 skin = new MangoSkin(); 102 break; 103 case 13: 104 skin = new MistSilverSkin(); 105 break; 106 case 14: 107 skin = new ModerateSkin(); 108 break; 109 case 15: 110 skin = new NebulaBrickWallSkin(); 111 break; 112 case 16: 113 skin = new NebulaSkin(); 114 break; 115 case 17: 116 skin = new OfficeBlue2007Skin(); 117 break; 118 case 18: 119 skin = new RavenGraphiteGlassSkin(); 120 break; 121 case 19: 122 skin = new RavenGraphiteSkin(); 123 break; 124 case 20: 125 skin = new RavenSkin(); 126 break; 127 case 21: 128 skin = new SaharaSkin(); 129 break; 130 default: 131 skin = new FieldOfWheatSkin(); 132 break; 133 } 134 return skin; 135 } 136 137 /** 138 * Set the page UI. including the theme, skin, watermark.etc. 139 */ 140 public void setJUI() { 141 try { 142 UIManager.setLookAndFeel(new SubstanceLookAndFeel()); 143 JFrame.setDefaultLookAndFeelDecorated(true); 144 JDialog.setDefaultLookAndFeelDecorated(true); 145 SubstanceLookAndFeel.setCurrentTheme(new SubstanceAquaTheme()); 146 SubstanceLookAndFeel.setSkin(getSkin(skinNum)); 147 SubstanceLookAndFeel.setCurrentButtonShaper(new ClassicButtonShaper()); 148 SubstanceLookAndFeel.setCurrentWatermark(new SubstanceBubblesWatermark()); 149 SubstanceLookAndFeel.setCurrentBorderPainter(new StandardBorderPainter()); 150 SubstanceLookAndFeel.setCurrentGradientPainter(new StandardGradientPainter()); 151 } catch (UnsupportedLookAndFeelException e1) { 152 e1.printStackTrace(); 153 } 154 } 155 156 public JUI(String title) { 157 this.title = title; 158 setJUI(); 159 } 160 161 public void init() { 162 163 } 164 }
/notepad/src/main/java/com/b510/notepad/ui/MainUI.java
1 /** 2 * 3 */ 4 package com.b510.notepad.ui; 5 6 import java.awt.Font; 7 import java.awt.Rectangle; 8 import java.awt.event.ActionEvent; 9 import java.awt.event.InputEvent; 10 import java.awt.event.MouseEvent; 11 import java.awt.event.MouseMotionListener; 12 import java.awt.event.WindowAdapter; 13 import java.awt.event.WindowEvent; 14 15 import javax.swing.JMenu; 16 import javax.swing.JMenuBar; 17 import javax.swing.JMenuItem; 18 import javax.swing.JScrollPane; 19 import javax.swing.JSeparator; 20 import javax.swing.JTextArea; 21 import javax.swing.KeyStroke; 22 import javax.swing.event.CaretEvent; 23 import javax.swing.event.CaretListener; 24 import javax.swing.event.UndoableEditEvent; 25 import javax.swing.event.UndoableEditListener; 26 import javax.swing.undo.UndoManager; 27 28 import org.apache.log4j.Logger; 29 30 import com.b510.notepad.common.Common; 31 import com.b510.notepad.util.EditMenuUtil; 32 import com.b510.notepad.util.FileMenuUtil; 33 import com.b510.notepad.util.FormatMenuUtil; 34 import com.b510.notepad.util.HelpMenuUtil; 35 import com.b510.notepad.util.NotepadUtil; 36 import com.b510.notepad.util.ViewMenuUtil; 37 38 /** 39 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 40 * @created Nov 19, 2014 41 */ 42 public class MainUI extends NotepadUI { 43 44 private static final long serialVersionUID = 1L; 45 46 static Logger log = Logger.getLogger(MainUI.class); 47 48 JMenuBar menuBar; 49 JSeparator line; 50 // Menus 51 JMenu file, edit, format, view, help, viewHelp, source; 52 // File Items 53 JMenuItem news, open, save, saveAs, properties, exit; 54 // Edit Items 55 JMenuItem undo, copy, paste, cut, find, findNext, replace, selectAll, timeDate; 56 // Format Items 57 JMenuItem wordWrap, resetFont, font, fontSize, fontStyle; 58 // View Items 59 JMenuItem skin; 60 // Help Items 61 JMenuItem about, homePage, skinPage, sourceCode, sourceCodeDownload, api; 62 // textArea 63 public static JTextArea textArea; 64 // textArea font 65 Font textAreaFont; 66 // textArea scroll 67 JScrollPane textAreaScroll; 68 69 public static UndoManager undoManager; 70 71 public static String filePath = Common.EMPTY; 72 boolean saved = false; 73 public static boolean lineWrap = true; 74 // Default position is (0, 0) 75 public static int pointX = 0; 76 public static int pointY = 0; 77 public static String savedText = Common.EMPTY; 78 public static int fontNum = Common.FONT_NUM; 79 public static int fontSizeNum = Common.FONT_SIZE_NUM; 80 public static int fontStyleNum = Common.FONT_STYLE_NUM; 81 public static String findWhat = Common.EMPTY; 82 83 private void setMainUIXY() { 84 pointX = getMainUIX(); 85 pointY = getMainUIY(); 86 } 87 88 private int getMainUIY() { 89 return (int) getLocation().getY(); 90 } 91 92 private int getMainUIX() { 93 return (int) getLocation().getX(); 94 } 95 96 public MainUI(String title) { 97 super(title); 98 setTitle(title); 99 } 100 101 public void init() { 102 initMenu(); 103 initTextArea(); 104 this.setResizable(true); 105 this.setBounds(new Rectangle(150, 100, 800, 550)); 106 this.setVisible(true); 107 addWindowListener(new WindowAdapter() { 108 public void windowClosing(WindowEvent e) { 109 FileMenuUtil file = new FileMenuUtil(Common.EMPTY); 110 file.exit(MainUI.this); 111 } 112 }); 113 114 setMainUIXY(); 115 } 116 117 private void initMenu() { 118 menuBar(); 119 menuFile(); 120 menuEdit(); 121 menuFormat(); 122 menuView(); 123 menuHelp(); 124 setJMenuBar(menuBar); 125 setDisabledMenuAtCreating(false); 126 } 127 128 private void menuBar() { 129 menuBar = new JMenuBar(); 130 } 131 132 private void menuFile() { 133 file = new JMenu(Common.FILE); 134 135 news = new JMenuItem(Common.NEW); 136 news.addActionListener(this); 137 news.setAccelerator(KeyStroke.getKeyStroke(Common.N, InputEvent.CTRL_MASK)); 138 file.add(news); 139 140 open = new JMenuItem(Common.OPEN); 141 open.addActionListener(this); 142 open.setAccelerator(KeyStroke.getKeyStroke(Common.O, InputEvent.CTRL_MASK)); 143 file.add(open); 144 145 save = new JMenuItem(Common.SAVE); 146 save.addActionListener(this); 147 save.setAccelerator(KeyStroke.getKeyStroke(Common.S, InputEvent.CTRL_MASK)); 148 file.add(save); 149 150 saveAs = new JMenuItem(Common.SAVE_AS); 151 saveAs.addActionListener(this); 152 saveAs.setAccelerator(KeyStroke.getKeyStroke(Common.S, InputEvent.CTRL_MASK + InputEvent.SHIFT_MASK)); 153 file.add(saveAs); 154 155 line = new JSeparator(); 156 file.add(line); 157 158 properties = new JMenuItem(Common.PROPERTIES); 159 properties.addActionListener(this); 160 file.add(properties); 161 162 line = new JSeparator(); 163 file.add(line); 164 165 exit = new JMenuItem(Common.EXIT); 166 exit.addActionListener(this); 167 file.add(exit); 168 169 menuBar.add(file); 170 } 171 172 private void menuEdit() { 173 edit = new JMenu(Common.EDIT); 174 175 undo = new JMenuItem(Common.UNDO); 176 undo.addActionListener(this); 177 undo.setAccelerator(KeyStroke.getKeyStroke(Common.Z, InputEvent.CTRL_MASK)); 178 edit.add(undo); 179 180 line = new JSeparator(); 181 edit.add(line); 182 183 cut = new JMenuItem(Common.CUT); 184 cut.addActionListener(this); 185 cut.setAccelerator(KeyStroke.getKeyStroke(Common.X, InputEvent.CTRL_MASK)); 186 edit.add(cut); 187 188 copy = new JMenuItem(Common.COPY); 189 copy.addActionListener(this); 190 copy.setAccelerator(KeyStroke.getKeyStroke(Common.C, InputEvent.CTRL_MASK)); 191 edit.add(copy); 192 193 paste = new JMenuItem(Common.PASTE); 194 paste.addActionListener(this); 195 paste.setAccelerator(KeyStroke.getKeyStroke(Common.V, InputEvent.CTRL_MASK)); 196 edit.add(paste); 197 198 line = new JSeparator(); 199 edit.add(line); 200 201 find = new JMenuItem(Common.FIND); 202 find.addActionListener(this); 203 find.setAccelerator(KeyStroke.getKeyStroke(Common.F, InputEvent.CTRL_MASK)); 204 edit.add(find); 205 206 findNext = new JMenuItem(Common.FIND_NEXT); 207 findNext.addActionListener(this); 208 findNext.setAccelerator(KeyStroke.getKeyStroke(Common.F, InputEvent.CTRL_MASK + InputEvent.SHIFT_MASK)); 209 edit.add(findNext); 210 211 replace = new JMenuItem(Common.REPLACE); 212 replace.addActionListener(this); 213 replace.setAccelerator(KeyStroke.getKeyStroke(Common.H, InputEvent.CTRL_MASK)); 214 edit.add(replace); 215 216 line = new JSeparator(); 217 edit.add(line); 218 219 selectAll = new JMenuItem(Common.SELECT_ALL); 220 selectAll.addActionListener(this); 221 selectAll.setAccelerator(KeyStroke.getKeyStroke(Common.A, InputEvent.CTRL_MASK)); 222 edit.add(selectAll); 223 224 timeDate = new JMenuItem(Common.TIME_DATE); 225 timeDate.addActionListener(this); 226 timeDate.setAccelerator(KeyStroke.getKeyStroke(Common.T, InputEvent.CTRL_MASK)); 227 edit.add(timeDate); 228 229 menuBar.add(edit); 230 } 231 232 private void menuFormat() { 233 format = new JMenu(Common.FORMAT); 234 235 wordWrap = new JMenuItem(Common.WORD_WRAP); 236 wordWrap.addActionListener(this); 237 wordWrap.setAccelerator(KeyStroke.getKeyStroke(Common.W, InputEvent.CTRL_MASK)); 238 format.add(wordWrap); 239 240 resetFont = new JMenuItem(Common.RESET_FONT); 241 resetFont.addActionListener(this); 242 format.add(resetFont); 243 244 line = new JSeparator(); 245 format.add(line); 246 247 font = new JMenuItem(Common.FONT); 248 font.addActionListener(this); 249 format.add(font); 250 251 fontSize = new JMenuItem(Common.FONT_SIZE_TITLE); 252 fontSize.addActionListener(this); 253 format.add(fontSize); 254 255 fontStyle = new JMenuItem(Common.FONT_STYLE); 256 fontStyle.addActionListener(this); 257 format.add(fontStyle); 258 259 menuBar.add(format); 260 } 261 262 private void menuView() { 263 view = new JMenu(Common.VIEW); 264 265 skin = new JMenuItem(Common.SKIN); 266 skin.addActionListener(this); 267 view.add(skin); 268 269 menuBar.add(view); 270 } 271 272 private void menuHelp() { 273 help = new JMenu(Common.Help); 274 275 viewHelp = new JMenu(Common.VIEW_HELP); 276 help.add(viewHelp); 277 278 homePage = new JMenuItem(Common.NOTEPAD_HOME_PAGE); 279 homePage.addActionListener(this); 280 viewHelp.add(homePage); 281 282 skinPage = new JMenuItem(Common.NOTEPAD_SKINS); 283 skinPage.addActionListener(this); 284 viewHelp.add(skinPage); 285 286 source = new JMenu(Common.SOURCE); 287 viewHelp.add(source); 288 289 sourceCode = new JMenuItem(Common.SOURCE_CODE); 290 sourceCode.addActionListener(this); 291 source.add(sourceCode); 292 293 sourceCodeDownload = new JMenuItem(Common.SOURCE_CODE_DOWNLOAD); 294 sourceCodeDownload.addActionListener(this); 295 source.add(sourceCodeDownload); 296 297 api = new JMenuItem(Common.NOTEPAD_API); 298 api.addActionListener(this); 299 viewHelp.add(api); 300 301 line = new JSeparator(); 302 help.add(line); 303 304 about = new JMenuItem(Common.ABOUT_NOTEPAD); 305 about.addActionListener(this); 306 help.add(about); 307 308 menuBar.add(help); 309 } 310 311 private void initUndoManager(){ 312 undoManager = new UndoManager(); 313 } 314 315 private void setDisabledMenuAtCreating(boolean b){ 316 undo.setEnabled(b); 317 cut.setEnabled(b); 318 copy.setEnabled(b); 319 find.setEnabled(b); 320 findNext.setEnabled(b); 321 } 322 323 private void setDisabledMenuAtSelecting(boolean b){ 324 cut.setEnabled(b); 325 copy.setEnabled(b); 326 } 327 328 private void initTextArea() { 329 textArea = new JTextArea(Common.EMPTY); 330 textArea.setLineWrap(true); 331 lineWrap = true; 332 textAreaFont = new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE); 333 textArea.setFont(textAreaFont); 334 initUndoManager(); 335 // add Undoable edit listener 336 textArea.getDocument().addUndoableEditListener(new UndoableEditListener() { 337 public void undoableEditHappened(UndoableEditEvent e) { 338 undoManager.addEdit(e.getEdit()); 339 } 340 }); 341 // add caret listener 342 textArea.addCaretListener(new CaretListener() { 343 public void caretUpdate(CaretEvent e) { 344 if (null != savedText && null != textArea.getText()) { 345 if (savedText.equals(textArea.getText())) { 346 setSaved(true); 347 } else { 348 setSaved(false); 349 } 350 } 351 textArea.setFocusable(true); 352 setDisabledMenuAtCreating(true); 353 } 354 }); 355 // add mouse motion listener 356 textArea.addMouseMotionListener(new MouseMotionListener() { 357 public void mouseMoved(MouseEvent e) { 358 isSelectedText(); 359 } 360 361 public void mouseDragged(MouseEvent e) { 362 isSelectedText(); 363 } 364 365 }); 366 textAreaScroll = new JScrollPane(textArea); 367 this.add(textAreaScroll); 368 } 369 370 private void isSelectedText() { 371 textArea.setFocusable(true); 372 String selectText = textArea.getSelectedText(); 373 if(null != selectText){ 374 setDisabledMenuAtSelecting(true); 375 }else{ 376 setDisabledMenuAtSelecting(false); 377 } 378 } 379 380 public void actionPerformed(ActionEvent e) { 381 actionForFileItem(e); 382 actionForEditItem(e); 383 actionForFormatItem(e); 384 actionForViewItem(e); 385 actionForHelpItem(e); 386 } 387 388 private void actionForFileItem(ActionEvent e) { 389 if (e.getSource() == news) { 390 FileMenuUtil.news(MainUI.this); 391 } else if (e.getSource() == open) { 392 FileMenuUtil file = new FileMenuUtil(Common.EMPTY); 393 file.open(MainUI.this); 394 } else if (e.getSource() == save) { 395 FileMenuUtil.save(MainUI.this); 396 } else if (e.getSource() == saveAs) { 397 FileMenuUtil.saveAs(MainUI.this); 398 } else if (e.getSource() == properties) { 399 FileMenuUtil file = new FileMenuUtil(Common.EMPTY); 400 file.readProperties(MainUI.this); 401 } else if (e.getSource() == exit) { 402 FileMenuUtil file = new FileMenuUtil(Common.EMPTY); 403 file.exit(MainUI.this); 404 } 405 } 406 407 private void actionForEditItem(ActionEvent e) { 408 if (e.getSource() == undo) { 409 EditMenuUtil.undo(); 410 } else if (e.getSource() == copy) { 411 EditMenuUtil.copy(); 412 } else if (e.getSource() == paste) { 413 EditMenuUtil.paste(); 414 } else if (e.getSource() == cut) { 415 EditMenuUtil.cut(); 416 } else if (e.getSource() == find) { 417 setMainUIXY(); 418 EditMenuUtil edit = new EditMenuUtil(Common.EMPTY); 419 edit.find(); 420 } else if (e.getSource() == findNext) { 421 EditMenuUtil edit = new EditMenuUtil(Common.EMPTY); 422 edit.findNext(); 423 } else if (e.getSource() == replace) { 424 setMainUIXY(); 425 EditMenuUtil edit = new EditMenuUtil(Common.EMPTY); 426 edit.replace(); 427 } else if (e.getSource() == selectAll) { 428 EditMenuUtil.selectAll(); 429 } else if (e.getSource() == timeDate) { 430 EditMenuUtil.timeDate(); 431 } 432 } 433 434 private void actionForFormatItem(ActionEvent e) { 435 if (e.getSource() == wordWrap) { 436 FormatMenuUtil.wordWrap(); 437 } else if(e.getSource() == resetFont){ 438 FormatMenuUtil format = new FormatMenuUtil(Common.EMPTY); 439 format.resetFont(MainUI.this); 440 }else if (e.getSource() == font) { 441 setMainUIXY(); 442 FormatMenuUtil format = new FormatMenuUtil(Common.EMPTY); 443 format.font(MainUI.this); 444 } else if (e.getSource() == fontSize) { 445 setMainUIXY(); 446 FormatMenuUtil format = new FormatMenuUtil(Common.EMPTY); 447 format.fontSize(MainUI.this); 448 }else if(e.getSource() == fontStyle){ 449 setMainUIXY(); 450 FormatMenuUtil format = new FormatMenuUtil(Common.EMPTY); 451 format.fontStyle(MainUI.this); 452 } 453 } 454 455 private void actionForViewItem(ActionEvent e) { 456 if (e.getSource() == skin) { 457 setMainUIXY(); 458 ViewMenuUtil view = new ViewMenuUtil(Common.EMPTY); 459 view.skin(MainUI.this); 460 } 461 } 462 463 private void actionForHelpItem(ActionEvent e) { 464 if (e.getSource() == homePage) { 465 log.debug(Common.NOTEPAD_HOME_PAGE); 466 NotepadUtil.accessURL(Common.NOTEPAD_PUBLISHED_PAGE); 467 } else if(e.getSource() == skinPage){ 468 log.debug(Common.NOTEPAD_SKINS); 469 NotepadUtil.accessURL(Common.NOTEPAD_SUBSTANCE_SKINS_PAGE); 470 }else if(e.getSource() == sourceCode){ 471 log.debug(Common.SOURCE_CODE); 472 NotepadUtil.accessURL(Common.NOTEPAD_PUBLISHED_BOOKMARK_PAGE + Common.SOURCE_CODE_BOOKMARK); 473 }else if(e.getSource() == sourceCodeDownload){ 474 log.debug(Common.SOURCE_CODE_DOWNLOAD); 475 NotepadUtil.accessURL(Common.NOTEPAD_PUBLISHED_BOOKMARK_PAGE + Common.SOURCE_CODE_DOWNLOAD_BOOKMARK); 476 }else if(e.getSource() == api){ 477 log.debug(Common.NOTEPAD_API); 478 NotepadUtil.accessURL(Common.NOTEPAD_PUBLISHED_BOOKMARK_PAGE + Common.NOTEPAD_API_BOOKMARK); 479 }else if (e.getSource() == about) { 480 setMainUIXY(); 481 HelpMenuUtil help = new HelpMenuUtil(Common.EMPTY); 482 help.about(MainUI.this); 483 } 484 } 485 486 public boolean isSaved() { 487 return saved; 488 } 489 490 public void setSaved(boolean saved) { 491 this.saved = saved; 492 } 493 }
/notepad/src/main/java/com/b510/notepad/ui/NotepadUI.java
1 /** 2 * 3 */ 4 package com.b510.notepad.ui; 5 6 import java.awt.event.ActionEvent; 7 import java.awt.event.ActionListener; 8 9 /** 10 * The <code>NotepadUI</code> class extends <code>JUI</code> and implements 11 * <code>ActionListener</code>. 12 * 13 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 14 * @created Nov 19, 2014 15 */ 16 public class NotepadUI extends JUI implements ActionListener { 17 18 private static final long serialVersionUID = 1L; 19 20 private MainUI mainUI; 21 22 public NotepadUI(String title) { 23 super(title); 24 } 25 26 public void init() { 27 if (null == mainUI) { 28 mainUI = new MainUI(title); 29 } 30 mainUI.init(); 31 } 32 33 public void actionPerformed(ActionEvent e) { 34 } 35 }
/notepad/src/main/java/com/b510/notepad/ui/ReplaceManagerUI.java
1 package com.b510.notepad.ui; 2 3 import java.awt.Dimension; 4 import java.awt.event.ActionEvent; 5 import java.awt.event.WindowAdapter; 6 import java.awt.event.WindowEvent; 7 8 import javax.swing.GroupLayout; 9 import javax.swing.JButton; 10 import javax.swing.JCheckBox; 11 import javax.swing.JLabel; 12 import javax.swing.JOptionPane; 13 import javax.swing.JPanel; 14 import javax.swing.JTextField; 15 import javax.swing.LayoutStyle; 16 17 import org.apache.log4j.Logger; 18 19 import com.b510.notepad.common.Common; 20 import com.b510.notepad.util.EditMenuUtil; 21 22 public class ReplaceManagerUI extends MainUI { 23 private static final long serialVersionUID = 1L; 24 25 static Logger log = Logger.getLogger(ReplaceManagerUI.class); 26 27 private JPanel bGJPanel; 28 private JButton cancelJButton; 29 private JCheckBox caseSensitiveJCheckBox; 30 private JButton findNextJButton; 31 private JLabel findWhatJLabel; 32 private JTextField findWordJTextField; 33 private JButton replaceAllJButton; 34 private JLabel replaceToJLabel; 35 private JTextField replaceToJTextField; 36 private JButton replaceJButton; 37 38 public static boolean isCaseSensitive = false; 39 40 private EditMenuUtil edit; 41 public static String replaceWord = Common.EMPTY; 42 public static int replaceCount = 0; 43 44 public ReplaceManagerUI(String title) { 45 super(title); 46 initComponents(); 47 48 initSelf(); 49 setAlwaysOnTop(true); 50 addWindowListener(new WindowAdapter() { 51 @Override 52 public void windowClosing(WindowEvent e) { 53 distoryReplaceManagerUI(); 54 } 55 }); 56 } 57 58 public void initSelf() { 59 this.setVisible(true); 60 setResizable(false); 61 this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150); 62 } 63 64 /** 65 * If not necessary, please do not change the order. 66 */ 67 private void initComponents() { 68 initElement(); 69 initLabel(); 70 initFindWordTextField(); 71 initReplaceToTextField(); 72 initCaseSensitiveCheckBox(); 73 initFindNextButton(); 74 initReplaceButton(); 75 initReplaceAllButton(); 76 initCancleButton(); 77 initLayout(); 78 } 79 80 private void initElement() { 81 bGJPanel = new JPanel(); 82 findWhatJLabel = new JLabel(); 83 replaceToJLabel = new JLabel(); 84 findWordJTextField = new JTextField(); 85 replaceToJTextField = new JTextField(); 86 caseSensitiveJCheckBox = new JCheckBox(); 87 findNextJButton = new JButton(); 88 replaceJButton = new JButton(); 89 replaceAllJButton = new JButton(); 90 cancelJButton = new JButton(); 91 } 92 93 private void initLabel() { 94 findWhatJLabel.setText(Common.FIND_WHAT); 95 replaceToJLabel.setText(Common.REPLACE_TO); 96 } 97 98 private void initFindWordTextField() { 99 if (null == textArea.getSelectedText() || Common.EMPTY.equals(textArea.getSelectedText().trim())) { 100 findWordJTextField.setText(findWhat); 101 } else if(null != textArea.getSelectedText() && !Common.EMPTY.equals(textArea.getSelectedText().trim())){ 102 findWordJTextField.setText(textArea.getSelectedText()); 103 }else{ 104 findWordJTextField.setText(findWhat); 105 } 106 } 107 108 private void initReplaceToTextField() { 109 replaceToJTextField.setText(Common.EMPTY); 110 } 111 112 private void initCaseSensitiveCheckBox() { 113 caseSensitiveJCheckBox.setText(Common.CASE_SENSITIVE); 114 caseSensitiveJCheckBox.addActionListener(this); 115 } 116 117 private void initFindNextButton() { 118 findNextJButton.setText(Common.FIND_NEXT); 119 findNextJButton.setMaximumSize(new Dimension(99, 23)); 120 findNextJButton.setMinimumSize(new Dimension(99, 23)); 121 findNextJButton.setPreferredSize(new Dimension(99, 23)); 122 findNextJButton.addActionListener(this); 123 } 124 125 private void initReplaceButton() { 126 replaceJButton.setText(Common.REPLACE); 127 replaceJButton.setMaximumSize(new Dimension(99, 23)); 128 replaceJButton.setMinimumSize(new Dimension(99, 23)); 129 replaceJButton.setPreferredSize(new Dimension(99, 23)); 130 replaceJButton.addActionListener(this); 131 } 132 133 private void initReplaceAllButton() { 134 replaceAllJButton.setText(Common.REPLACE_ALL); 135 replaceAllJButton.addActionListener(this); 136 } 137 138 private void initCancleButton() { 139 cancelJButton.setText(Common.CANCEL); 140 cancelJButton.setMaximumSize(new Dimension(99, 23)); 141 cancelJButton.setMinimumSize(new Dimension(99, 23)); 142 cancelJButton.setPreferredSize(new Dimension(99, 23)); 143 cancelJButton.addActionListener(this); 144 } 145 146 public void actionPerformed(ActionEvent e) { 147 if (e.getSource() == findNextJButton) { 148 if(!isEmptyForFindWordJTextField()){ 149 edit.findNext(); 150 }else{ 151 typingFindWhat(); 152 } 153 } else if (e.getSource() == replaceAllJButton) { 154 if(!isEmptyForFindWordJTextField()){ 155 edit.replaceAllOperation(); 156 }else{ 157 typingFindWhat(); 158 } 159 } else if (e.getSource() == replaceJButton) { 160 if(!isEmptyForFindWordJTextField()){ 161 edit.replaceOperation(); 162 }else{ 163 typingFindWhat(); 164 } 165 } else if (e.getSource() == cancelJButton) { 166 distoryReplaceManagerUI(); 167 } else if (e.getSource() == caseSensitiveJCheckBox) { 168 caseSensitiveSwitch(); 169 } 170 } 171 172 private void typingFindWhat() { 173 JOptionPane.showMessageDialog(ReplaceManagerUI.this, Common.WHAT_DO_YOU_WANT_TO_FIND, Common.NOTEPAD, JOptionPane.INFORMATION_MESSAGE); 174 findWordJTextField.setFocusable(true); 175 } 176 177 private boolean isEmptyForFindWordJTextField(){ 178 findWhat = findWordJTextField.getText(); 179 replaceWord = replaceToJTextField.getText(); 180 if(!Common.EMPTY.equals(findWordJTextField.getText())){ 181 return false; 182 }else{ 183 return true; 184 } 185 } 186 187 /** 188 * Operation for Cancel button 189 */ 190 private void distoryReplaceManagerUI() { 191 ReplaceManagerUI.this.setVisible(false); 192 edit.distoryReplaceeManagerUI(); 193 } 194 195 /** 196 * Case Sensitive Switch 197 */ 198 private void caseSensitiveSwitch() { 199 if (null == caseSensitiveJCheckBox.getSelectedObjects()) { 200 isCaseSensitive = false; 201 } else { 202 isCaseSensitive = true; 203 } 204 log.debug(isCaseSensitive); 205 } 206 207 public void setEditMenuUtil(EditMenuUtil editMenuUtil) { 208 this.edit = editMenuUtil; 209 } 210 211 /** 212 * If not necessary, please do not change. 213 */ 214 private void initLayout() { 215 GroupLayout bGJPanelLayout = new GroupLayout(bGJPanel); 216 bGJPanel.setLayout(bGJPanelLayout); 217 bGJPanelLayout.setHorizontalGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup( 218 bGJPanelLayout.createSequentialGroup().addContainerGap().addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false).addGroup(bGJPanelLayout.createSequentialGroup().addComponent(findWhatJLabel).addGap(18, 18, 18).addComponent(findWordJTextField, GroupLayout.PREFERRED_SIZE, 227, GroupLayout.PREFERRED_SIZE)).addGroup(bGJPanelLayout.createSequentialGroup().addComponent(replaceToJLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(replaceToJTextField))).addComponent(caseSensitiveJCheckBox)).addGap(18, 18, 18).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(findNextJButton, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(replaceJButton, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(replaceAllJButton, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(cancelJButton, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addContainerGap())); 219 bGJPanelLayout.setVerticalGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup( 220 bGJPanelLayout.createSequentialGroup().addGap(17, 17, 17).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(bGJPanelLayout.createSequentialGroup().addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(findWhatJLabel).addComponent(findWordJTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addGap(12, 12, 12).addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(replaceToJLabel).addComponent(replaceToJTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addComponent(replaceJButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))).addComponent(findNextJButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(replaceAllJButton) 221 .addGroup(bGJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(bGJPanelLayout.createSequentialGroup().addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(cancelJButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addGroup(bGJPanelLayout.createSequentialGroup().addGap(2, 2, 2).addComponent(caseSensitiveJCheckBox))).addContainerGap(8, Short.MAX_VALUE))); 222 223 GroupLayout layout = new GroupLayout(getContentPane()); 224 getContentPane().setLayout(layout); 225 layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(bGJPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); 226 layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(bGJPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addContainerGap())); 227 228 pack(); 229 } 230 }
/notepad/src/main/java/com/b510/notepad/ui/SkinManagerUI.java
1 package com.b510.notepad.ui; 2 3 import java.awt.event.ActionEvent; 4 import java.awt.event.MouseEvent; 5 import java.awt.event.MouseListener; 6 import java.awt.event.WindowAdapter; 7 import java.awt.event.WindowEvent; 8 import java.io.IOException; 9 10 import javax.swing.DefaultComboBoxModel; 11 import javax.swing.GroupLayout; 12 import javax.swing.JComboBox; 13 import javax.swing.JLabel; 14 import javax.swing.JSeparator; 15 import javax.swing.LayoutStyle; 16 17 import com.b510.notepad.common.Common; 18 import com.b510.notepad.util.ViewMenuUtil; 19 20 /** 21 * @author Hongten 22 * @created Nov 20, 2014 23 */ 24 public class SkinManagerUI extends MainUI { 25 private static final long serialVersionUID = 1L; 26 27 private JLabel currentSkinDescJLabel; 28 private JLabel currentSkinJLabel; 29 private JLabel descJlabel; 30 private JSeparator line; 31 private JComboBox<String> sinkJComboBox; 32 33 private ViewMenuUtil view; 34 35 public String[][] skins = { { "AutumnSkin", "1", "<html><a href=''>What is the AutumnSkin skin?</a></html>" }, { "BusinessBlackSteelSkin", "2", "<html><a href=''>What is the BusinessBlackSteelSkin skin?</a></html>" }, { "ChallengerDeepSkin", "3", "<html><a href=''>What is the ChallengerDeepSkin skin?</a></html>" }, { "CremeCoffeeSkin", "4", "<html><a href=''>What is the CremeCoffeeSkin skin?</a></html>" }, { "CremeSkin", "5", "<html><a href=''>What is the CremeSkin skin?</a></html>" }, { "EbonyHighContrastSkin", "6", "<html><a href=''>What is the EbonyHighContrastSkin skin?</a></html>" }, { "EmeraldDuskSkin", "7", "<html><a href=''>What is the EmeraldDuskSkin skin?</a></html>" }, { "FieldOfWheatSkin", "8", "<html><a href=''>What is the FieldOfWheatSkin skin?</a></html>" }, { "FindingNemoSkin", "9", "<html><a href=''>What is the FindingNemoSkin skin?</a></html>" }, { "GreenMagicSkin", "10", "<html><a href=''>What is the GreenMagicSkin skin?</a></html>" }, { "MagmaSkin", "11", "<html><a href=''>What is the MagmaSkin skin?</a></html>" }, { "MangoSkin", "12", "<html><a href=''>What is the MangoSkin skin?</a></html>" }, { "MistSilverSkin", "13", "<html><a href=''>What is the MistSilverSkin skin?</a></html>" }, 36 { "ModerateSkin", "14", "<html><a href=''>What is the ModerateSkin skin?</a></html>" }, { "NebulaBrickWallSkin", "15", "<html><a href=''>What is the NebulaBrickWallSkin skin?</a></html>" }, { "NebulaSkin", "16", "<html><a href=''>What is the NebulaSkin skin?</a></html>" }, { "OfficeBlue2007Skin", "17", "<html><a href=''>What is the OfficeBlue2007Skin skin?</a></html>" }, { "RavenGraphiteGlassSkin", "18", "<html><a href=''>What is the RavenGraphiteGlassSkin skin?</a></html>" }, { "RavenGraphiteSkin", "19", "<html><a href=''>What is the RavenGraphiteSkin skin?</a></html>" }, { "RavenSkin", "20", "<html><a href=''>What is the RavenSkin skin?</a></html>" }, { "SaharaSkin", "21", "<html><a href=''>What is the SaharaSkin skin?</a></html>" } }; 37 38 private String[] skinNames() { 39 String[] os = new String[skins.length]; 40 for (int i = 0; i < skins.length; i++) { 41 os[i] = skins[i][0]; 42 } 43 return os; 44 } 45 46 private Object[] getSkinDetails(Object obj) { 47 for (int i = 0; i < skins.length; i++) { 48 if (skins[i][0].equals(obj)) { 49 Object[] os = new Object[skins[i].length - 1]; 50 for (int j = 0; j < os.length; j++) { 51 os[j] = skins[i][j + 1]; 52 } 53 return os; 54 } 55 } 56 return new Object[] {}; 57 } 58 59 public SkinManagerUI(String title) { 60 super(title); 61 initComponents(); 62 63 initSelf(); 64 setAlwaysOnTop(true); 65 addWindowListener(new WindowAdapter() { 66 @Override 67 public void windowClosing(WindowEvent e) { 68 SkinManagerUI.this.setVisible(false); 69 view.distorySkinManagerUI(); 70 } 71 }); 72 } 73 74 public void initSelf() { 75 this.setVisible(true); 76 setResizable(false); 77 this.setLocation(MainUI.pointX + 100, MainUI.pointY + 150); 78 } 79 80 private void initComponents() { 81 initElement(); 82 currentSkinJLabel.setText(Common.CURRENT_SINK); 83 84 String[] skinNames = skinNames(); 85 sinkJComboBox.setModel(new DefaultComboBoxModel<String>(skinNames)); 86 sinkJComboBox.setSelectedIndex(skinNum - 1); 87 sinkJComboBox.addActionListener(this); 88 89 descJlabel.setText(Common.DESCRIPTION_WITH_COLOR); 90 91 currentSkinDescJLabel.setText(skins[skinNum][2]); 92 currentSkinDescJLabel.addMouseListener(new MouseListener() { 93 public void mouseClicked(MouseEvent e) { 94 try { 95 Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + Common.SUBSTANCE_SKINS_PAGE + sinkJComboBox.getSelectedItem()); 96 } catch (IOException e1) { 97 e1.printStackTrace(); 98 } 99 } 100 101 public void mousePressed(MouseEvent e) { 102 103 } 104 105 public void mouseReleased(MouseEvent e) { 106 107 } 108 109 public void mouseEntered(MouseEvent e) { 110 111 } 112 113 public void mouseExited(MouseEvent e) { 114 115 } 116 }); 117 pageGourpLayout(); 118 } 119 120 private void initElement() { 121 currentSkinJLabel = new JLabel(); 122 sinkJComboBox = new JComboBox<String>(); 123 descJlabel = new JLabel(); 124 currentSkinDescJLabel = new JLabel(); 125 line = new JSeparator(); 126 } 127 128 @Override 129 public void actionPerformed(ActionEvent e) { 130 if (e.getSource() == sinkJComboBox) { 131 updateSkin(); 132 } 133 } 134 135 public synchronized void updateSkin() { 136 Object[] os = getSkinDetails(sinkJComboBox.getSelectedItem()); 137 String index = (String) os[0]; 138 String desc = (String) os[1]; 139 skinNum = Integer.valueOf(index); 140 currentSkinDescJLabel.setText(desc); 141 setJUI(); 142 } 143 144 public void setViewMenuUtil(ViewMenuUtil viewMenuUtil) { 145 this.view = viewMenuUtil; 146 } 147 148 /** 149 * If not necessary, please do not change 150 */ 151 private void pageGourpLayout() { 152 GroupLayout layout = new GroupLayout(getContentPane()); 153 getContentPane().setLayout(layout); 154 horizontalGroupLayout(layout); 155 verticalGroupLayout(layout); 156 pack(); 157 } 158 159 private void verticalGroupLayout(GroupLayout layout) { 160 layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(40, 40, 40).addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(currentSkinJLabel).addComponent(sinkJComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addGap(26, 26, 26).addComponent(line, GroupLayout.PREFERRED_SIZE, 11, GroupLayout.PREFERRED_SIZE).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addComponent(descJlabel).addGap(18, 18, 18).addComponent(currentSkinDescJLabel).addContainerGap(47, Short.MAX_VALUE))); 161 } 162 163 private void horizontalGroupLayout(GroupLayout layout) { 164 layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(21, 21, 21).addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(currentSkinDescJLabel).addComponent(descJlabel).addGroup(layout.createSequentialGroup().addComponent(currentSkinJLabel).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(sinkJComboBox, GroupLayout.PREFERRED_SIZE, 195, GroupLayout.PREFERRED_SIZE))).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addGroup(layout.createSequentialGroup().addComponent(line, GroupLayout.PREFERRED_SIZE, 355, GroupLayout.PREFERRED_SIZE).addGap(0, 0, Short.MAX_VALUE))); 165 } 166 }
/notepad/src/main/java/com/b510/notepad/util/EditMenuUtil.java
1 /** 2 * 3 */ 4 package com.b510.notepad.util; 5 6 import javax.swing.JOptionPane; 7 8 import org.apache.log4j.Logger; 9 10 import com.b510.notepad.common.Common; 11 import com.b510.notepad.ui.FindManagerUI; 12 import com.b510.notepad.ui.MainUI; 13 import com.b510.notepad.ui.ReplaceManagerUI; 14 15 /** 16 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 17 * @created Nov 19, 2014 18 */ 19 public class EditMenuUtil extends MainUI { 20 21 private static final long serialVersionUID = 1L; 22 23 static Logger log = Logger.getLogger(EditMenuUtil.class); 24 25 private static FindManagerUI findManagerUI; 26 private static ReplaceManagerUI replaceeManagerUI; 27 28 public EditMenuUtil(String title) { 29 super(title); 30 } 31 32 public static void undo() { 33 log.debug(Common.UNDO); 34 if(undoManager.canUndo()){ 35 undoManager.undo(); 36 } 37 } 38 39 public static void copy() { 40 log.debug(Common.COPY); 41 textArea.copy(); 42 } 43 44 public static void paste() { 45 log.debug(Common.PASTE); 46 textArea.paste(); 47 } 48 49 public static void cut() { 50 log.debug(Common.CUT); 51 textArea.cut(); 52 } 53 54 /** 55 * Showing the <code>FindManagerUI</code> window. 56 */ 57 public void find() { 58 log.debug(Common.FIND); 59 if (null == findManagerUI) { 60 findManagerUI = new FindManagerUI(Common.FIND); 61 findManagerUI.setEditMenuUtil(EditMenuUtil.this); 62 } else { 63 findManagerUI.setVisible(true); 64 findManagerUI.setFocusable(true); 65 } 66 } 67 68 /** 69 * The directory : isForward(true : Forward and false : Backward)<br> 70 * The Case Sensitive : isCaseSensitive(true : Case Sensitive and false : Not Case Sensitive)</br> 71 */ 72 public void findNext() { 73 log.debug(Common.FIND_NEXT); 74 if (Common.EMPTY.equals(findWhat)) { 75 JOptionPane.showMessageDialog(EditMenuUtil.this, Common.WHAT_DO_YOU_WANT_TO_FIND, Common.NOTEPAD, JOptionPane.INFORMATION_MESSAGE); 76 } else if (findWhat.length() > textArea.getText().length()) { 77 canNotFindKeyWord(); 78 } else { 79 String content = textArea.getText(); 80 String temp = Common.EMPTY; 81 int position = textArea.getSelectionEnd() - findWhat.length() + 1; 82 if (FindManagerUI.isForward) { 83 if(position > content.length() - findWhat.length()){ 84 canNotFindKeyWordOperation(content.length(), content.length()); 85 } 86 for (; position <= content.length() - findWhat.length(); position++) { 87 temp = content.substring(position, position + findWhat.length()); 88 if (FindManagerUI.isCaseSensitive) { 89 if (temp.equals(findWhat)) { 90 setTextAreaSelection(position, position + findWhat.length()); 91 break; 92 } else if (position >= content.length() - findWhat.length()) { 93 canNotFindKeyWordOperation(content.length(), content.length()); 94 break; 95 } 96 } else { 97 if (temp.equalsIgnoreCase(findWhat)) { 98 setTextAreaSelection(position, position + findWhat.length()); 99 break; 100 } else if (position >= content.length() - findWhat.length()) { 101 canNotFindKeyWordOperation(content.length(), content.length()); 102 break; 103 } 104 } 105 } 106 } else {// Backward 107 if(null != textArea.getSelectedText() && !Common.EMPTY.equals(textArea.getSelectedText().trim())){ 108 position = textArea.getSelectionStart(); 109 } 110 if(position < findWhat.length()){ 111 canNotFindKeyWordOperation(0, 0); 112 } 113 for (; position - findWhat.length() >= 0; position--) { 114 temp = content.substring(position - findWhat.length(), position); 115 if (FindManagerUI.isCaseSensitive) {//Case Sensitive 116 if (temp.equals(findWhat)) { 117 setTextAreaSelection(position - findWhat.length(), position); 118 break; 119 } else if (position - findWhat.length() == 0) { 120 canNotFindKeyWordOperation(0, 0); 121 break; 122 } 123 } else { 124 if (temp.equalsIgnoreCase(findWhat)) { 125 setTextAreaSelection(position - findWhat.length(), position); 126 break; 127 } else if (position - findWhat.length() == 0) { 128 canNotFindKeyWordOperation(0, 0); 129 break; 130 } 131 } 132 } 133 } 134 } 135 } 136 137 138 private void canNotFindKeyWordOperation(int start, int end){ 139 setTextAreaSelection(start, end); 140 canNotFindKeyWord(); 141 } 142 143 private void canNotFindKeyWord() { 144 JOptionPane.showMessageDialog(this, Common.CAN_NOT_FIND + findWhat, Common.NOTEPAD, JOptionPane.INFORMATION_MESSAGE); 145 } 146 147 private void setTextAreaSelection(int start, int end){ 148 textArea.setSelectionStart(start); 149 textArea.setSelectionEnd(end); 150 } 151 152 /** 153 * Showing the <code>ReplaceManagerUI</code> window. 154 */ 155 public void replace() { 156 log.debug(Common.REPLACE); 157 if (null == replaceeManagerUI) { 158 replaceeManagerUI = new ReplaceManagerUI(Common.REPLACE); 159 replaceeManagerUI.setEditMenuUtil(EditMenuUtil.this); 160 } else { 161 replaceeManagerUI.setVisible(true); 162 replaceeManagerUI.setFocusable(true); 163 } 164 } 165 166 167 /** 168 * Default direction is Forward. The <code>replaceOperation</code> method can NOT be called when <br> 169 * <code>null == textArea.getSelectedText();</code> <br>Or <br><code>Common.EMPTY.equals(textArea.getSelectedText().trim());</code><br> 170 */ 171 public void replaceOperation(){ 172 FindManagerUI.isForward = true; 173 findNext(); 174 if (null != textArea.getSelectedText() && !Common.EMPTY.equals(textArea.getSelectedText().trim())) { 175 textArea.replaceRange(ReplaceManagerUI.replaceWord, textArea.getSelectionStart(), textArea.getSelectionEnd()); 176 } 177 } 178 179 /** 180 * When user want to call Replace_All method, the application will replace all with case sensitive.<br> 181 * A information window will display after replacing all words.<br>Finally, the application will set <br> 182 * <code>ReplaceManagerUI.replaceCount = 0;</code> 183 */ 184 public void replaceAllOperation() { 185 String replaceWord = ReplaceManagerUI.replaceWord; 186 String content = textArea.getText(); 187 String temp; 188 for (int i = 0; i <= content.length() - findWhat.length(); i++) { 189 temp = content.substring(i, i + findWhat.length()); 190 if (ReplaceManagerUI.isCaseSensitive) { 191 if (temp.equals(findWhat)) { 192 replaceRangeOperation(findWhat, replaceWord, i); 193 } 194 } else { 195 if (temp.equalsIgnoreCase(findWhat)) { 196 replaceRangeOperation(findWhat, replaceWord, i); 197 } 198 } 199 } 200 JOptionPane.showMessageDialog(this, ReplaceManagerUI.replaceCount + Common.MATCHES_REPLACED, Common.NOTEPAD, JOptionPane.INFORMATION_MESSAGE); 201 ReplaceManagerUI.replaceCount = 0; 202 } 203 204 private void replaceRangeOperation(String findWhat, String replaceWord, int i) { 205 ReplaceManagerUI.replaceCount++; 206 textArea.setSelectionStart(i); 207 textArea.setSelectionEnd(i + findWhat.length()); 208 textArea.replaceRange(replaceWord, textArea.getSelectionStart(), textArea.getSelectionEnd()); 209 } 210 211 public static void selectAll() { 212 log.debug(Common.SELECT_ALL); 213 textArea.selectAll(); 214 } 215 216 public static void timeDate() { 217 log.debug(Common.TIME_DATE); 218 textArea.replaceRange(NotepadUtil.getTimeDate(), textArea.getSelectionStart(), textArea.getSelectionEnd()); 219 } 220 221 public void distoryFindManagerUI() { 222 if (null != findManagerUI) { 223 findManagerUI = null; 224 } 225 } 226 227 public void distoryReplaceeManagerUI() { 228 if (null != replaceeManagerUI) { 229 replaceeManagerUI = null; 230 } 231 } 232 233 }
/notepad/src/main/java/com/b510/notepad/util/FileMenuUtil.java
1 /** 2 * 3 */ 4 package com.b510.notepad.util; 5 6 import java.awt.FileDialog; 7 import java.io.BufferedReader; 8 import java.io.File; 9 import java.io.FileInputStream; 10 import java.io.FileOutputStream; 11 import java.io.InputStreamReader; 12 import java.io.OutputStreamWriter; 13 14 import javax.swing.JFileChooser; 15 import javax.swing.JOptionPane; 16 import javax.swing.filechooser.FileNameExtensionFilter; 17 18 import org.apache.log4j.Logger; 19 20 import com.b510.notepad.common.Common; 21 import com.b510.notepad.ui.MainUI; 22 23 /** 24 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 25 * @created Nov 19, 2014 26 */ 27 public class FileMenuUtil extends MainUI { 28 29 private static final long serialVersionUID = 1L; 30 31 static Logger log = Logger.getLogger(FileMenuUtil.class); 32 33 public FileMenuUtil(String title) { 34 super(title); 35 } 36 37 /** 38 * Create a new Notepad. <br> 39 * 1. If the content of the Notepad is empty, then, create a new Notepad is 40 * itself.<br> 41 * 2. If the content of the Notepad is NOT empty, then, we want to create a 42 * new Notepad:<br> 43 * 2.1. If the Notepad is saved, then, create a new Notepad and let the 44 * parent <code>setVisible(false)</code><br> 45 * 2.2. If the Notepad is NOT saved<br> 46 * 2.2.1. If the user want to save the content, "YES", <code>save()</code>, 47 * go to step 2.1<br> 48 * 2.2.2. If the user do NOT want to save the content, "NO", clean the 49 * textArea, go to step 1<br> 50 * 2.2.3. If the user select the "Cancel" option, nothing to do and return 51 * to textArea.<br> 52 * 53 * @param mainUI 54 */ 55 public static void news(MainUI mainUI) { 56 log.debug(Common.NEW); 57 if (!Common.EMPTY.equals(filePath)) { 58 if (savedText.equals(textArea.getText())) { 59 createMainUI(mainUI); 60 } else { 61 confirmSave(mainUI); 62 } 63 } else { 64 if (Common.EMPTY.equals(textArea.getText())) { 65 createMainUI(mainUI); 66 } else { 67 confirmSave(mainUI); 68 } 69 } 70 } 71 72 /** 73 * @param mainUI 74 */ 75 private static void confirmSave(MainUI mainUI) { 76 int option = JOptionPane.showConfirmDialog(mainUI, Common.DO_YOU_WANT_TO_SAVE_CHANGES, Common.NOTEPAD, JOptionPane.YES_NO_CANCEL_OPTION); 77 if (option == JOptionPane.YES_OPTION) { 78 save(mainUI); 79 createMainUI(mainUI); 80 } else if (option == JOptionPane.NO_OPTION) { 81 createMainUI(mainUI); 82 } else if (option == JOptionPane.CANCEL_OPTION) { 83 textArea.setFocusable(true); 84 } 85 } 86 87 /** 88 * Open a text file:<br> 89 * 1. If the textArea is empty, then, click the "Open" menu to open a text 90 * file.<br> 91 * 2. If the textArea is NOT empty, then, we want to open a text file:<br> 92 * 2.1. If the content of textArea was saved, then we click the "Open" menu 93 * to open a text file.<br> 94 * 2.2. If the content of textArea was NOT saved. There is a dialog display.<br> 95 * 2.2.1. Selecting "Yes" to save content, and open a text file.<br> 96 * 2.2.2. Selecting "No", then do NOT save the content, and open a text 97 * file.<br> 98 * 2.2.3. Selecting "Cancel", nothing to do and return to textArea.<br> 99 * 100 * @param mainUI 101 * @see com.b510.notepad.util.FileMenuUtil#openOperation() 102 */ 103 public void open(MainUI mainUI) { 104 log.debug(Common.OPEN); 105 if (!Common.EMPTY.equals(filePath)) { 106 if (savedText.equals(textArea.getText())) { 107 openOperation(mainUI); 108 } else { 109 confirmOpen(mainUI); 110 } 111 } else { 112 if (Common.EMPTY.equals(textArea.getText())) { 113 openOperation(mainUI); 114 } else { 115 confirmOpen(mainUI); 116 } 117 } 118 } 119 120 private void confirmOpen(MainUI mainUI) { 121 int option = JOptionPane.showConfirmDialog(FileMenuUtil.this, Common.DO_YOU_WANT_TO_SAVE_CHANGES, Common.CONFIM_EXIT, JOptionPane.YES_NO_CANCEL_OPTION); 122 if (option == JOptionPane.YES_OPTION) { 123 save(mainUI); 124 openOperation(mainUI); 125 } else if (option == JOptionPane.NO_OPTION) { 126 openOperation(mainUI); 127 } else if (option == JOptionPane.CANCEL_OPTION) { 128 textArea.setFocusable(true); 129 } 130 } 131 132 /** 133 * The operation of the open<br> 134 * When the user want to open a TXT file, this method will be called.<br> 135 * 136 * @param mainUI 137 * @see com.b510.notepad.util.FileMenuUtil#open() 138 */ 139 private static void openOperation(MainUI mainUI) { 140 String path; 141 JFileChooser chooser = new JFileChooser(); 142 FileNameExtensionFilter filter; 143 filter = new FileNameExtensionFilter(Common.TXT_FILE, Common.TXT); 144 chooser.setFileFilter(filter); 145 chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); 146 chooser.setDialogTitle(Common.OPEN); 147 int ret = chooser.showOpenDialog(null); 148 if (ret == JFileChooser.APPROVE_OPTION) { 149 path = chooser.getSelectedFile().getAbsolutePath(); 150 String name = chooser.getSelectedFile().getName(); 151 try { 152 BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path), Common.GB2312)); 153 StringBuffer buffer = new StringBuffer(); 154 String line = null; 155 while ((line = reader.readLine()) != null) { 156 buffer.append(line).append(Common.NEW_LINE); 157 } 158 reader.close(); 159 textArea.setText(String.valueOf(buffer)); 160 mainUI.setTitle(name + Common.NOTEPAD_NOTEPAD); 161 savedText = textArea.getText(); 162 mainUI.setSaved(true); 163 filePath = path; 164 } catch (Exception e) { 165 e.printStackTrace(); 166 } 167 } 168 } 169 170 /** 171 * Saving a TXT file.<br> 172 * 1. If the user want to create a new TXT file, and type the content(empty 173 * is allowed) to save. In this case, a dialog will display.<br> 174 * 2. If the user want to save a existing file. then call 175 * <code>save()</code> method to save content.<br> 176 * 3. A existing file with some changes, then the user want to save it. The 177 * operation as same as step 2.<br> 178 * 179 * @param mainUI 180 */ 181 public static void save(MainUI mainUI) { 182 log.debug(Common.SAVE); 183 try { 184 if (null != filePath && !Common.EMPTY.equals(filePath)) { 185 OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(filePath)); 186 out.write(textArea.getText()); 187 out.close(); 188 mainUI.setSaved(true); 189 savedText = textArea.getText(); 190 } else { 191 FileDialog fileDialog = new FileDialog(mainUI, Common.SAVE, FileDialog.SAVE); 192 fileDialog.setVisible(true); 193 if (fileDialog.getDirectory() != null && fileDialog.getFile() != null) { 194 String fileName = fileDialog.getFile(); 195 if (!Common.TXT.equalsIgnoreCase(NotepadUtil.getPostfix(fileName))) { 196 fileName = fileName + Common.POINT + Common.TXT; 197 } 198 String path = fileDialog.getDirectory() + fileName; 199 OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path)); 200 out.write(textArea.getText()); 201 out.close(); 202 mainUI.setTitle(fileName + Common.NOTEPAD_NOTEPAD); 203 filePath = path; 204 mainUI.setSaved(true); 205 savedText = textArea.getText(); 206 } 207 } 208 } catch (Exception e) { 209 log.debug(e); 210 } 211 } 212 213 public static void saveAs(MainUI mainUI) { 214 log.debug(Common.SAVE_AS); 215 String path = filePath; 216 filePath = Common.EMPTY; 217 save(mainUI); 218 if (Common.EMPTY.equals(filePath)) { 219 filePath = path; 220 } 221 } 222 223 public void readProperties(MainUI mainUI) { 224 log.debug(Common.PROPERTIES); 225 if (!Common.EMPTY.equals(filePath) && mainUI.isSaved()) { 226 File file = new File(filePath); 227 JOptionPane.showMessageDialog(FileMenuUtil.this, NotepadUtil.fileProperties(file), Common.NOTEPAD, JOptionPane.INFORMATION_MESSAGE); 228 } else { 229 confirmSave(mainUI); 230 } 231 } 232 233 public void exit(MainUI mainUI) { 234 log.debug(Common.EXIT); 235 if (!Common.EMPTY.equals(filePath)) { 236 if (savedText.equals(textArea.getText())) { 237 NotepadUtil.exit(); 238 } else { 239 confirmExit(mainUI); 240 } 241 } else { 242 if (Common.EMPTY.equals(textArea.getText())) { 243 NotepadUtil.exit(); 244 } else { 245 confirmExit(mainUI); 246 } 247 } 248 } 249 250 private void confirmExit(MainUI mainUI) { 251 int option = JOptionPane.showConfirmDialog(FileMenuUtil.this, Common.DO_YOU_WANT_TO_SAVE_CHANGES, Common.CONFIM_EXIT, JOptionPane.YES_NO_CANCEL_OPTION); 252 if (option == JOptionPane.YES_OPTION) { 253 save(mainUI); 254 NotepadUtil.exit(); 255 } else if (option == JOptionPane.NO_OPTION) { 256 NotepadUtil.exit(); 257 } else if (option == JOptionPane.CANCEL_OPTION) { 258 textArea.setFocusable(true); 259 } 260 } 261 262 private static void createMainUI(MainUI mainUI) { 263 mainUI.setTitle(Common.UNTITLE + Common.NOTEPAD_NOTEPAD); 264 textArea.setText(Common.EMPTY); 265 filePath = Common.EMPTY; 266 savedText = Common.EMPTY; 267 mainUI.setSaved(false); 268 } 269 270 }
/notepad/src/main/java/com/b510/notepad/util/FormatMenuUtil.java
1 /** 2 * 3 */ 4 package com.b510.notepad.util; 5 6 import java.awt.Font; 7 8 import org.apache.log4j.Logger; 9 10 import com.b510.notepad.common.Common; 11 import com.b510.notepad.ui.FontManagerUI; 12 import com.b510.notepad.ui.FontSizeManagerUI; 13 import com.b510.notepad.ui.FontStyleManagerUI; 14 import com.b510.notepad.ui.MainUI; 15 16 /** 17 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 18 * @created Nov 19, 2014 19 */ 20 public class FormatMenuUtil extends MainUI { 21 22 private static final long serialVersionUID = 1L; 23 24 static Logger log = Logger.getLogger(FormatMenuUtil.class); 25 26 private static FontManagerUI fontManagerUI; 27 private static FontSizeManagerUI fontSizeManagerUI; 28 private static FontStyleManagerUI fontStyleManagerUI; 29 30 public FormatMenuUtil(String title) { 31 super(title); 32 } 33 34 public static void wordWrap() { 35 log.debug(Common.WORD_WRAP); 36 if (lineWrap) { 37 textArea.setLineWrap(false); 38 lineWrap = false; 39 } else { 40 textArea.setLineWrap(true); 41 lineWrap = true; 42 } 43 } 44 45 public void resetFont(MainUI mainUI) { 46 log.debug(Common.RESET_FONT); 47 fontNum = Common.FONT_NUM; 48 FontManagerUI.FONT_TYPE = Common.FONT_LUCIDA_CONSOLE; 49 fontSizeNum = Common.FONT_SIZE_NUM; 50 FontManagerUI.FONT_SIZE = Common.FONT_SIZE; 51 FontManagerUI.FONT_STYPLE = Common.FONT_STYLE_DEFAULT; 52 fontStyleNum = Common.FONT_STYLE_NUM; 53 textArea.setFont(new Font(FontManagerUI.FONT_TYPE, fontStyleNum, FontManagerUI.FONT_SIZE)); 54 setJUI(); 55 } 56 57 public void font(MainUI mainUI) { 58 log.debug(Common.FONT); 59 if (null == fontManagerUI) { 60 fontManagerUI = new FontManagerUI(Common.FONT); 61 fontManagerUI.setFormatMenuUtil(FormatMenuUtil.this); 62 } else { 63 fontManagerUI.setVisible(true); 64 fontManagerUI.setFocusable(true); 65 } 66 } 67 68 public void fontSize(MainUI mainUI) { 69 log.debug(Common.FONT_SIZE_TITLE); 70 if (null == fontSizeManagerUI) { 71 fontSizeManagerUI = new FontSizeManagerUI(Common.FONT); 72 fontSizeManagerUI.setFormatMenuUtil(FormatMenuUtil.this); 73 } else { 74 fontSizeManagerUI.setVisible(true); 75 fontSizeManagerUI.setFocusable(true); 76 } 77 } 78 79 public void fontStyle(MainUI mainUI) { 80 log.debug(Common.FONT_SIZE_TITLE); 81 if (null == fontStyleManagerUI) { 82 fontStyleManagerUI = new FontStyleManagerUI(Common.FONT_STYLE); 83 fontStyleManagerUI.setFormatMenuUtil(FormatMenuUtil.this); 84 } else { 85 fontStyleManagerUI.setVisible(true); 86 fontStyleManagerUI.setFocusable(true); 87 } 88 } 89 90 public void distoryFontManagerUI() { 91 if (null != fontManagerUI) { 92 fontManagerUI = null; 93 } 94 } 95 96 public void distoryFontSizeManagerUI() { 97 if (null != fontSizeManagerUI) { 98 fontSizeManagerUI = null; 99 } 100 } 101 102 public void distoryFontStyleManagerUI() { 103 if (null != fontSizeManagerUI) { 104 fontSizeManagerUI = null; 105 } 106 } 107 }
/notepad/src/main/java/com/b510/notepad/util/HelpMenuUtil.java
1 /** 2 * 3 */ 4 package com.b510.notepad.util; 5 6 import org.apache.log4j.Logger; 7 8 import com.b510.notepad.common.Common; 9 import com.b510.notepad.ui.AboutUI; 10 import com.b510.notepad.ui.MainUI; 11 12 /** 13 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 14 * @created Nov 19, 2014 15 */ 16 public class HelpMenuUtil extends MainUI { 17 18 private static final long serialVersionUID = 1L; 19 20 static Logger log = Logger.getLogger(HelpMenuUtil.class); 21 22 private static AboutUI aboutUI; 23 24 public HelpMenuUtil(String title) { 25 super(title); 26 } 27 28 public void about(MainUI mainUI) { 29 log.debug(Common.ABOUT_NOTEPAD); 30 if (null == aboutUI) { 31 aboutUI = new AboutUI(Common.ABOUT_NOTEPAD); 32 aboutUI.setHelpMenuUtil(HelpMenuUtil.this); 33 } else { 34 aboutUI.setVisible(true); 35 aboutUI.setFocusable(true); 36 } 37 } 38 39 public void distoryAboutUI() { 40 if (null != aboutUI) { 41 aboutUI = null; 42 } 43 } 44 }
/notepad/src/main/java/com/b510/notepad/util/NotepadUtil.java
1 /** 2 * 3 */ 4 package com.b510.notepad.util; 5 6 import java.io.File; 7 import java.io.IOException; 8 import java.text.SimpleDateFormat; 9 import java.util.Date; 10 11 import org.apache.log4j.Logger; 12 13 import com.b510.notepad.common.Common; 14 15 /** 16 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 17 * @created Nov 19, 2014 18 */ 19 public class NotepadUtil { 20 21 static Logger log = Logger.getLogger(NotepadUtil.class); 22 23 public static void exit() { 24 log.debug(Common.SYSTEM_EXIT); 25 System.exit(0); 26 } 27 28 public static void accessURL(String url) { 29 if (null == url || Common.EMPTY.equals(url)) { 30 return; 31 } 32 try { 33 Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url); 34 } catch (IOException e1) { 35 e1.printStackTrace(); 36 } 37 } 38 39 /** 40 * @return i.e. 3:49 PM 11/20/2014 41 */ 42 public static String getTimeDate(){ 43 SimpleDateFormat sdf = new SimpleDateFormat(Common.DATE_FORMAT); 44 Date date = new Date(); 45 String timeDate = sdf.format(date); 46 return timeDate; 47 } 48 49 /** 50 * @param path i.e. com/b510/resources/images/hongten.png 51 * @return i.e. png 52 */ 53 public static String getPostfix(String path) { 54 if (path == null || Common.EMPTY.equals(path.trim())) { 55 return Common.EMPTY; 56 } 57 if (path.contains(Common.POINT)) { 58 return path.substring(path.lastIndexOf(Common.POINT) + 1, path.length()); 59 } 60 return Common.EMPTY; 61 } 62 63 public static String fileProperties(File file) { 64 return "<html>" 65 + "File Name : " + file.getName() + "<br/>" 66 + "File Type : "+ getPostfix(file.getAbsolutePath()) +" file<br/>" 67 + "File Size : " + file.length()/1024 +" KB<br/>" 68 + "Modify Date : " + new SimpleDateFormat().format(file.lastModified()) + "<br/>" 69 + "Location : " + file.getParent() + "<br/>" 70 + "CanRead : " + file.canRead() + "<br/>" 71 + "CanWrite : " + file.canWrite() + "<html>"; 72 } 73 }
/notepad/src/main/java/com/b510/notepad/util/ViewMenuUtil.java
1 /** 2 * 3 */ 4 package com.b510.notepad.util; 5 6 import org.apache.log4j.Logger; 7 8 import com.b510.notepad.common.Common; 9 import com.b510.notepad.ui.MainUI; 10 import com.b510.notepad.ui.SkinManagerUI; 11 12 /** 13 * @author Hongten - http://www.cnblogs.com/hongten/p/hongten_notepad_index.html 14 * @created Nov 19, 2014 15 */ 16 public class ViewMenuUtil extends MainUI { 17 18 private static final long serialVersionUID = 1L; 19 20 static Logger log = Logger.getLogger(ViewMenuUtil.class); 21 22 private static SkinManagerUI skinManagerUI; 23 24 public ViewMenuUtil(String title) { 25 super(title); 26 } 27 28 public void skin(MainUI mainUI) { 29 log.debug(Common.SKIN); 30 if (null == skinManagerUI) { 31 skinManagerUI = new SkinManagerUI(Common.SKIN); 32 skinManagerUI.setViewMenuUtil(ViewMenuUtil.this); 33 } else { 34 skinManagerUI.setVisible(true); 35 skinManagerUI.setFocusable(true); 36 } 37 } 38 39 public void distorySkinManagerUI() { 40 if (null != skinManagerUI) { 41 skinManagerUI = null; 42 } 43 } 44 45 }
/notepad/src/main/java/log4j.properties
1 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 2 log4j.appender.stdout.Target=System.out 3 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 4 log4j.appender.stdout.layout.ConversionPattern=[Notepad] %d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c:%L - %m%n 5 6 log4j.appender.notepad=org.apache.log4j.DailyRollingFileAppender 7 log4j.appender.notepad.File=C:\\log4j\\log4j-notepad 8 log4j.appender.notepad.DatePattern='_'yyyy-MM-dd'.log' 9 log4j.appender.notepad.layout=org.apache.log4j.PatternLayout 10 log4j.appender.notepad.layout.ConversionPattern=[Notepad] %d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c:%L - %m%n 11 12 log4j.rootLogger=debug,stdout,notepad
/notepad/pom.xml
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 5 <groupId>com.b510.notepad</groupId> 6 <artifactId>notepad</artifactId> 7 <version>1.0</version> 8 <packaging>jar</packaging> 9 10 <name>notepad</name> 11 <url>http://maven.apache.org</url> 12 13 <properties> 14 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 15 </properties> 16 17 <dependencies> 18 <dependency> 19 <groupId>junit</groupId> 20 <artifactId>junit</artifactId> 21 <version>4.10</version> 22 <scope>test</scope> 23 </dependency> 24 25 <dependency> 26 <groupId>log4j</groupId> 27 <artifactId>log4j</artifactId> 28 <version>1.2.16</version> 29 </dependency> 30 31 <!-- substance dependency start--> 32 <dependency> 33 <groupId>org.jvnet.substance</groupId> 34 <artifactId>substance</artifactId> 35 <version>1.0</version> 36 </dependency> 37 <!-- substance dependency end--> 38 </dependencies> 39 </project>
=================================================
More Information About Notepad:
=================================================
Author : Hongten
E-mail : hongtenzone@foxmail.com
Home Page : http://www.cnblogs.com
Notepad Page : http://www.cnblogs.com/hongten/p/hongten_notepad_index.html
Notepad Skin Page : http://www.cnblogs.com/hongten/p/hongten_notepad_substance_skins.html
Windows Notepad : http://windows.microsoft.com/en-us/windows/notepad-faq#1TC=windows-7
=================================================
Download:
=================================================
https://files.cnblogs.com/hongten/notepad_src.rar
http://pan.baidu.com/s/1o6wU49k
https://files.cnblogs.com/hongten/notepad_API.rar
http://pan.baidu.com/s/1o6wU49k
Notepad_1.1 : Updating My Notepad_1.1
========================================================
More reading,and english is important.
I'm Hongten
大哥哥大姐姐,觉得有用打赏点哦!多多少少没关系,一分也是对我的支持和鼓励。谢谢。
Hongten博客排名在100名以内。粉丝过千。
Hongten出品,必是精品。
E | hongtenzone@foxmail.com B | http://www.cnblogs.com/hongten
========================================================