适用于JTextArea的查寻替换对话框

适用于JTextArea的查找替换对话框
package test.tool.gui.dbtool.dialog;

import java.awt.event.KeyEvent;

import javax.swing.JOptionPane;
import javax.swing.JTextArea;

import test.tool.gui.common.SysFontAndFace;
import test.tool.gui.dbtool.mycomponent.MyJTextField;


public class FindReplaceDialog extends javax.swing.JDialog {

	private static final long serialVersionUID = 1L;
	private javax.swing.JButton jButton_cancel;
    private javax.swing.JButton jButton_findNext;
    private javax.swing.JButton jButton_replace;
    private javax.swing.JButton jButton_replaceAll;
    private javax.swing.JCheckBox jCheckBox_case;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private MyJTextField jTextField_find;
    private MyJTextField jTextField_replace;
    
    private JTextArea textArea = null;
    private int  findIndex = 0 ;
        
    public FindReplaceDialog(java.awt.Frame parent, JTextArea textArea) {
        super(parent, false);
        initComponents();
        
        this.textArea = textArea;
        this.findIndex = 0;
        this.setLocationRelativeTo(parent);
        this.setResizable(false);
        this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);//隐藏窗口并释放资源

		if(textArea.isEditable()){
			this.jButton_replace.setEnabled(true);
			this.jButton_replaceAll.setEnabled(true);
		}else{
			this.jButton_replace.setEnabled(false);
			this.jButton_replaceAll.setEnabled(false);
		}
    }
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jTextField_find = new MyJTextField();
        jTextField_replace = new MyJTextField();
        jCheckBox_case = new javax.swing.JCheckBox();
        jButton_findNext = new javax.swing.JButton();
        jButton_replace = new javax.swing.JButton();
        jButton_replaceAll = new javax.swing.JButton();
        jButton_cancel = new javax.swing.JButton();

        setTitle("查找/替换");
        jLabel1.setText("查找内容:");
        jLabel2.setText("替换为:");
        jCheckBox_case.setText("区分大小写");
        jCheckBox_case.setSelected(true);//默认是大小写敏感的
        jCheckBox_case.setFont(SysFontAndFace.font);
        
        jButton_findNext.setText("查找下一个");
        jButton_replace.setText("替换");
        jButton_replaceAll.setText("全部替换");
        jButton_cancel.setText("取消");
        jButton_findNext.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	String str = textArea.getSelectedText();
                if(str==null||"".equals(str))
                {
                    findIndex=0;
                }
            	find(jTextField_find.getText(),findIndex);
            }
        });
        jButton_replace.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	 String str = textArea.getSelectedText();
            	 if(str!=null&&!"".equals(str)){
                	 textArea.replaceSelection(jTextField_replace.getText());
            	 }  
            }
        });
        jButton_replaceAll.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {  	
            	count = 0;
                replaceAll(jTextField_find.getText(),jTextField_replace.getText(), 0 ,textArea.getText().length());
            }
        });
        jButton_cancel.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	close();
            }
        });
        
        //为 jTextField_find 设置键盘监听事件,回车执行 【查找下一个】
        jTextField_find.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
            	if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                	String str = textArea.getSelectedText();
                    if(str==null||"".equals(str))
                    {
                        findIndex=0;
                    }
                	find(jTextField_find.getText(),findIndex);         
        		} 
            }
        });   
//-------------------布局信息-----------------
        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(21, 21, 21)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(layout.createSequentialGroup()
                        .add(jCheckBox_case)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 215, Short.MAX_VALUE)
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                            .add(jButton_replaceAll)
                            .add(jButton_cancel)))
                    .add(layout.createSequentialGroup()
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                            .add(layout.createSequentialGroup()
                                .add(jLabel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 68, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                                .add(jTextField_replace))
                            .add(layout.createSequentialGroup()
                                .add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 76, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                                .add(jTextField_find, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 178, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 30, Short.MAX_VALUE)
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                            .add(jButton_findNext)
                            .add(jButton_replace))))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(18, 18, 18)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(jLabel1)
                    .add(jTextField_find, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jButton_findNext))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jLabel2)
                    .add(jTextField_replace, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jButton_replace))
                .add(1, 1, 1)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(layout.createSequentialGroup()
                        .add(28, 28, 28)
                        .add(jCheckBox_case))
                    .add(layout.createSequentialGroup()
                        .add(9, 9, 9)
                        .add(jButton_replaceAll)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jButton_cancel)))
                .addContainerGap(20, Short.MAX_VALUE))
        );

        pack();
    }// //GEN-END:initComponents
    
 /*
  *  查找 
  */
    public void find(String str, int cur) {
    	
    	int i = -1;
    	String textAreaText = textArea.getText();
    	if(!jCheckBox_case.isSelected()){//如果大小写不敏感
    		
    		i = textAreaText.toUpperCase().indexOf(str.toUpperCase(),cur);
    	
    	}else{//如果大小写敏感
    	
    		i = textAreaText.indexOf(str,cur);
    	}
		if (i >= 0) {
			textArea.setSelectionStart(i); // 使找到的字符串选中
			textArea.setSelectionEnd(i + str.length());
			findIndex = ++i; // 用于查找下一个
		} else {
			if(findIndex == 0){
				return;
			}else{			
				//查询完毕,重新重头开始查找
				findIndex = 0;
				find(str, findIndex);
			}
		}
	} 
   /*
    *  替换全部 
    */
    int count = 0;
    public void replaceAll(String fromStr, String toStr, int cur, int end) {
    	
		if (cur > end) {
			return;
		} else {
			int i = -1;
			String textAreaText = textArea.getText();
			if (!jCheckBox_case.isSelected()) {// 如果大小写不敏感
				i = textAreaText.toUpperCase().indexOf(fromStr.toUpperCase(),
						cur);
			} else {
				i = textAreaText.indexOf(fromStr, cur);
			}
			if (i >= 0) {
				textArea.setSelectionStart(i); // 使找到的字符串反白选中
				textArea.setSelectionEnd(i + fromStr.length());
				textArea.replaceSelection(toStr); // 替换
				cur = ++i;
				count++;
			} else {
				JOptionPane.showMessageDialog(this, " 替换完毕,共替换  " + count + " 处!");
				return;
			}
			replaceAll(fromStr, toStr, cur, end); // 递归查找与替换
		}
	} 
    private void close(){
    	this.dispose();
    }
}ln

 
适用于JTextArea的查寻替换对话框_第1张图片

你可能感兴趣的:(适用于JTextArea的查寻替换对话框)