Completar digitação de caracteres [Resolvido]

Mais uma dúvida minha com o Swing… Se alguém puder me ajudar, meu problema é assim:

Tenho um JTextArea e eu quero, toda vez que eu digitar o caracter “[” automaticamente seja completado com o “]” e o cursor fique posicionado entre os colchetes. Tipo o editor de códigos de NetBeans. Esta ação deve ser gerada cada vez que eu pressionar as teclas “CTRL + Espaço”.

Se alguém pelo menos dizer o que eu devo pesquisar já ficaria muito agradecido, pois estou meio sem direção. Eu tentei caputar o texto digitado no JTextArea assim:

if(jTextArea_Formula.getText() == "["){ //Mais código aqui }
Mas acho que não é a maneira ideal.

Agradeço.

Fiz aqui um exemplo, dá uma testada aí.

[code]import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class Exemplo extends JFrame {
JLabel label;

JTextArea texto = null;

JPanel panel;

public Exemplo() {
	BoxLayout layout = new BoxLayout(this.getContentPane(),
			BoxLayout.Y_AXIS);
	this.setLayout(layout);

	label = new JLabel("Teste");
	texto = new JTextArea();
	texto.addKeyListener(new KeyListener() {

		public void keyPressed(KeyEvent arg0) {
			

		}

		public void keyReleased(KeyEvent arg0) {
			String t = texto.getText();
		    int pos = texto.getCaretPosition()-1;
			if(arg0.getKeyChar()=='['){
				t= t+"]";
			texto.setText(t);
			texto.setCaretPosition(pos+1);
			}
			
		}

		public void keyTyped(KeyEvent arg0) {
			// TODO Auto-generated method stub

		}

	});
	texto.setColumns(20);
	panel = new JPanel();
	panel.add(label);
	panel.add(texto);
	this.add(panel);

	this.pack();
	this.setVisible(true);

}

public static void main(String args[]) {
	Exemplo exemplo = new Exemplo();
	exemplo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}[/code]

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class JanelaTexto extends JFrame {

	JTextArea texto;
	JScrollPane scroll;

	public JanelaTexto() {
		super();
		setSize(500,500);

		texto = new JTextArea();
		scroll = new JScrollPane(texto);
		getContentPane().add(scroll);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		texto.setFont(new Font("Arial", Font.BOLD, 14));


		texto.addKeyListener(new KeyAdapter() {
			public void keyReleased(KeyEvent e) {

				if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_SPACE) {
					verificar();
				}
			}

		});

		setVisible(true);
	}


	public void verificar() {
		int cursorpos = texto.getCaretPosition() - 1;

		if (cursorpos < 0) {
			return;
		}

		if (texto.getText().substring(cursorpos,cursorpos+1).equals("[")) {
			String antigo = texto.getText();
			texto.setText(antigo.substring(0,cursorpos+1) + "]" + antigo.substring(cursorpos+1,antigo.length()));
			texto.setCaretPosition(cursorpos+1);
		}

	}

	public static void main(String[] args){
		new JanelaTexto();
	}

}

Obrigado pessoal. Eu nem queria o código pronto, pois acho que devemos, como profissionais saber encontrar as soluções para os problemas. Mas já que veio assim, poupei um pouco de esforço.

Na minha aplicação eu usei o código do acopiara. Então, eu usei somente a funcionalidade que eu queria. Na verdade, eu utilizei somente o trecho do código que me seria útil, e criei o método que segue abaixo:

[code]private void completaCaracterDigitado(){

    jTextArea_Formula.addKeyListener(new KeyListener(){
        public void keyPressed(KeyEvent evt){
            
        }
        public void keyReleased(KeyEvent evt){
            String t = jTextArea_Formula.getText();
            int pos = jTextArea_Formula.getCaretPosition()-1;
            if(evt.getKeyChar() == '['){
                t = t + ']';
            }
                jTextArea_Formula.setText(t);
                jTextArea_Formula.setCaretPosition(pos+1);
            }
        public void keyTyped(KeyEvent evt){

        }
    });
    
}[/code]

Depois chamei o este método no construtor da classe.

Obrigado!!! :smiley: