【问题标题】:Scala Swing: setting relative dividerlocation on SplitPaneScala Swing:在 SplitPane 上设置相对分隔符位置
【发布时间】:2012-08-14 14:37:45
【问题描述】:

在创建拆分窗格时将 Scala Swing SplitPane 上的相对(双)分隔符位置设置为所需值似乎几乎是不可能的。拆分器几乎总是出现在其父组件的顶部。我尝试过使用重新验证和重新绘制的各种组合,但似乎没有任何效果。如果我在构造函数中使用拆分窗格实例化一个框架,使其可见,然后设置拆分窗格值,则分隔符出现在正确的位置。如果我通过从用户界面调用函数来设置它,它也会转到正确的位置。但我希望能够将 Splipanes 引入现有的框架中。

这是一个已知问题吗?有解决办法吗?我应该在四分之一秒或半秒后使用计时器来设置分隔线位置吗? - 非常混乱,但应该可以。

一些示例代码,仍然没有达到预期的效果:

val newSplit = new CSplit(Right(canv1), Right(newMapCanv))        
panel.layout(newSplit.pane) = BorderPanel.Position.Center
thisScn.visible = true
newSplit.pane.dividerLocation = 0.5 
newSplit.pane.bottomComponent = canv1
newSplit.pane.topComponent = canv2
newSplit.pane.dividerLocation = 0.5
newSplit.pane.revalidate
newSplit.pane.repaint
panel.revalidate
panel.repaint
newSplit.pane.dividerLocation = 0.5
newSplit.pane.revalidate
newSplit.pane.repaint
newSplit.pane.dividerLocation = 0.5

【问题讨论】:

  • 首先,你应该让示例独立

标签: scala scala-swing


【解决方案1】:

尝试将每个组件的 preferredSize 设置为 0 -> 0。这是我在处理 SplitPane 时使用的一些代码

oneTouchExpandable = true
resizeWeight = 0.5
leftComponent.preferredSize = 0 -> 0
rightComponent.preferredSize = 0 -> 0

【讨论】:

  • 谢谢,这似乎有效。据我所知,不需要 OneTouchExpanable。
  • 是的,你是对的。我把它放在那里是因为它是我在使用 SplitPane 时总是设置的一部分,但绝对不需要它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多