Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JScrollPane中显示JLayeredPane_Java_Swing_Scala_Jscrollpane_Jlayeredpane - Fatal编程技术网

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教程的实际状态,
“虽然分层窗格默认情况下没有布局管理器,但您仍然可以为分层窗格分配布局管理器。”
甚至还有一个工作示例。但是,经过一点尝试,我同意这没有什么意义,因为所有组件都将添加到同一层,因此很少有用。我的评论应该忽略:(