login  Naam:   Wachtwoord: 
Registreer je!
 Forum
Zoeken  Regels  Help
Categorieën > Object georiënteerd

[Java] HTML editor

OceanIdiot – 27/08/2010 22:57
Hi,

Ik ben eigenlijk pas begonnen met java en ik ben dus eigenlijk nog op ontdekkend pad.. Nu heb ik een text editor gemaakt en ik wil deze graag uitbreiden naar een simpele html editor. Het is enigszins gelukt.. maar toch niet helemaal.

Ik heb een method gemaakt die text kleurt en een method die html tags filtert (string.contains) en ze daarna een kleurtje geeft. Nu moet ik alleen voor elke tag een aparte if loop maken (dus voor <html><head>, <title>, </title>, </head>, </html>, enz, enz). Ik kan me niet voorstellen dat dit niet makkelijker kan.. mijn vraag is alleen hoe?

Alvast bedankt..
OI

3 antwoorden

Gesponsorde links
Daisycon - Verdien geld met uw website

titjes – 27/08/2010 23:02
Toch zul je het op een dergelijke manier moeten doen. Ik ben een code-highlighter voor .NET aan het schrijven en op een of andere manier moeten de keywords herkend worden dus zal je moeten loopen door je html-code en kijken of er een tag gevonden wordt.

Stijn – 27/08/2010 23:08
Je kan ook een array maken met alle HTML tags. Vervolgens ga je met een regex (de regex zou het volgende zijn: <\?(.*?)( /)?>) na of \1 (group(1) in java) in die array voorkomt, indien true ga je die highlighten.

OceanIdiot – 28/08/2010 19:10 (Laatst gewijzigd op 28/08/2010 19:19)
Ik denk dat ik een oplossing heb gevonden..:

Main.java
  1. import java.awt.Color;
  2. import javax.swing.JFrame;
  3. import javax.swing.JScrollPane;
  4.  
  5. public class Main {
  6. static boolean TagOpen = false;
  7. static String Str = "";
  8. static ColorPane pane = new ColorPane();
  9. public static void main(String args[] ) {
  10. String input = "<html><body>Hello World</body></html>";
  11. loopString(input);
  12. JFrame f = new JFrame("HTML editor");
  13. f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  14. f.setContentPane(new JScrollPane(pane));
  15. f.setSize(600, 400);
  16. f.setVisible(true);
  17. }
  18.  
  19. public static void loopString(String txt) {
  20. int length = txt.length();
  21. for(int i = 0; i < length + 1; i++) {
  22. if(i == 0) {
  23. continue;
  24. }
  25. else {
  26. ColorTags(txt.charAt(i-1));
  27. }
  28. }
  29. }
  30.  
  31. public static void ColorTags(char c) {
  32. String s = Character.toString(c);
  33. if(s.equals("<")) {
  34. TagOpen = true;
  35. }
  36. if(s.equals(">")) {
  37. pane.append(Color.red, s);
  38. TagOpen = false;
  39. return;
  40. }
  41. if(TagOpen) {
  42. pane.append(Color.red, s);
  43. }
  44. if(!TagOpen) {
  45. pane.append(Color.black, s);
  46. }
  47.  
  48. }
  49. }



ColorPane.java
  1. import javax.swing.*;
  2. import javax.swing.text.*;
  3. import java.awt.Color;
  4.  
  5. @SuppressWarnings("serial")
  6. public class ColorPane extends JTextPane {
  7.  
  8. public void append(Color c, String s) {
  9. StyleContext sc = StyleContext.getDefaultStyleContext();
  10. AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c);
  11. int len = getDocument().getLength();
  12. setCaretPosition(len);
  13. setCharacterAttributes(aset, false);
  14. replaceSelection(s);
  15. }
  16. }


Gesponsorde links

Dit onderwerp is gesloten.
Actieve forumberichten:

© 2002-2012 Sitemasters.be - Regels - Gehost door: Vircon - Laadtijd: 0.116s