我有以下的小程序:创建水平包装和垂直滚动面板
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class ScrollPanePlay extends JFrame
{
public static void main(String[] args)
{
ScrollPanePlay frame = new ScrollPanePlay();
frame.setVisible(true);
}
public ScrollPanePlay()
{
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
JPanel panel = new JPanel(this);
panel.setLayout(new FlowLayout(FlowLayout.LEFT));
panel.add(new JLabel("one"));
panel.add(new JLabel("two"));
panel.add(new JLabel("three"));
panel.add(new JLabel("four"));
panel.add(new JLabel("five"));
JScrollPane scrollPane = new JScrollPane(panel);
add(panel, BorderLayout.CENTER); // <== add either panel or scrollpane
pack();
}
}
如果我添加面板,然后在面板包装的标签时,由窗口窄,如预期的FlowLayout。
如果我将面板添加到滚动窗格并将滚动窗格添加到框架,那么标签不会换行,因为scrollPane报告足够的宽度(我猜)可容纳所有标签,并允许用户滚动去看他们。
我想滚动的行为,但只适用于垂直 - 我想用户选择他想看到的宽度,并让滚动条只出现垂直滚动。我怎样才能做到这一点?
我试着扩展JScrollPane,并从getScrollableTracksViewportWidth()
返回true,但是,正如我所料,这不会做我想做的事情,因为它是我希望事物跟踪的框架宽度,而不是视口。我试着扩展JPanel并重写getWidth来返回框架的宽度,但仍然将所有标签保留在水平行中,即它们退出包装。有没有什么会做到这一点没有自定义布局管理器?对我来说,我们需要的是对视口宽度进行编程控制。
这可能是'FlowLayout'本身的问题,请试着看看['WrapLayout'](http://tips4java.wordpress.com/2008/11/06/wrap-layout/)而不是 – MadProgrammer
I不要让你的目标,因为一边不要忘记改变,增加滚动增量 – mKorbel