Duvida JEditorPane - Linhas e Colunas

4 respostas
paulo.ubuntu

Bom, primeiro de tudo prazer meu nome é Paulo…sou novo por aqui…
mas ja tenho problemas pra voces rsrs
mas prometo ajudar quando souber respostas de outros topicos

eu gosto muito do kWrite e o Kate do KDE do linux. e estou fazendo uma aplicacao similar ao KWrite em java e pretendia distribuir depois no Codigo-fonte mas tive um problema
queria registrar numa statusbar que criei o numero da linha e a coluna da linha corrente…
que nem o do eclipse entendem

tipo Linha 59 : Coluna 40
estou implementando keylistener e mouselistener para tratar justamente desses eventos…se o usuario clicar em um determinado ponto do codigo queria que aparecesse a linha e coluna da qual ele clicou

podem me ajudar ::(meu interrogacao num ta funcionando rsrs)

Obrigado

4 Respostas

Metaleiro

[color=darkblue]Dá uma olhada no System.out do código: [/color]

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

class PainelMouse extends JPanel implements MouseMotionListener {
    public PainelMouse() {
        addMouseMotionListener(this);
    }
    public void mouseDragged(MouseEvent evt) {
        Graphics g = getGraphics();
        g.drawLine(evt.getX(), evt.getY(), 1, 1);
        g.dispose();
    }
    public void mouseMoved(MouseEvent evt) {
        System.out.println("x:" + evt.getX() + ", y:" +  evt.getY());
    }
}

class JanelaMouse extends JFrame {
    public JanelaMouse() {
        setSize(300, 300);
        getContentPane().add(new PainelMouse());
    }
}

public class DesenhoMouse {
    public static void main(String args[]) {
        JanelaMouse jm = new JanelaMouse();
        jm.show();
    }
}
paulo.ubuntu

Po Kra…brigadão mesmo viuuu :smiley:

destination

Muito interessante, mas e quanto a outra dúvida? Eu estou querendo saber como colocar Linhas e Colunas através de um evento do teclado e não do mouse, pois esse funcionou. Eu usei keylistener, mas ele só tem um método getKeyLocation que não funciona no caso. Tentei CaretListener, mas ele tem dois métodos que fazem a mesma coisa getDot e getMark.

Se eu digitar ao como “ABCD” eles retornam 4. Se em seguida eu apertar o ENTER pra pular de linha, eles retornam 5.

Alguém me ajuda?

paulo.ubuntu

Cara…eu consegui implementar assim

ve se te ajuda

CLasse de KeyListener

package net.sf.jnote.events;


import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.SwingUtilities;

import net.sf.jnote.gui.FramePrincipal;
import net.sf.jnote.pojo.LinhasEColunas;
import net.sf.jnote.util.ClipBoardJava;
import net.sf.jnote.util.Criadora;

//import pojo.AlteracoesTexto;

/**
 * Essa Classe tem o Fundamento de suprir as necessidades do CTRL-Z e o
 * SHIFT_CTRL-Z , que seria respectivamente desfazer e refazer. É uma Class que
 * implementa KeyListener para ouvir as teclas prescionadas
 * 
 * @author Paulo Miguel - [email removido]
 * 
 */
public class EventsKeyListeners implements KeyListener, Runnable {

	public void keyPressed(KeyEvent e) {
		// da a posicao inicial do cursor para que seja corretamente tratado na ClassAlteracoesTexto
//		if(e.getKeyChar() == 8) //Se o
//		alteratxt = new AlteracoesTexto();
//		alteratxt.setPosicao_inicial(FramePrincipal.edtArea.getCaretPosition());
		
		
	}

	public void keyReleased(KeyEvent e) {
		// Verifica se o Clipboard esta vazio , para entao
		// ativar o meuColar
		if (ClipBoardJava.getClipboardConteudo() != null
				|| ClipBoardJava.getClipboardConteudo() != "")
			Criadora.validaJMenuItem("colar", true);
		//Incrementa Linhas e Colunas no StatusBar
		SwingUtilities.invokeLater(new  Runnable() {
			public void run() {
				LinhasEColunas b = new LinhasEColunas();
				b.encontraLinha(FramePrincipal.edtArea.getCaretPosition() );	
				FramePrincipal.indicadorColuna.setText("" +b.getColunaAtual());
				FramePrincipal.indicadorDeLinha.setText("" +b.getLinhaAtual());
			}
		});
		
		// da a posicao final do cursor para que seja corretamente tratado na ClassAlteracoesTexto
//		alteratxt.setPosicao_final(FramePrincipal.edtArea.getCaretPosition());
//		try {
//			//Obtem o texto entre as duas posicoes
//			alteratxt.setTextoAlterado(FramePrincipal.edtArea.getText(alteratxt.getPosicao_inicial(),1));
//			//Adiciona na lista static da class AlteracoesTexto
//			alteratxt.add();
//			System.out.println(alteratxt.toString(0));
//		} catch (BadLocationException e1) {
//			e1.printStackTrace();
//		}
	}

	public void keyTyped(KeyEvent e) {
		//Incrementa Linhas e Colunas no StatusBar
		SwingUtilities.invokeLater(new  Runnable() {
			public void run() {
				LinhasEColunas b = new LinhasEColunas();
				b.encontraLinha(FramePrincipal.edtArea.getCaretPosition());
				FramePrincipal.indicadorColuna.setText("" +b.getColunaAtual());
				FramePrincipal.indicadorDeLinha.setText("" +b.getLinhaAtual());
			}
		});
	}
	//private AlteracoesTexto alteratxt; 

	@Override
	public void run() {
		LinhasEColunas b = new LinhasEColunas();
		b.encontraLinha(FramePrincipal.edtArea.getCaretPosition() );	
		FramePrincipal.indicadorColuna.setText("" +b.getColunaAtual());
		FramePrincipal.indicadorDeLinha.setText("" +b.getLinhaAtual());
	}

}

Classe Linhas e COlunas ( a que diz em qual linha e qual coluna se encontram)

package net.sf.jnote.pojo;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import javax.swing.text.Element;

import net.sf.jnote.gui.FramePrincipal;

/**
 * Prove numeros de linhas e Colunas do editor de Texto
 * Nessa caso ela sera utilizada para fornecer dados a
 * StatusBar de Linhas e colunas do FramePrincipal
 * @author paulo - [email removido]
 *
 */
public  class LinhasEColunas  {

	public  LinhasEColunas() {}
	public synchronized void encontraLinha(int caracter){
		try {
			BufferedReader reader = new BufferedReader(new StringReader(
					FramePrincipal.edtArea.getText()));
			int contador =0;
			@SuppressWarnings("unused")
			String linhaEncontrada;
			while((linhaEncontrada = reader.readLine()) != null){contador += 1;}
			setLineCount(contador);//Encontra o final da linha e seta
			for(int i = 0;i <= getLineCount();i++){
				encontraExtremosDaLinha(i);
				if(caracter < getCaracterFimLinha() && caracter >getCaracterInicioLinha() 
						|| caracter == getCaracterInicioLinha() || caracter == getCaracterFimLinha()){
					setLinhaAtual(i);
					setColunaAtual(+(caracter - getCaracterInicioLinha()));
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}catch(NullPointerException e){
			//e.printStackTrace();
		}
	}	
	private synchronized void encontraExtremosDaLinha(int line){
		Element map = FramePrincipal.edtArea.getDocument().getDefaultRootElement();
        Element lineElem = map.getElement(line);
        setCaracterInicioLinha(lineElem.getStartOffset());
        setCaracterFimLinha(((line == getLineCount() - 1) ? (lineElem.getEndOffset() - 1 ) : lineElem.getEndOffset()));
	}

	public synchronized int getLineCount() {
		return lineCount;
	}
	public synchronized void setLineCount(int lineCount) {
		this.lineCount = lineCount;
	}
	public synchronized int getCaracterInicioLinha() {
		return caracterInicioLinha;
	}
	public synchronized void setCaracterInicioLinha(int caracterInicioLinha) {
		this.caracterInicioLinha = caracterInicioLinha;
	}
	public synchronized int getCaracterFimLinha() {
		return caracterFimLinha;
	}
	public synchronized void setCaracterFimLinha(int caracterFimLinha) {
		this.caracterFimLinha = caracterFimLinha;
	}
	public synchronized int getColunaAtual() {
		return ColunaAtual;
	}
	public synchronized void setColunaAtual(int colunaAtual) {
		ColunaAtual = colunaAtual;
	}
	public synchronized int getLinhaAtual() {
		return LinhaAtual;
	}
	public synchronized void setLinhaAtual(int linhaAtual) {
		LinhaAtual = linhaAtual;
	}
	private int caracterInicioLinha,caracterFimLinha,lineCount,ColunaAtual,LinhaAtual;
}
Criado 16 de julho de 2007
Ultima resposta 28 de jan. de 2008
Respostas 4
Participantes 3