【问题标题】:Required null layout, for drawing + labels必需的空布局,用于绘图 + 标签
【发布时间】:2011-12-16 21:32:08
【问题描述】:

我正在制作一个小型 JFrame,在其中绘制一个大三角形。在三角形的所有边上都必须有一个标签。我必须自己定位这些标签,因为三角形的形状不规则(是的,也会有一个非直角三角形)。 (我已经在我的 JFrame 上指定了 setResizable(false),所以不需要多个尺寸。)

有没有办法手动设置我所有标签的位置,使用布局管理器?

【问题讨论】:

  • 你想在不规则的地方贴标签吗?在形状的角落?
  • JLabel 实例呈现为BufferedImage,然后将BI 绘制到Graphics 对象的最适合位置可能是更好的策略。详情请见this answer
  • @Jonas:是的,而且在每一边的中间。它总是一个三角形,但并不总是规则的。

标签: java swing user-interface layout-manager null-layout-manager


【解决方案1】:

如果您想在中间有一个画布,然后在 4 个侧面的任何一个上添加标签,您可以使用 BorderLayout,如下所示:

JPanel framePanel = new JPanel(new BorderLayout());

JPanel triangleCanvas = ...
framePanel.add(triangleCanvas, BorderLayout.CENTER);

JPanel northLabels = ...
framePanel.add(northLabels, BorderLayout.PAGE_START);

JPanel southLabels = ...
framePanel.add(southLabels, BorderLayout.PAGE_END);

JPanel eastLabels = ...
framePanel.add(eastLabels, BorderLayout.LINE_END);

JPanel westLabels = ...
framePanel.add(westLabels, BorderLayout.LINE_START);

frame.getContentPane().add(framePanel);

如果您想根据当前绘制的三角形(或容器中的任何内容)以某种方式对齐标签的位置,则棘手的部分是,但希望您不想这样做。

【讨论】:

  • 我确实想这样做,这是我的问题。 BorderLayout我知道,但是不规则三角形会更多。
【解决方案2】:

你说你想在不规则的地方绘制标签,例如。在角落和侧面的 dhapes。然后我建议在 Graphics2D API 中使用drawString(String s, int x, int y)。所以在绘制图形时放置标签并绘制。

请参阅Lesson: Working with Text APIs 了解更多高级选项,例如字体和字体指标。

当您想指定标签的确切位置时,是唯一不应该使用布局管理器的情况。

【讨论】:

  • drawString(...) 方法是个好主意。我会用你的答案,谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多