2011-09-03 25 views
1

这段代码显示的JLayeredPane显示我波形内滚动窗格:在JScrollPane的

var scrollPane = new JScrollPane 
var waveform = new Waveform(trackModel) // JPanel with waveform 

scrollPane.setViewportView(waveform) 

,这表明我的ScrollPane只是一个灰色的背景:

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 
+0

如果您的解决方案能够使其成为答案。 – Owen

回答

1

SOLUTION

我改变了setPreferredSize波形来的setSize。现在它可以工作。

+1

错误的解决方案。这只会在你使用空布局时才起作用。更好的解决方案是使用合适的布局管理器。 – camickr

+0

hmm .. @camickr:我的第一个冲动,但它是在没有LayourManager的LayeredPane中。 – kleopatra

+2

oops ... @kleopatra,关于[如何使用分层窗格]的Swing教程(http://download.oracle.com/javase/tutorial/uiswing/components/layeredpane.html#layout)实际上指出,''虽然一个分层窗格默认没有布局管理器,您仍然可以将布局管理器分配给分层窗格。“”甚至有一个工作示例。然而,在玩了这一点之后,我认为它并没有什么意义,因为所有的组件都会被添加到同一层,所以它很少有用。我的评论应该被忽略:( – camickr