У меня есть следующая маленькая программа:Создать панель с горизонтальной оберткой и вертикальной прокрутки
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 и добавлю прокрутку к фрейму, то метки не будут обертываться, потому что scrollPane сообщает достаточную ширину (я думаю), чтобы удерживать все метки и позволяет пользователю прокручивать видеть их.
Я хотел бы прокрутить поведение, но только для вертикали - я хотел бы, чтобы пользователь выбирал ширину, которую он хочет видеть, и полоса прокрутки появляется только для прокрутки по вертикали. Как я могу это сделать?
Я пробовал расширять JScrollPane и возвращать true с getScrollableTracksViewportWidth()
, но, как я и ожидал, это не делает то, что я хочу, потому что это ширина кадра, которую я хочу отслеживать, а не в окне просмотра. Я попытался расширить JPanel и переопределить getWidth, чтобы вернуть ширину фрейма, но все равно оставил все метки в горизонтальной строке, то есть они перестали обертывать. Есть ли что-то, что сделает это без специального менеджера макетов? Кажется мне все, что нам нужно, это программный контроль ширины окна просмотра.
Возможно, проблема связана с 'FlowLayout', попробуйте взглянуть на [' WrapLayout'] (http://tips4java.wordpress.com/2008/11/06/wrap-layout/) вместо – MadProgrammer
I не достигайте своей цели, так как в стороне не забудьте изменить, увеличьте прирост прокрутки – mKorbel