Sziasztok!
Próbálok formázott szöveget írni JEditorPane szövegmezőbe, de nem megy. Valami ismeret még hiányzik, amitől működne a program. Mind a két mondatot az alapértelmezett stílusban írja ki, rá se bagózik, hogy én az insertString() függvényben két különböző attribútumot adtam meg a kiírandó szövegeknek. Szerintetek mi kell még a progiba, hogy működjön?
import javax.swing.*;
import javax.swing.text.*;
public class StyledText extends JFrame {
JEditorPane ep = new JEditorPane();
JScrollPane scrp;
public StyledText() {
super("Styled Text Example");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(50, 50, 500, 500);
getContentPane().add(scrp = new JScrollPane(ep));
writeText();
setVisible(true);
}
public void writeText() {
Document doc = ep.getDocument();
SimpleAttributeSet a1 = new SimpleAttributeSet();
StyleConstants.setBold(a1, true);
StyleConstants.setFontSize(a1, 16);
SimpleAttributeSet a2 = new SimpleAttributeSet();
StyleConstants.setBold(a2, false);
StyleConstants.setFontSize(a2, 18);
try {
doc.insertString(doc.getLength(), "Ez az első szöveg.\n", a1);
doc.insertString(doc.getLength(), "Ez pedig a második szöveg.\n", a2);
}
catch (BadLocationException badLocationException) {
System.err.println("Oops");
}
}
public static void main(String[] args) {
StyledText st = new StyledText();
}
}
- 1277 megtekintés
Hozzászólások
Tele van példákkal a net..
Csak egy tipp, mert többet nem ér:
neked nem gyanús a "Constants" szó az osztály nevében?
- A hozzászóláshoz be kell jelentkezni
Csak azért írok még egyszer, mert sikerült megoldanom. És ha véletlenül valaki erre az oldalra találna rá a jövőben ilyen probléma esetén, akkor legyen kész megoldása is.
A megoldás fontos része, hogy nem JEditorPane objektumot, hanem JTextPane-t kell létrehozni a programban. Annak setCharacterAttributes() tagfüggvényével már könnyen be lehet állítani a kívánt stílust.
A megoldás:
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class StyledText extends JFrame {
JTextPane tp = new JTextPane();
JScrollPane scrp;
public StyledText() {
super("Styled Text Example");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(50, 50, 500, 500);
getContentPane().add(scrp = new JScrollPane(tp));
writeText();
setVisible(true);
}
public void writeText() {
Document doc = tp.getDocument();
SimpleAttributeSet a1 = new SimpleAttributeSet();
StyleConstants.setBold(a1, true);
StyleConstants.setFontSize(a1, 18);
StyleConstants.setForeground(a1, Color.BLUE);
StyleConstants.setFontFamily(a1, "MONOSPACED");
SimpleAttributeSet a2 = new SimpleAttributeSet();
StyleConstants.setBold(a2, false);
StyleConstants.setFontSize(a2, 16);
StyleConstants.setForeground(a2, Color.RED);
StyleConstants.setFontFamily(a2, "ARIAL");
try {
doc.insertString(doc.getLength(), "Ez az első szöveg.\n", null);
int i = doc.getLength();
tp.select(0, i);
tp.setCharacterAttributes(a1, false);
doc.insertString(doc.getLength(), "Ez pedig a második szöveg.\n", null);
tp.select(i, doc.getLength());
tp.setCharacterAttributes(a2, false);
tp.select(doc.getLength(), doc.getLength());
}
catch (BadLocationException badLocEx) {
System.err.println("Oops");
}
} // end of writeText()
public static void main(String[] args) {
StyledText st = new StyledText();
}
} // end of class
- A hozzászóláshoz be kell jelentkezni
Van azért olyan megoldás is, amely esetén nem szükséges a beszúrt szövegek újbóli kiszelektálása és formázása.
Tanulság: A fő problémám az volt, hogy JEditorPane objektumon belül próbáltam megoldani a feladatot, de az nem nagyon hajlandó ilyen dolgokat megcsinálni.
Íme a végleges megoldás:
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class StyledText extends JFrame {
JTextPane tp = new JTextPane();
JScrollPane scrp;
Style style;
public StyledText() {
super("Styled Text Example");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(50, 50, 500, 500);
getContentPane().add(scrp = new JScrollPane(tp));
StyleContext context = new StyleContext();
style = context.getStyle(StyleContext.DEFAULT_STYLE);
StyleConstants.setFontSize(style, 18);
StyleConstants.setSpaceAbove(style, 3);
StyleConstants.setSpaceBelow(style, 5);
StyleConstants.setFontFamily(style, "MONOSPACED");
writeText();
setVisible(true);
} // end of StyledText()
public void writeText() {
Document doc = tp.getDocument();
SimpleAttributeSet a1 = new SimpleAttributeSet(style);
StyleConstants.setBold(a1, true);
StyleConstants.setForeground(a1, Color.BLUE);
SimpleAttributeSet a2 = new SimpleAttributeSet(style);
StyleConstants.setFontSize(a2, 16);
StyleConstants.setForeground(a2, Color.RED);
StyleConstants.setFontFamily(a2, "ARIAL");
try {
doc.insertString(doc.getLength(), "Ez az első szöveg.\n", a1);
doc.insertString(doc.getLength(), "Ez pedig a második szöveg.\n", a2);
}
catch (BadLocationException badLocEx) {
System.err.println("Oops");
}
} // end of writeText()
public static void main(String[] args) {
StyledText st = new StyledText();
}
} // end of class
- A hozzászóláshoz be kell jelentkezni