所需的空布局,用于绘图 +标签

发布于 2024-12-21 18:36:07 字数 239 浏览 2 评论 0原文

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

是否有任何方法可以使用布局管理器手动设置所有标签的位置?

程序设计

I am making a small JFrame in which I draw a large triangle. On all the sides of the triangle there has to be a label. I have to position these labels myself, because of the irregular shape of the triangle (yes, there will also be a non-right-angled triangle). (I have specified setResizable(false) on my JFrame, so there is no need for multiple sizes.)

Would there be any way to manually set the location of all my labels, WITH a layout manager?

Program design

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白色秋天 2024-12-28 18:36:08

如果你想在中间有一个画布,然后在 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);

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

If you want to have a canvas in the middle and then labels on any of the 4 sides, you could use a BorderLayout, like so:

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);

The tricky part will be if you want to somehow align where your labels are depending on the currently drawn triangle (or whatever is in the container), but hopefully you don't want to do that.

请你别敷衍 2024-12-28 18:36:08

您说您想在不规则的地方绘制标签,例如在角和侧面。那么我建议在 Graphics2D API 中使用drawString(String s, int x, int y)。因此,在绘制图形时先放置标签,然后再绘制。

请参阅课程:使用文本 API 了解更高级的选项,例如字体和字体规格。

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

You say that you want to draw the labels at irregular places e.g. at corners and at the sides the dhapes. Then I would recommend to use drawString(String s, int x, int y) in the Graphics2D API. So place the labels and draw then when you draw the figure.

See Lesson: Working with Text APIs for more advanced options like e.g. Fonts and Font metrics.

When you want to specify the exact position of labels, is the only case when you shouldn't use an Layout Manager.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文