【问题标题】:Swing: rotated stylized text?Swing:旋转的程式化文字?
【发布时间】:2012-05-05 14:50:42
【问题描述】:

我有一个渲染器,用于在 Graphics2D 上下文中绘制一组复杂的内容,包括使用变换和Graphics2D.drawString() 旋转的文本。

现在我想看看绘制风格化文本需要什么,它看起来像是一个泥潭,除了 JLabel 类如果你使用 HTML 就可以很好地处理这个,例如:

<html>a<sup>2</sup> + b<sup>2</sup> = c<sup>2</sup></html>

以下哪项是更简单的方法,我该如何开始?

  1. 使用 JLabel 将文本渲染到我的 Graphics2D 上下文中,通过让 JLabel 之类的组件进行渲染来模拟 JTable 使用渲染器的方式。 (我试过这样做,但我似乎无法让它工作;不确定调用什么方法——paint() 或 paintComponents()?——不确定它是否适用于旋转图形变换)

  2. 解析 HTML 或其他一些简化的格式化语言(如 MATLAB 用于图形的 TeX 子集)并继续使用 drawString(),但自己处理格式化。

【问题讨论】:

  • 不要从标题中删除上下文线索,如“Java”或“Swing”。是的,它们似乎与标签是多余的,但是在stackoverflow上的一些搜索(例如右侧栏中显示的“相关”问题)不包括标签,并且很难判断相关问题是否在同一个计算环境中或不同的东西(例如ObjectiveC或C#或其他)。这是对标题的一个词的补充,有助于在任何搜索中提供上下文。

标签: java swing text


【解决方案1】:

在我看来,你最好的选择是做#1,使用你的 JLabel 作为渲染器。实际上,我确实确认过一段时间你可以让标准挥杆组件旋转(显示它很容易 - 事件更棘手)

【讨论】:

  • 你有例子吗?有哪些微妙之处?如何正确定位 JLabel,在使 JLabel 自己绘制之前,必须将 Graphics2D 对象的哪些属性应用于 JLabel?
  • 这是我构建的类。您需要在其中添加 1+ 个组件:tus.svn.sourceforge.net/viewvc/tus/tjacobs/ui/ex/…
【解决方案2】:

我使用Greg Hinkle's VerticalLabelUI 效果很好。

我创建了一个名为 VerticalLabel 的 JLabel 子类,它会自动获取同一个包中的 VerticalLabelUI。甚至可以以这种方式与 JFormDesigner GUI 构建器一起使用!

【讨论】:

    【解决方案3】:

    在您的 HTML 中使用此 example 似乎有效:

    【讨论】:

    • 好的,所以你创建了一个容器,它可以旋转它的图形上下文,然后进行绘制……但是你如何按需渲染呢?我需要明确的绘制命令(我没有使用布局管理器,只是绘制线条和曲线等)
    • 您可以保存和恢复图形上下文的变换,如here所述。
    • 澄清一下:通常在 Swing 中你不会调用 paintComponent();相反,它会被窗口管理器调用。但是如果你显式地渲染形状,你如何调用子组件的paint() 或paintComponents() 方法呢? (paintComponent() 受保护)
    • 您需要一个用于渲染的图形上下文,例如传递给paintComponent()Graphics 实例或BufferedImagecreateGraphics() 方法返回的Graphics2D 实例。跨度>
    【解决方案4】:

    你可以试试这个http://java-sl.com/vertical.html

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      相关资源
      最近更新 更多