Editor de texto em java

5 respostas
C

Oie :slight_smile:
Gente, eu estou meio perdida. Eu preciso criar uma espécie de editor de texto em java. No caso, o usuário teria que contar com a facilidade de inserir cabeçalho, rodapé, figuras… Além das formatações convencionais (centralizar, alterar cor, etc).
Alguém conhece alguma aplicação semelhante em que eu possa me espelhar?
Se não, alguém poderia me dar alguma luz. Pq assim, as formatações básicas eu acredito que consiga implementar, mas quebra de página, inserção de cabeçalho e rodapé eu não faço a menor idéia.

Espero respostas… :slight_smile:

Valeu!
Cecília

5 Respostas

Ironlynx
Tem q ser em puro java???usa html... exemplo:
<HTML>
<HEAD>
<TITLE>Editor</TITLE>
<STYLE TYPE="text/css">
   BODY {margin: 0pt; padding: 0pt; border: none}
   IFRAME {
width: 100%;
border: none;
}
   SELECT {
background-color: #D8D8D8;
font-family: "Verdana, Arial, Helvetica, sans-serif";
font-size: 8pt;
border: 1pt solid #666666;
}
   TABLE {width:"100%"; background: #E4E4E4; text-align: center}
   INPUT {width: 20px; font-family: "Verdana, Arial, Helvetica, sans-serif"; font-size: 8pt;}
   LABEL {font-family: "Verdana, Arial, Helvetica, sans-serif"; font-size: 8pt;}
   .heading {BACKGROUND: #CECECE}
   .current {color: "red";}
.botao {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 8pt;
background-color: #EBEBEB;
border: 1pt solid #666666;
}
hr {
color: #666666;
background-color: #E4E4E4;
height: 1pt;
}
</STYLE>
<script LANGUAGE="JavaScript">
   // O formato default é WYSIWYG HTML.
   var format="HTML";
   var bMode=true;
   // Exportando funções.
   var public_description = new public_description_nt;
   function public_description_nt() {
     this.put_html=put_html;
     this.get_html=get_html;
     this.bReady = false
   }
   // Função de limpeza do código fonte.
   function cleanupHTML() {
     bodyTags=textEdit.document.body.all
     for (i=bodyTags.tags("FONT").length-1;i >= 0;i--)
       if (bodyTags.tags("FONT")[i].style.backgroundColor="#ffffff") {
         bodyTags.tags("FONT")[i].style.backgroundColor=""
         if (bodyTags.tags("FONT")[i].outerHTML.substring(0,6)=="<FONT>")
           bodyTags.tags("FONT")[i].outerHTML=bodyTags.tags("FONT")[i].innerHTML
       }
   }
   // Função que retorna o texto digitado e formatado.
   // Será chamada no evento OnSubmit do Form.
   function get_html() {
     if (format=="HTML") {
       cleanupHTML()
       return textEdit.document.body.innerHTML
     }
     else
       return textEdit.document.body.innerText
   }
   // Função que coloca um texto no editor.
   function put_html(v) {
     if (format=="HTML")
       textEdit.document.body.innerHTML=v
     else
       textEdit.document.body.innerText=v
   }
   // Inicializa o editor com um documento em branco.
   function initEditor() {
     textEdit.document.designMode="On"
     textEdit.document.open()
     textEdit.document.write("")
     textEdit.document.close()
     textEdit.focus()
     MudarTamanho()
   }
   // Executa um comando no editor.
   // Pelo menos um argumento é requerido. Alguns comandos
   // requerem um segundo argumento opicional:
   // ex., ("formatblock","<H1>") para colocar uma marca <H1>.
   function doFormat(command) {
     if (format!="HTML") {
       displayError()
       return
     }
     if (format=="HTML") {
       if (arguments[1]=="CustomFont") {
         arguments[1] = prompt("Com qual fonte você deseja formatar o texto?","Verdana, Arial, Helvetica, sans-serif")
       }
       if ((arguments[1]=="") && (arguments[0]=="forecolor")) {
         arguments[1] = prompt("Qual a cor (ou código hexadecimal) que você deseja?
(Em Inglês)","Black")
       }
       var edit = textEdit.document.selection.createRange()
       if (arguments[1]==null)
         edit.execCommand(command)
       else
         edit.execCommand(command,false, arguments[1])
       edit.select()
       textEdit.focus()
     }
   }
   // Função para criação de links.
   function createLink() {
     if (format!="HTML") {
       displayError()
       return
     }
     var isA = getEl("A",textEdit.document.selection.createRange().parentElement())
     var str=prompt("Para qual URL você quer criar o link? (ex.: http://www.nome.com.br/)",isA ? isA.href : "http://")
     if ((str!=null) && (str!="http://")) {
       if ((textEdit.document.selection.type=="None") && (!isA)) {
         var strNome=prompt("Que texto você quer que seja o link?",isA ? isA.href : "texto")
         var sel=textEdit.document.selection.createRange()
         sel.pasteHTML("<A HREF=""+str+"">"+strNome+"</A> ")
         sel.select()
       }
       else
         doFormat("CreateLink",str)
     }
     else
       textEdit.focus()
   }
   function getEl(sTag,start) {
     while ((start!=null) && (start.tagName!=sTag))
       start = start.parentElement
     return start
   }
   // Coloca o foco no editor.
   function setFocus() {
     textEdit.focus()
   }
   // Função que ajusta o editor na tela.
   function MudarTamanho() {
     document.all.textEdit.height = document.body.offsetHeight - (document.all.editbar.offsetHeight + document.all.editbar2.offsetHeight + document.all.editbar3.offsetHeight)
   }
   // Muda entre os modos WYSIWYG HTML e Texto (fonte do HTML).
   function setMode(bNewMode) {
     if (bNewMode!=bMode) {
       if (bNewMode) {
         textEdit.document.body.innerHTML = textEdit.document.body.innerText
         textEdit.document.body.style.fontFamily = ""
         textEdit.document.body.style.fontSize =""
         format="HTML"
       }
       else {
         cleanupHTML()
         textEdit.document.body.innerText = textEdit.document.body.innerHTML
         textEdit.document.body.style.fontFamily = "monospace"
         textEdit.document.body.style.fontSize = "10pt"
         format="Texto"
       }
       bMode=bNewMode
     }
     modeA.className=bMode?"current":"";
     modeB.className=bMode?"":"current";
     textEdit.focus()
     var s = textEdit.document.body.createTextRange()
     s.collapse(false)
     s.select()
   }
   // Função que dispara um erro caso o editor esteja
   // em modo Texto e o usuário tente inserir uma marca
   // HTML.
   function displayError() {
     alert("A barra de formatação não pode ser utilizada no modo Editar");
     textEdit.focus()
   }
   window.onload = initEditor

function envia(){
 document.form2.texto.value = textEdit.document.body.innerHTML;
 //alert(document.form2.texto.value);
}
 </SCRIPT>
</HEAD>
<BODY SCROLL=No OnFocus="setFocus()" OnResize="MudarTamanho()">
<TABLE ID=editbar3 width="609">
 <TR> 
   <TD noWrap width="151">&nbsp;</TD>
   <TD noWrap width="446"> <SELECT NAME="Paragrafo" onChange="doFormat('formatBlock',this[this.selectedIndex].value);this.selectedIndex=0;setFocus()">
       <OPTION class="heading" SELECTED>Paragrafo</OPTION>
       <OPTION VALUE="<P>">Normal &lt;P&gt;</OPTION>
       <OPTION VALUE="<H1>">Título 1 &lt;H1&gt;</OPTION>
       <OPTION VALUE="<H2>">Título 2 &lt;H2&gt;</OPTION>
       <OPTION VALUE="<H3>">Título 3 &lt;H3&gt;</OPTION>
       <OPTION VALUE="<H4>">Título 4 &lt;H4&gt;</OPTION>
       <OPTION VALUE="<H5>">Título 5 &lt;H5&gt;</OPTION>
       <OPTION VALUE="<H6>">Título 6 &lt;H6&gt;</OPTION>
       <OPTION VALUE="<PRE>">Pre &lt;PRE&gt;</OPTION>
     </SELECT> <SELECT NAME="Fontes" onChange="doFormat('fontname',this[this.selectedIndex].value);this.selectedIndex=0;setFocus()">
       <OPTION class="heading" SELECTED>Fonte</OPTION>
       <OPTION VALUE="Arial, Helvetica, sans-serif">Arial</OPTION>
       <OPTION VALUE="Times New Roman, Times, serif">Times New Roman</OPTION>
       <OPTION VALUE="Courier New, Courier, mono">Courier New</OPTION>
       <OPTION VALUE="Georgia, Times New Roman, Times, serif">Georgia</OPTION>
       <OPTION VALUE="Verdana, Arial, Helvetica, sans-serif">Verdana</OPTION>
       <OPTION style="COLOR: navy" VALUE="CustomFont">Outra Fonte...</OPTION>
     </SELECT> <SELECT NAME="Tamanhos" onChange="doFormat('fontSize',this[this.selectedIndex].text);this.selectedIndex=0;setFocus()">
       <OPTION class="heading" SELECTED>Tam.</OPTION>
       <OPTION>1</OPTION>
       <OPTION>2</OPTION>
       <OPTION>3</OPTION>
       <OPTION>4</OPTION>
       <OPTION>5</OPTION>
       <OPTION>6</OPTION>
       <OPTION>7</OPTION>
     </SELECT> <SELECT NAME="Cores" onChange="doFormat('forecolor',this[this.selectedIndex].style.color);this.selectedIndex=0;setFocus()">
       <OPTION class="heading" SELECTED>Cor</OPTION>
       <OPTION style="COLOR: black">Preto</OPTION>
       <OPTION style="COLOR: gray">Cinza</OPTION>
       <OPTION style="COLOR: white">Branco</OPTION>
       <OPTION style="COLOR: yellow">Amarelo</OPTION>
       <OPTION style="COLOR: blue">Azul</OPTION>
       <OPTION style="COLOR: green">Verde</OPTION>
       <OPTION style="COLOR: red">Vermelho</OPTION>
       <OPTION>Outra...</OPTION>
     </SELECT> </TD>
 </TR>
</TABLE>


<TABLE ID=editbar ONCLICK="setFocus()" width="610">
 <TR>
   <TD noWrap width="151"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Editor 
     de Textos</font></TD>
   <TD noWrap width="448">
     <INPUT TYPE="button" VALUE="N" STYLE="font-weight: 900;" ONCLICK="doFormat('Bold');setFocus();" class="botao">
     <INPUT TYPE="button" VALUE="I" STYLE="font-style: italic;" ONCLICK="doFormat('Italic');setFocus();" class="botao">
     <INPUT TYPE="button" VALUE="S" STYLE="text-decoration: underline;" ONCLICK="doFormat('Underline');setFocus();" class="botao">
     <INPUT TYPE="button" class="botao" style="text-align: left;" ONCLICK="doFormat('JustifyLeft');setFocus();" VALUE="--&nbsp;">
     <INPUT TYPE="button" VALUE="--" style="text-align: center;" ONCLICK="doFormat('JustifyCenter');setFocus();" class="botao">
     <INPUT TYPE="button" class="botao" style="text-align: right;" ONCLICK="doFormat('JustifyRight');setFocus();" VALUE="&nbsp;--">
     <INPUT TYPE="button" VALUE="1." ONCLICK="doFormat('insertorderedlist');setFocus();" class="botao">
     <INPUT TYPE="button" VALUE="•" ONCLICK="doFormat('insertunorderedlist');setFocus();" class="botao">
     <INPUT TYPE="button" VALUE=">>" style="WIDTH: 25px" ONCLICK="doFormat('indent');setFocus();" class="botao">
     <INPUT TYPE="button" VALUE="<<" style="WIDTH: 25px" ONCLICK="doFormat('outdent');setFocus();" class="botao">
     <INPUT TYPE="button" VALUE="Link" style="WIDTH: 65px" ONCLICK="createLink();setFocus();" class="botao">
   </TD>
 </TR>
</TABLE>
<IFRAME ID=textEdit WIDTH="100%" HEIGHT="100" OnLoad="MudarTamanho()"></IFRAME>
<TABLE ID=editbar2 ONCLICK="setFocus()">
 <TR>
   <TD noWrap> <INPUT ID=mW TYPE="radio" NAME=rMode OnClick="setMode(true);" checked="checked"> 
     <LABEL class="current" ID=modeA for=mW>Modo Visualizar</LABEL> <INPUT ID=mH TYPE="radio" NAME=rMode OnClick="setMode(false);"> 
     <LABEL ID=modeB for=mH>Modo Editar</LABEL> </TD>
 </TR>
 <TR>
   <TD noWrap><form name="form2"><input type="hidden" name="texto"></form><input type="button" value="Enviar" class="botao" style="WIDTH: 80px" onClick="envia();"></TD>
 </TR>
</TABLE>
</BODY>
</HTML>

Salve o Código como por exemplo EditorDeTextos.htm para vc ver como fica.... :wink:

C

Só consegui ver a carinha dele… Deu vários erros de tempo de execução. Tipo objeto esperado, constante não foi inicializada, etc :0(
MAs já é um bom início… Depois dou uma olhadinha no código… Mas olhando rápido assim (posso estar enganada) esse seu programa não tem a opção de inserir cabeçalho, né? Quebra de página… A visualização é de um texto sequencial… :frowning:

Ironlynx

Cecília,
isso é puro código html…foi a primeira coisa q achei no hd apenas para servir de exemplo(…),tempos atrás,lembro q fiz um mini editor em java usando JEditorPane e esse exemplo…adaptei,coloquei uns detalhes a mais e tinha ficado rulez…pena q não acho aonde eu coloquei…ele tah bem elaborado…se achar(tah percebendo q sou muuuito organizado… :roll: ) posto aqui!

C

Obrigada… :slight_smile: Espero que você encontre… Vou ficar esperando :slight_smile:

bjs,

Cecília

Ironlynx

Cecília,
infelizmente não achei… :roll: (é o q dah nomear pastas e cd´s como a12b,c34…)
Mas nesse link tem um exemplo da sun de Editor(puro java):
http://java.sun.com/products/jlf/ed2/samcode/styledt.html
http://java.sun.com/products/jlf/ed2/book/Appendix.A17.html
http://java.sun.com/docs/books/tutorial/uiswing/components/text.html
http://java.sun.com/docs/books/tutorial/uiswing/components/components.html
http://java.sun.com/products/jlf/ed2/book/index.html
Esses links devem ajudar…mas se eu achar eu posto o meu trab aqui…

Criado 11 de fevereiro de 2004
Ultima resposta 12 de fev. de 2004
Respostas 5
Participantes 2