【问题标题】:Java - How to completly remove the line spacing (vertical gap) and character spacing (horizontal gap) in a JTextPane?Java - 如何完全删除 JTextPane 中的行间距(垂直间距)和字符间距(水平间距)?
【发布时间】:2014-05-18 00:51:59
【问题描述】:

我未能从JTextPane 中完全删除行间距和字符间距。这甚至可能吗?

Google 向我展示了以下 code-sn-p,但它似乎对我的 JTextPane,据我了解,它只会消除垂直间隙(线之间的空间)。

SimpleAttributeSet sas = new SimpleAttributeSet();
StyleConstants.setLineSpacing(sas , 0.0f);
textPane.setParagraphAttributes(sas , false);

我目前已将JTextPane 的字体设置为“Consolas”,字体大小为 9。我正在尝试正确显示某些 ASCII 艺术(就像DAMN NFO VIEWER 一样)。

这就是它在我的 GUI 的 JTextPane 中的样子以及我希望它的样子:

这就是 DAMN NFO VIEWER 显示相同 ASCII 艺术的方式(正确方式)。

我尝试使用与 DAMN NFO VIEWER 相同的字体和大小,但这并没有消除差距,所以我认为我必须进行一些其他更改。任何建议表示赞赏。

编辑

这是我尝试应用SimpleAttributeSet() 的方法,也许我做得不对:

nfoFileTextPane = new javax.swing.JTextPane();
StyledDocument doc = nfoFileTextPane.getStyledDocument();
Element e = doc.getParagraphElement(0);
MutableAttributeSet mas = new SimpleAttributeSet(); 
StyleConstants.setLineSpacing(mas, -0.2f);
StyleConstants.setSpaceAbove(mas, -0.2f);
StyleConstants.setSpaceBelow(mas, -0.2f);
//0-1000 test
doc.setParagraphAttributes(0, 1000, mas, true);

【问题讨论】:

  • 你试过StyleConstants.setSpaceAbovesetSpaceBelow吗?
  • 是的,我也试过了。仍然没有任何变化,也许我没有正确应用SimpleAttributeSet()
  • 为了完整起见,StyleConstants.setSpaceAbove(AttributeSet, f)StyleConstants.setSpaceBelow(AttributeSet, f) 似乎设置了文本与 JTextPane 的顶部/底部边框的距离,类似于 CSS 填充。

标签: java jtextpane spacing ascii-art


【解决方案1】:

文本窗格可能无法为您提供所需的控制级别。即使您将字符之间的间隙调整为负值,您也可能会发现您需要将不同的字符调整不同的量以允许字距调整等。如果您使用图像代替并自己渲染文本,您可以获得非常精细地控制位置并将其准确放置在您需要的位置。

如果您决定这样做,我去年提出的这个问题可能会对您有所帮助:

Rendering multi-line multi-page formatted text to a BufferedImage (not in Android)

【讨论】:

  • 问题是,我希望 ASCII 艺术是可编辑的。如果我将它渲染为图像,它可能会正确显示,但用户将无法编辑它。必须有一种简单的方法来实现这一点。
【解决方案2】:

实际上,SimpleAttributeSet 是使用上面的代码正确应用的。只是行间距更大,-0.2f 不足以缩小指定字体和大小的行之间的间隙。使用-1.0f 会将线条挤在一起并使它们重叠。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2020-10-08
    • 1970-01-01
    相关资源
    最近更新 更多