Hallo,
vielleicht kann mir ja jemand helfen, bin gerade am verzweifeln.
Ich versuche gerade einen ScharedEditor zu programmieren.
1. ich benutze eine JTextPane, das funktioniert
2. ich habe auch eine Methode geschrieben, in der ich für neu eingefügten Text, also den Text den ich vom anderen User geschickt bekomme, die AttributSets auf eine andere Farbe ändere, bei mir im Moment rot, um so den Text andersfarbig darzustellen, auch das funktioniert
Nun habe ich folgendes Problem, wenn man in dem vorher eingefügten Text mit den geänderten Attributen rumschreibt, nimmt er die Farbe der für diesen Textteil definierten Attribute an, also rot und das möchte ich nicht, ich möchte den Text den der User selbst schreibt gern in dem Defaultschwarz dargestellt bekommen.
Bei meinem Editor soll es also so sein, dass nur die Änderungen, die ich rein bekomme andersfarbig dargestellt werden, aber nicht das was der User selber schreibt.
Ich habe mich hier im Forum schon mal umgeschaut und habe gelesen, das man die insert() Methode des StyledDocument überschreiben könnte. Würde das mein Problem lösen???
Ich habe das auch schon versucht, aber bin da irgendwie nicht so weiter gekommen, irgendwie blicke ich wohl bei den Documenten noch nicht so durch. StyledDocument hat ja gar keine insert() Methode, irgendwie kapier ich das nicht, wie ich das da überschreiben müsste.
Hab's auch schonmal versucht die insert() Methode des DefaultStyledDocument zu überschreiben, allerdings, weiss ich dann nicht so richtig, wie ich das an meine textPane angebunden bekomme, da ich irgendwie Fehlermeldungen bekomme.
vielleicht kann mir ja jemand helfen, bin gerade am verzweifeln.
Ich versuche gerade einen ScharedEditor zu programmieren.
1. ich benutze eine JTextPane, das funktioniert
2. ich habe auch eine Methode geschrieben, in der ich für neu eingefügten Text, also den Text den ich vom anderen User geschickt bekomme, die AttributSets auf eine andere Farbe ändere, bei mir im Moment rot, um so den Text andersfarbig darzustellen, auch das funktioniert
Nun habe ich folgendes Problem, wenn man in dem vorher eingefügten Text mit den geänderten Attributen rumschreibt, nimmt er die Farbe der für diesen Textteil definierten Attribute an, also rot und das möchte ich nicht, ich möchte den Text den der User selbst schreibt gern in dem Defaultschwarz dargestellt bekommen.
Bei meinem Editor soll es also so sein, dass nur die Änderungen, die ich rein bekomme andersfarbig dargestellt werden, aber nicht das was der User selber schreibt.
Ich habe mich hier im Forum schon mal umgeschaut und habe gelesen, das man die insert() Methode des StyledDocument überschreiben könnte. Würde das mein Problem lösen???
Ich habe das auch schon versucht, aber bin da irgendwie nicht so weiter gekommen, irgendwie blicke ich wohl bei den Documenten noch nicht so durch. StyledDocument hat ja gar keine insert() Methode, irgendwie kapier ich das nicht, wie ich das da überschreiben müsste.
Hab's auch schonmal versucht die insert() Methode des DefaultStyledDocument zu überschreiben, allerdings, weiss ich dann nicht so richtig, wie ich das an meine textPane angebunden bekomme, da ich irgendwie Fehlermeldungen bekomme.
Code:
import java.awt.Color;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
public class Doc extends DefaultStyledDocument {
private MutableAttributeSet text;
private SharedEditorPanel panel;
public Doc(SharedEditorPanel panel) {
initAttributeSets();
this.panel=panel;
}
/**
* setzen der DefaultTextfarbe
*/
private SimpleAttributeSet initAttributeSets() {
text = new SimpleAttributeSet();
StyleConstants.setForeground(text, Color.BLACK);
return (SimpleAttributeSet) text;
}
/**
* @Override
*/
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
super.insertString(offs, str, a);
render(offs);
}
/**
* @Override
*/
public void remove(int offs, int len) throws BadLocationException {
super.remove(offs, len);
}
/**
* Wird bei jeder Änderung aufgerufen,Attributes werden, wenn sie auf rot gesetzt sind
* auf schwarz geändert
* @param offs Der Offset der Änderung
*/
private void render(int offs) {
AttributeSet a = ((StyledDocument) panel.getDoc()).getCharacterElement(offs).getAttributes();
Color color= StyleConstants.getForeground(a);
if(color.equals(Color.red)){
panel.getSharedEditor().setCharacterAttributes(initAttributeSets(),true);
}
}
}
/**
*aufruf bzw. anhängen des Doc im SharedEditorPanel das funktioniert so nicht, wie könnte ich meine oben *geschriebene Klasse anhängen, bzw. überschreibe ich da überhaupt das richtige Document???
* Kann mir vorstellen, dass ich auch wirklich das Interface StyledDocument überschreiben müsste, doch wie komme
* ich da an die insert() Methode ran???
*/
private Doc doc=new Doc(this);
doc=(DefaultStyledDocument)sharedEditor.sharedEditor.getStyledDocument();