Java 在JScrollPane中显示JLayeredPane
此代码显示滚动窗格内的波形:Java 在JScrollPane中显示JLayeredPane,java,swing,scala,jscrollpane,jlayeredpane,Java,Swing,Scala,Jscrollpane,Jlayeredpane,此代码显示滚动窗格内的波形: var scrollPane = new JScrollPane var waveform = new Waveform(trackModel) // JPanel with waveform scrollPane.setViewportView(waveform) var scrollPane = new JScrollPane var layeredPane = new JLayeredPane var waveform = new Waveform(t
var scrollPane = new JScrollPane
var waveform = new Waveform(trackModel) // JPanel with waveform
scrollPane.setViewportView(waveform)
var scrollPane = new JScrollPane
var layeredPane = new JLayeredPane
var waveform = new Waveform(trackModel) // JPanel with waveform
layeredPane.add(waveform, JLayeredPane.DEFAULT_LAYER)
layeredPane.setPreferredSize(trackModel.getSize())
scrollPane.setViewportView(layeredPane)
这只显示了滚动窗格中的灰色背景:
var scrollPane = new JScrollPane
var waveform = new Waveform(trackModel) // JPanel with waveform
scrollPane.setViewportView(waveform)
var scrollPane = new JScrollPane
var layeredPane = new JLayeredPane
var waveform = new Waveform(trackModel) // JPanel with waveform
layeredPane.add(waveform, JLayeredPane.DEFAULT_LAYER)
layeredPane.setPreferredSize(trackModel.getSize())
scrollPane.setViewportView(layeredPane)
我不知道为什么波形(波形扩展JPanel)不显示。以下是更多信息:
System.out.println("waveform visibility: " + waveform.isVisible)
System.out.println("layeredPane visibility: " + layeredPane.isVisible)
System.out.println("scrollPane visibility: " + scrollPane.isVisible)
System.out.println("waveform dimensions: " + waveform.getPreferredSize.width + "/" + waveform.getPreferredSize.height)
System.out.println("layeredPane dimensions: " + layeredPane.getPreferredSize.width + "/" + layeredPane.getPreferredSize.height)
System.out.println("scrollPane dimensions: " + scrollPane.getPreferredSize.width + "/" + scrollPane.getPreferredSize.height)
System.out.println("waveform dimensions: " + waveform.getWidth + "/" + waveform.getHeight)
System.out.println("layeredPane dimensions: " + layeredPane.getWidth + "/" + layeredPane.getHeight)
System.out.println("scrollPane dimensions: " + scrollPane.getWidth + "/" + scrollPane.getHeight)
以及输出:
waveform visibility: true
layeredPane visibility: true
scrollPane visibility: true
waveform dimensions: 40315/200
layeredPane dimensions: 40315/200
scrollPane dimensions: 40318/203
waveform dimensions: 0/0
layeredPane dimensions: 0/0
scrollPane dimensions: 0/0
解决方案
我将波形的setPreferredSize更改为setSize。现在它可以工作了。解决方案
我将波形的setPreferredSize更改为setSize。现在它起作用了。如果你的解决方案有效,那就做一个答案。如果你的解决方案有效,那就做一个答案。错误的解决方案。只有在使用空布局时,这才有效。更好的解决方案是使用适当的布局管理器@卡米克:我的第一个冲动也是,但它是在一个没有LayourManager?的分层窗格中。哦@关于Swing的Swing教程kleopatra实际上指出,
“虽然分层窗格默认没有布局管理器,但您仍然可以为分层窗格分配布局管理器。”
甚至还有一个工作示例。然而,在玩了一点这个之后,我同意它没有真正意义,因为所有组件都将添加到同一层,所以它很少有用。我的评论应该被忽略:(错误的解决方案。只有在使用空布局的情况下才有效。更好的解决方案是使用适当的布局管理器。嗯..@camickr:我的第一个冲动也是,但它在一个没有布局管理器的分层窗格中。哎呀…@kleopatra,Swing教程的实际状态,“虽然分层窗格默认情况下没有布局管理器,但您仍然可以为分层窗格分配布局管理器。”
甚至还有一个工作示例。但是,经过一点尝试,我同意这没有什么意义,因为所有组件都将添加到同一层,因此很少有用。我的评论应该忽略:(