最初,所有组件仅在水平方向上排成一行。 后来我设置滚动启用面板的尺寸如下JScrollPane滚动问题
main.setPreferredSize(scroll.getViewport().getSize());
main.setMaximumSize(new Dimension(scroll.getViewport().getWidth(),Integer.MAX_VALUE));
和它的工作部件开始在多行排列,并不会超出屏幕水平。但是为什么没有发生垂直滚动,实际上组件正在被覆盖,高度也是固定的,因为视口的大小,即使是最大尺寸也是定义的。
请帮.........
我需要的是只有垂直滚动.....组件不应该超出屏幕会水平,但可以超越屏幕垂直。
更新代码:现在我想要的是按钮不应该超出屏幕水平,而是可以使用垂直滚动,如果整个窗口被占用。
公共类测试{
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("JAVA GUI");
JPanel main = new JPanel();
JScrollPane scroll = new JScrollPane(main);
BoxLayout box = new BoxLayout(main, BoxLayout.Y_AXIS);
main.setLayout(box);
main.add(new JLabel("row 1"));
JPanel panel1 = new JPanel(new FlowLayout());
for(int i=0;i<200;i++){
panel1.add(new JButton("b"+i));
}
JPanel panel2 = new JPanel(new FlowLayout());
for(int i=0;i<200;i++){
panel2.add(new JButton("b"+i));
}
JPanel panel3 = new JPanel(new FlowLayout());
for(int i=0;i<200;i++){
panel3.add(new JButton("b"+i));
}
Border border = BorderFactory.createLineBorder(Color.black,10);
panel1.setBorder(border);
panel2.setBorder(border);
panel3.setBorder(border);
main.add(panel1);
main.add(new JLabel("row2"));
main.add(panel2);
main.add(new JLabel("row3"));
main.add(panel3);
frame.setContentPane(scroll);
frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
}
}当组件的优选尺寸大于滚动面板的尺寸时
“但是,为什么F ***“ - 现在我们不知道你想说什么,因为***。 – Maroun
什么是滚动,它是如何创建的?除非您明确设置首选大小的大小,否则不要认为它设置为“所有”。 – Smitty
请勿用视图端口或滚动窗格的首选/最小/最大尺寸进行拧紧,否则它将与您一起拧回。作为视图的面板应该是适当的首选/最小/最大尺寸值或实现Scrollable界面,以提供有关应如何确定视口大小的提示 – MadProgrammer