Swing dynamisch Buttons in JEditorPane erstellen

Status
Nicht offen für weitere Antworten.
W

warden

Gast
Hallo,

ich möchte einen HTML Editor mit Zusatzfunktionen erstellen.
Der HTML Code besteht nur aus H1, H2, H3 sowie P Tags.

Zusätzlich soll aber jedem dieser Tags eine "Zusatzfunktion" zugewiesen werden.
d.h. wenn der Benutzer einen H1 Tag erstellt soll daneben (im Editor-Fenster am Rand) ein zusätzliches Input Feld erstellt werden in dem der Benutzer Keywords eintragen kann.
bei einem H2 Tag soll eine Select-Auswahlfeld kommen in dem eine Kategorie ausgewählt werden kann.
Bei einem P Tag soll ein Feld erscheinen in dem ein Bild (Video, oder Galerie) aus einer Mediengalerie eingefügt werden kann.

Diese Zusatzfunktionen sollen nicht den eigentlichen HTML Code ändern, die Buttons bzw Eingabefelder sollen aber direkt im Editorfenster an der entsprechenden Stelle erscheinen.


Ich habe bisher versucht mit Hilfe des EditorKits die entsprechenden Views (PaintChilds) so zu überschreiben das die gewünschten Elements angezeigt werden.

Das funktioniert allerdings nur mit Text. ( g.drawString() ) d.h. Ich kann z.B. neben jedem P "Absatz" und neben jeden H2 "Titel" ausgeben.

Sobald ich jedoch einen Button erstellen möchte passiert entweder garnichts oder das ganze Programm hängt sich auf.

Ich hoffe ihr könnt mir helfen.

Hier mal ein bisschen Code:

Java:
public class HTMLEditor extends JFrame implements ActionListener {
    
    private HTMLDocument document;
    private JEditorPane textPane = new JEditorPane();
    /*
	...
    */
    public HTMLEditor() {
      super("HTMLEditor");
      ReportEditorKit editorKit = new ReportEditorKit();
      textPane.setEditorKit(editorKit);
      /*
	  ...
      */
    }

    /*
	...
    */

    class ReportEditorKit extends HTMLEditorKit {
      @Override
      public ViewFactory getViewFactory() {
	return new HTMLEditorKit.HTMLFactory() {
	  public View create(Element elem) {
	    Object o = elem.getAttributes().getAttribute(
			StyleConstants.NameAttribute);
	    if (o instanceof HTML.Tag) {
	      HTML.Tag kind = (HTML.Tag) o;
	      
	      if (kind == HTML.Tag.P ) {
		return new ParagraphView(elem);
	      }
	      if (kind == HTML.Tag.H2 ) {
		return new BlockHeadlineView(elem);
	      }
	      /*
		 ...
	      */
	    }  
	    return super.create(elem);
	  }
	};
      }
    }

     /*
	...
    */

}

/* 
  Report View verschiebt den Content um 120 Pxl nach rechts 
  damit Platz für Zusatzelement ist 
*/
class ReportView extends javax.swing.text.html.ParagraphView {

  JButton test;

  public ReportView(Element e) {
      /*
	...
    */
  }

  @Override
  protected void setInsets(short top, short left, short bottom,
    short right) {super.setInsets
    (top,(short)(left+120),
    bottom,right);
  }

  @Override
  public void paintChild(Graphics g, Rectangle r, int n) {
    super.paintChild(g, r, n);
  }
}

/*
  Hier die BlockHeadlineView (H2) 
  Soll einfach nur "Titel" und eine Button Test neben der Headline ausgeben
*/
class BlockHeadlineView extends ReportView {

  public BlockHeadlineView(Element e){
    super(e);
    test = new JButton("Test");
  }
  @Override
  public void paintChild(Graphics g, Rectangle r, int n) {
    super.paintChild(g, r, n);

    if(n == 0) {
	int numberX = r.x - getLeftInset();
	int numberY = r.y + r.height - 5;
	g.drawString("Titel", numberX, numberY);	// Das funktioniert
	
	// Das alles nicht, egal was ich davon probiert habe
	
	// test.paint(g);
	// getContainer().add(test);
	// getContainer().validate();
	// getContainer().repaint();
    }
  }
}

/*
 ...
*/
 

KrokoDiehl

Top Contributor
Morgen.
Ich kann dir nicht wirklich sagen wie es geht, aber ich bin vor einer Weile beim Herumprobieren auf dieses Beispiel gestoßen. Damit bekommt man immerhin schonmal einen JButton in einer Editorpane gerendert. Vielleicht hilft dir das etwas weiter.
 
W

warden

Gast
Danke für das Beispiel nützt mir aber leider nciht wirklich. Da dadurch der Button im HTML code stehen muss. das soll er aber nicht.

Ich kann auch einen button erzeugen. Mein Hauptproblem ist das ich es nicht hinbekomme den normaln HTML output und einen buttton zu erzeugen.

z.B.

Java:
public ViewFactory getViewFactory() {
    return new HTMLEditorKit.HTMLFactory() {
        public View create(Element elem) {
            ...
           if (kind == HTML.Tag.H2 ) {
               return new H2TestView(elem);
           }

....

/* leite ich die H2TestView von  javax.swing.text.html.ParagraphView ab geht der HTML output plus sonstiger Text, aber kein button */
class BlockHeadlineView extends  javax.swing.text.html.ParagraphView{

    public BlockHeadlineView(Element e){
        super(e);
        test = new JButton("Test");
    }
    @Override
            public void paintChild(Graphics g, Rectangle r, int n) {
                super.paintChild(g, r, n);
                 ...
                    g.drawString("Blocktitel", numberX, numberY);
                     // Button ausgeben funktionier nicht
                    test.paint(g);
                }
                                           
            }

}

/* leite ich die H2TestView von ComponentView kann ich einen button ausgeben aber ich schaff es nciht das HTML auszugeben */

class BlockHeadlineView extends ComponentView{

   protected Component createComponent() {

                        JButton button = new JButton("Button : text unknown");

                        return button;
                    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Buttons dynamisch erstellen (NetBeans) AWT, Swing, JavaFX & SWT 10
D JavaFX Dynamisch erzeugte Buttons sollen Code ausführen. AWT, Swing, JavaFX & SWT 2
S dynamisch erzeugte buttons AWT, Swing, JavaFX & SWT 22
W JavaFX Farben dynamisch anpassen AWT, Swing, JavaFX & SWT 4
B Größe der Parent-Component dynamisch an children anpassen AWT, Swing, JavaFX & SWT 30
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
ralfb1105 JavaFX Dynamisch TableView Spalten erstellen AWT, Swing, JavaFX & SWT 4
A Swing JPanels dynamisch untereinander einfügen AWT, Swing, JavaFX & SWT 3
Wurstsemmel SWT MenuItem dynamisch hinzufügen AWT, Swing, JavaFX & SWT 2
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
MaxG. Swing Dynamisch grafische Objekte erzeugen AWT, Swing, JavaFX & SWT 12
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
S CombinedDomainXYPlot und dynamisch hinzugefügte subplots: Darstellungsprobleme AWT, Swing, JavaFX & SWT 3
K Liniendicke für Line Chart dynamisch ändern AWT, Swing, JavaFX & SWT 0
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
llabusch JavaFX Dynamisch alles vergrößern (wie im Browser) AWT, Swing, JavaFX & SWT 3
agent47 JavaFX TreeView Struktur dynamisch einlesen AWT, Swing, JavaFX & SWT 1
D JavaFX Dynamisch erzeugte Checkboxen aus VBox auslesen AWT, Swing, JavaFX & SWT 3
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
I JTable dynamisch aus ArrayList befüllen AWT, Swing, JavaFX & SWT 3
T JavaFX Flexible Layouts dynamisch erstellen / Design-Inspirationen AWT, Swing, JavaFX & SWT 8
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
J JavaFX TextArea dynamisch Icon im Background anzeigen AWT, Swing, JavaFX & SWT 2
T JPanel dynamisch erstellen AWT, Swing, JavaFX & SWT 4
G FormLayout dynamisch wachsend AWT, Swing, JavaFX & SWT 0
T JTable dynamisch mit ArrayList AWT, Swing, JavaFX & SWT 2
A Swing Logikaufgabe: Zeilenanzahl einer JTable mit 3d String dynamisch anpassen AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
P TableViewerColumn dynamisch erzeugen AWT, Swing, JavaFX & SWT 3
Kandum obj_JMenu.addMenuListener - variable Anzahl an JMenus / menulistenern & frame.setTitle() dynamisch AWT, Swing, JavaFX & SWT 7
A HELP: JFieldText dynamisch setzen -> langsam AWT, Swing, JavaFX & SWT 19
C Swing CardLayout dynamisch erweitern AWT, Swing, JavaFX & SWT 11
B Link eines Icons dynamisch gestalten AWT, Swing, JavaFX & SWT 2
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
P Gifs dynamisch auf GUI anzeigen AWT, Swing, JavaFX & SWT 4
E Breite eines JButton dynamisch ändern AWT, Swing, JavaFX & SWT 3
P Swing Dynamisch zeichnen mit Shapes wie Rectangle2D.Float ? AWT, Swing, JavaFX & SWT 6
C SWT - widget dynamisch erzeugen und anzeigen AWT, Swing, JavaFX & SWT 10
C Tooltip dynamisch setzen AWT, Swing, JavaFX & SWT 7
T Elemente zu JList dynamisch hinzufügen AWT, Swing, JavaFX & SWT 4
X jTextFields dynamisch initialisieren AWT, Swing, JavaFX & SWT 2
A Swing Dynamisch Objekte erzeugen AWT, Swing, JavaFX & SWT 3
L Label dynamisch awt AWT, Swing, JavaFX & SWT 2
H Swing Symbol in Taskleiste dynamisch aus- bzw. einblenden AWT, Swing, JavaFX & SWT 14
B JTabbedPane mit Enumeration dynamisch füllen AWT, Swing, JavaFX & SWT 5
L Dynamisch Objekte in Canvas zeichnen AWT, Swing, JavaFX & SWT 5
D Panels Dynamisch zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 2
J Java 2D - dynamisch zeichnen AWT, Swing, JavaFX & SWT 4
A AWT HSB-Farben dynamisch berechnen AWT, Swing, JavaFX & SWT 5
P Dynamisch Sortieren AWT, Swing, JavaFX & SWT 2
B Swing Dynamisch Elemente in JScrollPane hinzufügen AWT, Swing, JavaFX & SWT 6
Airwolf89 Swing Dynamisch auf Objekte in einer GUI zugreifen AWT, Swing, JavaFX & SWT 10
Airwolf89 Swing Tabs dynamisch ausblenden AWT, Swing, JavaFX & SWT 3
H Swing Register (jTabbedPane) dynamisch hinzufügen? AWT, Swing, JavaFX & SWT 7
Airwolf89 Swing Anzahl der Tabellenspalten dynamisch setzen AWT, Swing, JavaFX & SWT 2
S SWT WizardPage - Button anzeigen und Text-Widgets dynamisch aktualisieren AWT, Swing, JavaFX & SWT 12
R JLabel und JSlider dynamisch erzeugen? AWT, Swing, JavaFX & SWT 3
Pithecanthropus Swing JPanels dynamisch austauschen AWT, Swing, JavaFX & SWT 8
S Applet mit Graphics dynamisch vergrößern AWT, Swing, JavaFX & SWT 3
Spot84 jtable mit checkboxnode dynamisch per arraylist füllen AWT, Swing, JavaFX & SWT 8
bugmenot Dynamisch erzeugte jLabels werden nicht angezeigt. AWT, Swing, JavaFX & SWT 5
ABstraCT JCombobox dynamisch füllen (erstes Element Problem) AWT, Swing, JavaFX & SWT 4
J JLabels usw. dynamisch anlegen AWT, Swing, JavaFX & SWT 8
A JList dynamisch vergrößern AWT, Swing, JavaFX & SWT 4
G Felder dynamisch erzeugen! AWT, Swing, JavaFX & SWT 3
I Textfields dynamisch erzeugen AWT, Swing, JavaFX & SWT 4
G Dynamisch Komponenten in einem JPanel bzw JFram austauschen AWT, Swing, JavaFX & SWT 7
B JTree dynamisch aufbauen AWT, Swing, JavaFX & SWT 3
L JPanel dynamisch zuweisen AWT, Swing, JavaFX & SWT 5
T Inhalt einer Combobox dynamisch erstellen? AWT, Swing, JavaFX & SWT 13
S JTextField-Größe dynamisch an Inhalt anpassen. AWT, Swing, JavaFX & SWT 3
S Farben eienr JTextPane dynamisch zuweisen AWT, Swing, JavaFX & SWT 2
J Zugriff auf "dynamisch erzeugte" JTextFields AWT, Swing, JavaFX & SWT 2
D Systray-Icon dynamisch zeichnen AWT, Swing, JavaFX & SWT 8
B JTree dynamisch nachladen AWT, Swing, JavaFX & SWT 3
U Label Icon dynamisch belegen AWT, Swing, JavaFX & SWT 12
F JRadioButton dynamisch benennen? AWT, Swing, JavaFX & SWT 7
A dynamisch weitere jpanels untereinander hinzufügen AWT, Swing, JavaFX & SWT 10
J Größe einer JTextArea dynamisch anpassen. AWT, Swing, JavaFX & SWT 2
F Komponente dynamisch erzeugen AWT, Swing, JavaFX & SWT 4
M ImageObserver, Bild dynamisch erzeugen und Speichern AWT, Swing, JavaFX & SWT 24
M gezeichnete Punkte dynamisch verschieben mit mousedragged AWT, Swing, JavaFX & SWT 4
S inhalt dynamisch erzeugter JComboBoxs auslesen AWT, Swing, JavaFX & SWT 3
G Mousecursor selber dynamisch generieren. AWT, Swing, JavaFX & SWT 6
G JRadioButton dynamisch erzeugen AWT, Swing, JavaFX & SWT 6
M Look and Feels dynamisch abfragen AWT, Swing, JavaFX & SWT 13
S Columnname dynamisch verändern AWT, Swing, JavaFX & SWT 2
H JComboBoxen dynamisch erzeugen AWT, Swing, JavaFX & SWT 3
K toolbar dynamisch erzeugen AWT, Swing, JavaFX & SWT 2
L Komponenten dynamisch erkennen und bearbeiten AWT, Swing, JavaFX & SWT 8
H große mengen an jbuttons dynamisch erzeugen? AWT, Swing, JavaFX & SWT 15
XWing Basic JPanel mit 2 Buttons beutzen. AWT, Swing, JavaFX & SWT 10
jojoge Wie erstelle ich runde Buttons mit Farbe? AWT, Swing, JavaFX & SWT 1
berserkerdq2 Buttons und Shapes sehen ja nach Screengröße klein oder zu groß aus, jemand eine Idee, was man tun kann? AWT, Swing, JavaFX & SWT 1
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
volcanos SpringLayout mit zusätzlichen Buttons außerhalb des SpringLayout AWT, Swing, JavaFX & SWT 33
K Swing Buttons erst blinken lassen und dann abfragen, ob sie gedrückt worden sind AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben