Ich verwende eine JTextPane
, um etwas HTML zu rendern. Ich verwende eine HTMLEditorKit
und eine StyleSheet
, um Regeln zu der code
Eigenschaft hinzuzufügen, so dass es genau wie der Code auf StackOverflow aussieht. Das Problem besteht darin, dass JTextPane
die Auffüllung des Codes (1 Pixel oben/unten, 5 Pixel links/rechts) nicht rendert, obwohl die padding
Eigenschaft als eine der Eigenschaften aufgeführt wird, die von der Rendering-Engine unterstützt wird in the documentation. HierCSS-Padding nicht gerendert in JTextPane
ist, was ich zu erwarten (Wie this CSSDeck Lab gezeigt): ←
↑ - ↑ ↑ - ↑
EDIT:
Ich habe umgeschaltet von der Nutzung der <code>
Tags in mein HTML und habe auf Vorschlag von @Sharcoux auf <span>
gewechselt. Dies machte die Schriftgröße des zu verwendenden Codes gleich wie der Text in den <pre>
Tags, so dass der rote Hintergrund dieselbe Höhe wie der grüne Rand hat, das erwartete Ergebnis wird jedoch immer noch nicht erzeugt. Here ist das Originalbild, wenn Sie interessiert sind.
Dies ist, was tatsächlich erscheint:
Ich habe auch versucht, mit dem Text der CSS inline bewegen, aber ohne Erfolg.
MCVE (auch Edited):
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.StyleSheet;
public class CodePaddingMCVE {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
JFrame frame = new JFrame("Code Padding Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextPane tp = new JTextPane();
tp.setContentType("text/html");
HTMLEditorKit kit = new HTMLEditorKit();
tp.setEditorKit(kit);
StyleSheet sheet = kit.getStyleSheet();
sheet.addRule("span {padding: 1px 5px; background-color: red}"); //Using span here
sheet.addRule("pre {padding: 0px; background-color: green}");
tp.setDocument(kit.createDefaultDocument());
tp.setText("<html><pre>NotCode<span>Code</span>NotCode</pre></html>"); //Using <span> here too
JScrollPane sp = new JScrollPane(tp) {
private static final long serialVersionUID = 1L;
@Override
public Dimension getPreferredSize() {
return new Dimension(250, 50);
}
};
frame.getContentPane().add(sp);
frame.pack();
frame.setVisible(true);
});
}
}
Ich bin mit OS X Yosemite 10.10.15 Eclipse Mars.2 4.5.2 und Java 8 [1.8.0_66].
Sie sollten ein span-Element anstelle von Code verwenden. Und ich bin mir nicht sicher, ob das Pre-Tag erkannt wird, aber ich erinnere mich nicht und bin gerade an meinem Telefon. – Sharcoux