KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > core > gui > util > FindReplaceDialog


1 package org.columba.core.gui.util;
2
3 import java.awt.BorderLayout JavaDoc;
4 import java.awt.event.ActionEvent JavaDoc;
5 import java.awt.event.ActionListener JavaDoc;
6
7 import javax.swing.BorderFactory JavaDoc;
8 import javax.swing.JDialog JavaDoc;
9 import javax.swing.JOptionPane JavaDoc;
10 import javax.swing.JPanel JavaDoc;
11 import javax.swing.JTextField JavaDoc;
12
13 import org.columba.core.gui.base.ButtonWithMnemonic;
14 import org.columba.core.gui.base.CheckBoxWithMnemonic;
15 import org.columba.core.gui.base.LabelWithMnemonic;
16 import org.columba.core.resourceloader.GlobalResourceLoader;
17 import org.columba.core.resourceloader.IconKeys;
18 import org.columba.core.resourceloader.ImageLoader;
19 import org.columba.core.util.FindReplace;
20 import org.columba.core.util.IEditableText;
21
22 import com.jgoodies.forms.layout.CellConstraints;
23 import com.jgoodies.forms.layout.FormLayout;
24
25 @SuppressWarnings JavaDoc("serial")
26 public class FindReplaceDialog extends JDialog JavaDoc implements ActionListener JavaDoc{
27     private static final String JavaDoc RESOURCE_PATH = "org.columba.core.i18n.dialog";
28     
29     private LabelWithMnemonic findLabel;
30     private LabelWithMnemonic replaceLabel;
31     
32     private ButtonWithMnemonic findButton;
33     private ButtonWithMnemonic replaceButton;
34     private ButtonWithMnemonic replaceAllButton;
35     private ButtonWithMnemonic closeButton;
36     
37     private CheckBoxWithMnemonic wholeWordCheckBox;
38     private CheckBoxWithMnemonic caseSensCheckBox;
39     private CheckBoxWithMnemonic findBackCheckBox;
40     
41     private JTextField JavaDoc findTextField;
42     private JTextField JavaDoc replaceWithTextField;
43
44     private IEditableText text;
45     private FindReplace finder = new FindReplace();
46     
47     public FindReplaceDialog(IEditableText text) {
48         setTitle(GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","findreplace.title"));
49         this.text = text;
50         initComponents();
51         setResizable(false);
52         pack();
53         setVisible(true);
54     }
55     
56     private void createComponents(){
57         
58         findLabel = new LabelWithMnemonic(GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","findlabel"));
59         replaceLabel = new LabelWithMnemonic(GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","replacewithlabel"));
60         
61         findTextField = new JTextField JavaDoc(16);
62         replaceWithTextField = new JTextField JavaDoc(16);
63
64         wholeWordCheckBox = new CheckBoxWithMnemonic(GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","matchword"));
65         caseSensCheckBox = new CheckBoxWithMnemonic(GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","matchcase"));
66         findBackCheckBox = new CheckBoxWithMnemonic(GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","findbackwards"));
67
68         findButton = new ButtonWithMnemonic(GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","find"));
69         replaceButton = new ButtonWithMnemonic(GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","replace"));
70         replaceAllButton = new ButtonWithMnemonic(GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","replaceall"));
71         closeButton = new ButtonWithMnemonic(GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","close"));
72
73     }
74     private void initComponents(){
75         
76         FormLayout layout = new FormLayout("pref, 6dlu, pref", // columns
77
"pref, 3dlu, pref"); // rows
78

79         CellConstraints cc = new CellConstraints();
80         
81         createComponents();
82         
83         JPanel JavaDoc panelMain = new JPanel JavaDoc(layout);
84         panelMain.setBorder(BorderFactory.createEmptyBorder(12,12,12,12));
85         
86         panelMain.add(createInputPanel(), cc.xy(1,1));
87         panelMain.add(createButtonPanel(),cc.xywh(3,1,1,3));
88         panelMain.add(createOptionPanel(),cc.xy(1,3));
89         
90         getContentPane().add(panelMain,BorderLayout.SOUTH);
91         getContentPane().add(
92                 new DialogHeaderPanel(GlobalResourceLoader.getString(RESOURCE_PATH,
93                         "findreplace", "header_title"), GlobalResourceLoader
94                         .getString(RESOURCE_PATH, "findreplace", "header_description"),
95                         ImageLoader.getIcon(IconKeys.SEARCH)),
96                 BorderLayout.NORTH);
97     }
98
99     private JPanel JavaDoc createInputPanel(){
100         FormLayout layout = new FormLayout("left:pref, 6dlu, left:pref",
101                 "pref, 3dlu, pref");
102         CellConstraints cc = new CellConstraints();
103         JPanel JavaDoc inputPanel = new JPanel JavaDoc(layout);
104         
105         inputPanel.add(findLabel,cc.xy(1,1));
106         findLabel.setLabelFor(findTextField);
107         inputPanel.add(findTextField,cc.xy(3,1));
108         
109         inputPanel.add(replaceLabel,cc.xy(1,3));
110         replaceLabel.setLabelFor(replaceWithTextField);
111         inputPanel.add(replaceWithTextField,cc.xy(3,3));
112         
113         return inputPanel;
114     }
115     
116     private JPanel JavaDoc createOptionPanel(){
117         // create a panel with a border and 3 options
118
FormLayout layout = new FormLayout("3dlu, left:pref, 30dlu, right:pref, 3dlu", // columns
119
"pref, 3dlu, pref"); // rows
120

121         CellConstraints cc = new CellConstraints();
122         
123         JPanel JavaDoc optionPanel = new JPanel JavaDoc(layout);
124         optionPanel.setBorder(BorderFactory.createTitledBorder(GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","options")));
125     
126         optionPanel.add(caseSensCheckBox,cc.xy(2,1));
127         optionPanel.add(wholeWordCheckBox,cc.xywh(2,3,3,1));
128         optionPanel.add(findBackCheckBox,cc.xy(4,1));
129         
130         return optionPanel;
131     }
132
133
134     private JPanel JavaDoc createButtonPanel(){
135         // create a panel with all 4 buttons of the window
136
FormLayout layout = new FormLayout("fill:pref", // columns
137
"pref, 3dlu, pref, 3dlu, pref, 3dlu, pref"); // rows
138
CellConstraints cc = new CellConstraints();
139         JPanel JavaDoc buttonPanel = new JPanel JavaDoc(layout);
140         
141         
142         findButton.addActionListener(this);
143         findButton.setActionCommand("FIND");
144         this.getRootPane().setDefaultButton(findButton);
145
146         replaceButton.addActionListener(this);
147         replaceButton.setActionCommand("REPLACE");
148
149         replaceAllButton.addActionListener(this);
150         replaceAllButton.setActionCommand("REPLACEALL");
151
152         closeButton.addActionListener(this);
153         closeButton.setActionCommand("CLOSE");
154
155         buttonPanel.add(findButton,cc.xy(1,1));
156         buttonPanel.add(replaceButton,cc.xy(1,3));
157         buttonPanel.add(replaceAllButton,cc.xy(1,5));
158         buttonPanel.add(closeButton,cc.xy(1,7));
159         
160         return buttonPanel;
161     }
162     
163     
164     public void actionPerformed(ActionEvent JavaDoc e) {
165         // if some action was performed
166
String JavaDoc action = e.getActionCommand();
167
168         String JavaDoc source = text.getText();
169
170         // setup the finder
171
finder.setPattern(findTextField.getText());
172         finder.setSource(source);
173         finder.setCaseSensitive(caseSensCheckBox.isSelected());
174         finder.setMatchWholeWord(wholeWordCheckBox.isSelected());
175         finder.setBackwards(findBackCheckBox.isSelected());
176         finder.setReplaceWith(replaceWithTextField.getText());
177         
178         // find action performed
179
if (action.equals("FIND")) {
180             int position = finder.findnext();
181             if(position>=0) {
182                 // mark found pattern
183
mark(position,position + findTextField.getText().length());
184                 //text.grabFocus();
185
} else
186             {
187                 // delete marks
188
mark(0, 0);
189                 JOptionPane.showMessageDialog(this, GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","string_not_found"));
190             }
191         }
192         //replace action performed
193
else if (action.equals("REPLACE")){
194             int position = finder.replace();
195             if (position>=0) {
196                 //text.grabFocus();
197
text.setText(finder.getSource());
198                 mark(position,position + replaceWithTextField.getText().length());
199             }
200             else
201             {
202                 mark(0, 0);
203                 JOptionPane.showMessageDialog(this, GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","string_not_found"));
204             }
205         }
206         //replaceall action performed
207
else if (action.equals("REPLACEALL")){
208             finder.replaceAll();
209             if (finder.getSource().equals(text.getText())) {
210                 //text.grabFocus();
211
text.setText(finder.getSource());
212                 JOptionPane.showMessageDialog(this, GlobalResourceLoader.getString(RESOURCE_PATH,"findreplace","string_not_found"));
213             }
214             else
215                 text.setText(finder.getSource());
216         }
217         else if (action.equals("CLOSE")){
218             this.dispose();
219         }
220     }
221     
222     // to mark a text in the JTextPane
223
private void mark(int start, int end) {
224         text.setCaretPosition(start);
225         text.moveCaretPosition(end);
226     }
227 }
228
Popular Tags