【问题标题】:Creating more advanced elements in Java: Swing or images在 Java 中创建更高级的元素:Swing 或图像
【发布时间】:2012-11-30 22:58:49
【问题描述】:

在 Java 中使用 Swing 创建 GUI 时,应该如何创建更高级的“元素”?例如,考虑:

这可以使用 ~10 张图片 来完成,具体取决于当前页面或状态。我也确信可以以编程方式执行此操作,但是,考虑到我过去使用 Swing 的经验,我也确信这将是很多相对简单的代码。特别是考虑到这可以在 CSS 中使用最多约 40 行代码来完成。

在这种情况下,有没有其他方法可以创建这个“元素”?如果没有;什么是首选:图像或 Swing?

【问题讨论】:

  • 防火墙可以阻止我们中的许多人看到图像。你能更好地描述你想要做什么吗?
  • @HovercraftFullOfEels 我正在开发一个 Java 应用程序,它需要非标准元素,类似于问题中提供的图像。我不确定是否应该使用 Swing(或其他东西..),或者只是使用很多图像。
  • 再次,由于防火墙,我看不到您提供的图像。祝你好运。
  • @HovercraftFullOfEels 哦,对不起-我误解了你。图像是表单状态/进度跟踪器,认为“第一步是活动页面,彩色 [检查] - - - 第二步未完成,变灰 - - 第三步未完成,变灰”以及描述每个的标签步。不过,这只是一个例子。
  • 我认为一个好的混合解决方案可能是将矢量图形提供给 Java 代码,但我不知道有哪个库可以做到这一点。

标签: java swing user-interface


【解决方案1】:
  1. 您可以使用合适的 Unicode 字形,例如✓—CHECK MARK 或任何数字,

    • 作为标签的文本,显示为here

    • 作为GlyphVector,提到了here

    • 作为渲染图像,图示为here

  2. 您可以通过实现Icon 接口来获得一个有色、抗锯齿的圆圈; ColorIcon 就是一个例子。

  3. 您可以使用BasciStroke 获得各种实线和虚线,参见here

  4. layout managers 的库存中,FlowLayout 可能就足够了。

【讨论】:

  • 更多Dingbats,包括圈出的数字。
  • 完美答案,非常感谢!不久之后,在您的回答的帮助下,我创建了一些不太不同的东西:dl.dropbox.com/u/16088211/danke.png(带有支持边框)。现在我只需要弄清楚如何使线条在较长的文本(例如最后一项)上重叠。再次感谢!
  • 您可以Use HTML in Swing Components添加换行符。
  • 聪明,没想到! [dl.dropbox.com/u/16088211/height.PNG] 但是它现在确实推动了圆圈而不是文本。我尝试使用cons.anchor = GridBagConstraints.SOUTH,但没有成功。
  • 您可能会看到Box.TOP_ALIGNMENT 是否有效。
【解决方案2】:

这将归结为要求。

如果您希望它具有可扩展性,那么 Swing 图形是您的最佳选择。如果没有,图像应该没问题。如果您希望它可重复使用(对于 n 个可能的连接),那么 Swing 图形是更好的选择。如果您的连接数量有限且永远不会更改,则图像会很好。

您还需要考虑更改外观和感觉的难易程度。创建图像需要时间,但渲染器提供了更大的灵活性。

对我来说,我通常会结合使用这两者。渲染文本相对简单,但是像复选标记这样的东西会花费更多时间来创建。

您还必须考虑是否要生成单个图像并对其进行渲染,它为每个部分使用单独的组件。

我也会考虑导航之类的事情。需要吗,如果需要的话,是不是更容易用MouseListeners的组件或者将视图转换成模型来判断是怎么回事。

【讨论】:

  • 感谢您的回答,给了我很多想法;真的很感激!
  • 我希望我有更多的时间一起举一个例子
【解决方案3】:

如果你真的必须使用 Java(如你所说,使用 CSS 实现类似的东西要容易得多),我认为使用图像会更好。

可以实现生成图形元素的代码,但除了更难实现之外,它还不可维护:对设计进行任意简单的更改都可能需要很长时间才能实现。

与此相反,图像可以轻松替换,有时甚至无需重新编译应用程序(如果它们保持相同的大小、格式等)。

在性能方面,使用 swing 或其他库可以让您的应用程序大小增加几 KB,而使用图像可能会使您的应用程序在资源有限(移动应用程序、旧计算机)的情况下更具响应性

【讨论】:

  • 首先,感谢您的回答和想法!遗憾的是,我不得不使用 Java,因为它将成为一个桌面应用程序。幸运的是,应用程序的总大小并不是什么大问题,因为它只会部署一次(不算更新)。
猜你喜欢
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多