如果 JLabel 中没有 space,如何隐藏一些文本?

How to hide some text if there is no space in JLabel?

我在 JLabel 中有一些长文本,例如“事实是痛苦本身很重要,教导会遵循,但同时会发生一些伟大的工作和痛苦”。如果用户调整 window 的大小并且 space 不多,我想隐藏一些文本。我想得到这样的东西可以在 JLabel 或 JTextArea 中使用吗?

默认情况下,

JLabel 会在检测到 space 不足以显示文本时使用省略号 (...) 截断文本。但是,如果您在应用程序中使用布局管理器,那么是否有足够的 space 取决于布局管理器的意见。例如BoxLayout,默认布局会注意window的大小,允许标签截断:


fun labelInBoxLayout() {
  val frame = JFrame()
  frame.size = Dimension(300, 200)
  val panel = JPanel()
  panel.layout = BoxLayout(panel, BoxLayout.PAGE_AXIS)
  val longString = "WWWWWWWWWWWWWWWWW WWWWWWWWWWWWWWW WWWWWWWWWWW"
  val label = JLabel(longString)
  panel.add(label)
  frame.add(panel)
  frame.isVisible = true
}

FlowLayout 将坚持标签应在其文本的整个宽度上继续,而不管当前 window 宽度如何:

fun labelInFlowLayout() {
  val frame = JFrame()
  frame.size = Dimension(300, 200)
  frame.layout = FlowLayout()
  val longString = "WWWWWWWWWWWWWWWWW WWWWWWWWWWWWWWW WWWWWWWWWWW"
  val label = JLabel(longString)
  frame.add(label)
  frame.isVisible = true
}

我发现 BorderLayoutSpringLayout 以及嵌套在 FlowLayout [=] 中的 BoxLayout JPanel 也是如此20=]。如果您可以控制在应用程序中使用的布局,我建议您尝试不同的布局以找到具有所需效果的布局。请记住,您可以向 JPanel 中添加布局,因此您可以从允许截断的全帧布局开始,然后在框架的特定子部分使用其他布局。