2009-10-11 9 views
2

J'essaie de créer un éditeur WYSIWYG simple qui permettra aux utilisateurs de sélectionner le texte et gras/souligner/italique le. À l'heure actuelle, l'utilisateur peut sélectionner du texte, faites un clic droit dessus et sélectionnez gras à partir d'un menu contextuel qui finit par appliquer le style gras au texte sélectionné comme ceci:Comment obtenir le style du texte sélectionné dans un JTextPane?

this.getStyledDocument().setCharacterAttributes(this.getSelectionStart(), this.getSelectionEnd()-this.getSelectionStart(), boldStyle, false); 

Le style audacieux est configuré comme ceci:

boldStyle = this.addStyle("Bold", null); 
StyleConstants.setBold(boldStyle, true); 

ce que je voudrais savoir, est s'il est possible d'obtenir le style du texte sélectionné, de sorte que si un utilisateur tente de « gras » du texte qui est déjà gras, je peux détecter et écrire du code pour ne pas mettre en gras ce texte au lieu de simplement appliquer à nouveau le style gras?

Quelque chose comme:

if(!this.getStyledDocument().getStyleForSelection(this.getSelectionStart(), this.getSelectionEnd()-this.getSelectionStart()).isBold()){ 
//do bold 
} 
else{ 
//un-bold 
} 

serait un rêve devenu réalité, mais je n'ai pas d'espoir pour cela. Ce que j'espère de façon réaliste, c'est soit qu'on me dise que je me trompe et que l'on me montre «le chemin», soit que je me dirige vers une méthode de ronde-par-bout pour y parvenir.

Merci beaucoup pour votre temps.

Répondre

4

La meilleure façon de le faire est par le StyledEditorKit:

JTextPane text = new JTextPane(); 
JButton button = new JButton("bold"); 
button.addActionListener(new StyledEditorKit.BoldAction()); 

JFrame frame = new JFrame("Styled"); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setLayout(new BorderLayout()); 
frame.add(button, BorderLayout.NORTH); 
frame.add(text, BorderLayout.CENTER); 
frame.setSize(600, 400); 
frame.setVisible(true); 
+0

+1: Vous pouvez également consulter les autres options de StyledEditorKit. Il pourrait être utile pour d'autres aspects de votre éditeur WYSIWYG – akf

+0

Merci beaucoup pour cela. Encore une fois, la bonne solution était si simple! J'ai supprimé addActionCommand et addActionListener de mes éléments de menu contextuel et utilisé "bold.addActionListener (new StyledEditorKit.BoldAction())", qui a fonctionné parfaitement. Merci encore! –

2

Obtenir les styles Gras et Italique De l'selectedText de JTextPane

int start = jTextpane.getSelectionStart(); 
int end = jTextpane.getSelectionEnd(); 
String selectedText = jTextpane.getSelectedText(); 

Application style

StyledDocument doc = (StyledDocument) jTextpane.getDocument(); 
Style logicalStyle = doc.getLogicalStyle(jTextpane.getSelectionStart()); 
Element element = doc.getCharacterElement(start); 
AttributeSet as = element.getAttributes(); 
Checking the Text,which is Bold and Italic 

boolean isBold = StyleConstants.isBold(as) ? false : true; 
boolean isItalic = StyleConstants.isItalic(as); 
System.out.println("selected value is isItalic?"+isItalic); 
System.out.println("selected value is isBold?"+isBold); 
Questions connexes