Java 如何将jscrollpane添加到jframe?

Java 如何将jscrollpane添加到jframe?,java,swing,layout,jscrollpane,border-layout,Java,Swing,Layout,Jscrollpane,Border Layout,我有下面的源代码…有人能给我一个建议,如何将jscrollpane添加到jframe上吗?我尝试了几次将其添加到jframe,但没有任何进展。它甚至没有显示出来 public class Form3 { JFrame jframe = new JFrame("Etiket print."); JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); JPanel pane

我有下面的源代码…有人能给我一个建议,如何将jscrollpane添加到jframe上吗?我尝试了几次将其添加到jframe,但没有任何进展。它甚至没有显示出来

public class Form3 {
        JFrame jframe = new JFrame("Etiket print.");
        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        JPanel panel3 = new JPanel();
        JPanel panel4 = new JPanel();
        JScrollPane scrollFrame = new JScrollPane(panel2);
        Color myBlue1Color = new Color(168, 175, 247);
        Color myBlue2Color = new Color(139, 146, 255);



           public Form3(){
                jframe.setMinimumSize(new Dimension(1280, 1000));
                panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS));
                panel2.setAutoscrolls(true);
                jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                //---------------------------------Header
                panel1 = createSquareJPanel(Color.YELLOW, 600,200);
                panel3 = createSquareJPanel(Color.GREEN, 400,200);
                panel4 = createSquareJPanel(Color.white, 280,200);
                JPanel container = new JPanel();
                JPanel container1 = new JPanel();
                JPanel container2 = new JPanel();
                container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
                container1.setLayout(new BoxLayout(container1, BoxLayout.Y_AXIS));
                container2.setLayout(new BoxLayout(container2, BoxLayout.X_AXIS));


                container1.add(panel1);
                container2.add(container1);
                container2.add(panel3);
                container2.add(panel4);
                container.add(container2);
                container.add(panel2);

                {

                    for (int i=0; i<25; i++){

                        JPanel harnessPanel= new JPanel();
                        harnessPanel.setMinimumSize(new Dimension(1280, 70));
                        harnessPanel.setMaximumSize(new Dimension(1280, 70));
                        harnessPanel.setPreferredSize(new Dimension(1280, 70));
                        if(i%2==0) {
                            harnessPanel.setBackground(myBlue1Color);
                        }
                        else {
                            harnessPanel.setBackground(myBlue2Color);
                        }
                        panel2.add(harnessPanel);

                        harnessPanel.repaint();
                        harnessPanel.validate();
                    }
                    panel2.repaint();
                    panel2.validate();
                }
                jframe.add(scrollFrame);
                jframe.add(container);

                jframe.pack();
                jframe.setLocationRelativeTo(null);
                jframe.setVisible(true);

            }

            private JPanel createSquareJPanel(Color color, int size1, int size2)
            {
                JPanel tempPanel = new JPanel();
                tempPanel.setBackground(color);
                tempPanel.setMinimumSize(new Dimension(size1, size2));
                tempPanel.setMaximumSize(new Dimension(size1, size2));
                tempPanel.setPreferredSize(new Dimension(size1, size2));
                return tempPanel;
            }

            public static void main (String args[]){
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        Form3 myF=new Form3();

                    }
                });
            };
        }
公共类表单3{
JFrame JFrame=新JFrame(“Etiket打印”);
JPanel panel1=新的JPanel();
JPanel panel2=新的JPanel();
JPanel panel3=新的JPanel();
JPanel panel4=新的JPanel();
JScrollPane scrollFrame=新的JScrollPane(panel2);
颜色myBlue1Color=新颜色(168、175、247);
颜色myBlue2Color=新颜色(139146255);
公共表格3(){
jframe.setMinimumSize(新尺寸(12801000));
panel2.setLayout(新的BoxLayout(panel2,BoxLayout.Y_轴));
面板2.设置自动滚动(真);
jframe.setDefaultCloseOperation(jframe.EXIT_ON_CLOSE);
//---------------------------------标题
panel1=createSquareJPanel(颜色为黄色,600200);
panel3=createSquareJPanel(Color.GREEN,400200);
panel4=createSquareJPanel(Color.white,280200);
JPanel容器=新的JPanel();
JPanel container1=新的JPanel();
JPanel container2=新的JPanel();
container.setLayout(新的BoxLayout(container,BoxLayout.Y_轴));
container1.setLayout(新的BoxLayout(container1,BoxLayout.Y_轴));
container2.setLayout(新的BoxLayout(container2,BoxLayout.X_轴));
容器1.添加(面板1);
容器2.添加(容器1);
容器2.添加(面板3);
容器2.添加(面板4);
container.add(container2);
容器。添加(第2组);
{

for(int i=0;i
JFrame
默认使用
BorderLayout
。它的默认位置(如果未指定)是
中心

BorderLayout
将只允许一个组件占用其5个可用位置中的任何一个

所以当你这么做的时候

jframe.add(scrollFrame);
jframe.add(container);
它将
滚动框
添加到中心位置,并在添加
容器
时有效地将其删除(它实际上并没有将其删除,但结果几乎相同)

尝试提供位置约束。例如

jframe.add(scrollFrame);
jframe.add(container, BorderLayout.SOUTH);

有关更多详细信息,请参见

我尝试如下更改:jframe.add(scrollFrame,BorderLayout.EAST);jframe.add(container,BorderLayout.WEST);现在我可以看到一个薄组件(大小为0.5 mm)在东侧,但我仍然无法使用它进行滚动,你知道可能会出现什么问题吗?我将发布另一张图片,其中视口将使用preferredSize或PreferredScrollabelSize(如果实现的话)的可能副本-这无助于重复问题,你需要努力尝试理解答案。。。