login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[Java] HTML editor

Offline OceanIdiot - 27/08/2010 22:57
Avatar van OceanIdiotNieuw lid 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
Offline Abbas - 27/08/2010 23:02
Avatar van Abbas Gouden medaille

Crew .NET
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.
Offline Stijn - 27/08/2010 23:08
Avatar van Stijn PHP expert 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.
Offline OceanIdiot - 28/08/2010 19:10 (laatste wijziging 28/08/2010 19:19)
Avatar van OceanIdiot Nieuw lid 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-2024 Sitemasters.be - Regels - Laadtijd: 0.314s