[英]Java JScrollPane ve
我想制作一个Java代码,可以在其中插入任意数量的面板。 这样我就可以向下滚动以查看面板。 我现在为止很远:但是我的问题是,我无法向下滚动。 我用JTextAreas测试了JScrollPane,它工作得很好。
package test;
import java.awt.*;
import javax.swing.*;
public class Scrollbar {
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JTextField tFId = new JTextField("ID: ", 5);
JTextField tFName = new JTextField("Name: ", 5);
JTextField tFHersteller = new JTextField("Hersteller: ", 5);
JTextField tFId2 = new JTextField("ID: ", 5);
JTextField tFName2 = new JTextField("Name: ", 5);
JTextField tFHersteller2 = new JTextField("Hersteller: ", 5);
JTextField tFId3 = new JTextField("ID: ", 5);
JTextField tFName3 = new JTextField("Name: ", 5);
JTextField tFHersteller3 = new JTextField("Hersteller: ", 5);
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
panel.setLayout(new FlowLayout());
panel.setPreferredSize(new Dimension(200, 85));
panel.add(panel1);
panel.add(panel2);
panel.add(panel3);
JScrollPane scrollPanel = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
panel1.setLayout(new FlowLayout());
panel1.add(tFId);
panel1.add(tFName);
panel1.add(tFHersteller);
panel2.setLayout(new FlowLayout());
panel2.add(tFId2);
panel2.add(tFName2);
panel2.add(tFHersteller2);
panel3.setLayout(new FlowLayout());
panel3.add(tFId3);
panel3.add(tFName3);
panel3.add(tFHersteller3);
frame.add(scrollPanel);
frame.setVisible(true);
}
}
您正在过度使用FlowLayout。
不同的布局具有不同的行为。 首先,您需要删除以下行:
frame.setLayout(new FlowLayout());
框架内容窗格的默认布局是BorderLayout。 您希望以这种方式保留它,因为添加到BorderLayout且没有任何约束的组件将放置在中心,该组件将在其中伸展以填充整个空间。
其次,您要删除这些:
panel.setLayout(new FlowLayout());
panel.setPreferredSize(new Dimension(200, 85));
设置首选大小会干扰JScrollPane管理其视图(即panel
)的能力。 当您希望组件显示在多行中时,应尝试通过限制FlowLayout的宽度来强制执行它。 而是使用旨在将组件放置在不同行上的布局。 最好的选择是GridBagLayout :
panel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
panel.add(panel1, gbc);
panel.add(panel2, gbc);
gbc.weighty = 1;
gbc.anchor = GridBagConstraints.NORTH;
panel.add(panel3, gbc);
在约束中使用GridBagConstraints.REMAINDER将告诉GridBagLayout使子组件占据整个行。
weighty = 1
的使用告诉GridBagLayout当面板大于其子项时,要添加的子项的网格单元应占用所有额外的垂直空间。 最后,无论网格单元有多高,GridBagConstraints.NORTH都将其子项放置在拉伸网格单元的顶部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.