Ich möchte ein TextPane nutzen..
über dem Textpane sollen wie z.B. bei word drei Buttons sein mit Bold, Italic und underline.
Beispiele habe ich aber bis jetzt nur für Menu gefunden die nach folgenden Schema verfahren:
Aber ich möchte es über Buttons machen und habe es bisher so probiert:
Effekt: beim ersten Button Klick passiert gar nix ausser das Markierung verschwindet, erst wenn ich den Text ein 2tes mal selektiere und auf den Button drücke funkt. es wie "gewünscht"?
2. Fehler bei der ganzen Sache ist: wenn ich dann einen anderen Bereich markiere und er soll zum Bsp. Underline machen macht er natürlich auch italic + underline weil es ja im AttributSet so drin steht...
Irgendwie erscheint mir auch die Abfrage:
nicht richtig verwendet von mir.. hier sollte sie anzeigen ob im AttributSet Italic bereits drin ist und als Ergebnis wenn Text nicht kursiv ist, sollte true sein..
Meine Vermutung ist das man jeweils vorher den aktuellen AttributSet des ersten Buchstabens der Selection herausfinden muss um dann das Attributset zu erweitern.. aber wie?
Hat jemand eine Idee?
Vielen Dank
Thomas
über dem Textpane sollen wie z.B. bei word drei Buttons sein mit Bold, Italic und underline.
Beispiele habe ich aber bis jetzt nur für Menu gefunden die nach folgenden Schema verfahren:
Java:
Action boldAction = new BoldAction();
boldAction.putValue(Action.NAME, "Bold");
styleMenu.add(boldAction);
Aber ich möchte es über Buttons machen und habe es bisher so probiert:
Java:
attr = new SimpleAttributeSet();
StyleConstants.setFontSize(attr, 12);
....
if(e.getActionCommand().equalsIgnoreCase("italic")){
if(tp_text.getSelectedText()!=null){
int start, end;
start = tp_text.getSelectionStart();
end = tp_text.getSelectionEnd();
try {
StyleConstants.setItalic(attr, attr.containsAttribute(StyleConstants.Italic, false));
/*if(attr.containsAttribute(StyleConstants.Italic, false)){
System.out.println("setItalic wird auf false gesetzt");
StyleConstants.setItalic(attr, attr.containsAttribute(StyleConstants.Italic, false));
}else{
System.out.println("setItalic wird auf True gesetzt");
StyleConstants.setItalic(attr, attr.containsAttribute(StyleConstants.Italic, true));
}*/
doc.replace(tp_text.getSelectionStart(), tp_text.getSelectedText().length(),
tp_text.getSelectedText(), attr);
tp_text.requestFocus();
tp_text.setSelectionStart(start); // solten eigentlich den Text wieder farblich markieren
tp_text.setSelectionEnd(end); // hatte aber nicht den gewünschten Effekt
tp_text.setCaretPosition(end);//wenn keine Markierg mögl., dann CursorPos. ans Ende der Ex-Sel.
} catch (BadLocationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
2. Fehler bei der ganzen Sache ist: wenn ich dann einen anderen Bereich markiere und er soll zum Bsp. Underline machen macht er natürlich auch italic + underline weil es ja im AttributSet so drin steht...
Irgendwie erscheint mir auch die Abfrage:
Java:
attr.containsAttribute(StyleConstants.Italic, false);
Meine Vermutung ist das man jeweils vorher den aktuellen AttributSet des ersten Buchstabens der Selection herausfinden muss um dann das Attributset zu erweitern.. aber wie?
Hat jemand eine Idee?
Vielen Dank
Thomas
Zuletzt bearbeitet: