Java 摆动式可滚动面板

Java 摆动式可滚动面板,java,swing,jscrollpane,Java,Swing,Jscrollpane,向我的应用程序添加滚动窗格时出现问题。我的应用程序的工作原理如下: 1.在开始时,panel1(黄色)已初始化 2.按下“potvrdit”面板2后(红色面板已初始化) 3.将一组面板(绿色面板)添加到面板2 问题是,当集合(绿色面板)的数量对于屏幕来说太大时,我无法添加滚动条。正如你所看到的,它只是在右边增加了一条细线 这是我源代码的一部分: JFrame jframe = new JFrame("Etiket print."); JPanel panel0 = new JPanel(); J

向我的应用程序添加滚动窗格时出现问题。我的应用程序的工作原理如下: 1.在开始时,panel1(黄色)已初始化 2.按下“potvrdit”面板2后(红色面板已初始化) 3.将一组面板(绿色面板)添加到面板2

问题是,当集合(绿色面板)的数量对于屏幕来说太大时,我无法添加滚动条。正如你所看到的,它只是在右边增加了一条细线

这是我源代码的一部分:

JFrame jframe = new JFrame("Etiket print.");
JPanel panel0 = new JPanel();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel4 = new JPanel();
JScrollPane scrollFrame = new JScrollPane(panel2);
jframe.setMinimumSize(new Dimension(1280, 1000));
GridBagConstraints c = new GridBagConstraints();        
panel0.setLayout(new GridBagLayout());
panel1.setLayout(new GridBagLayout());
panel2.setLayout(new GridBagLayout());
panel2.setAutoscrolls(true);
panel3.setLayout(new GridBagLayout());
panel4.setLayout(new GridBagLayout());
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
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(panel0);
container1.add(panel1);
container2.add(container1);
container2.add(panel3);
container2.add(panel4);
container.add(container2);
container.add(panel2);
jframe.add(scrollFrame);
jframe.add(container, BorderLayout.NORTH);
jframe.pack();
jframe.setVisible(true);
if (e.getActionCommand().equals("Potvrd")||e.getActionCommand().equals("myTextField")){

                temporaryBlockedSubharnesses.clear();
                panel2.removeAll();

                harnessPanelList.clear();


            GridBagConstraints c = new GridBagConstraints();

            for (int i=0; i<20; i++){
            c.fill = GridBagConstraints.HORIZONTAL;
            c.weightx = 0.5;
            c.gridx = 0;
            c.gridy = i;
            JPanel hp= new JPanel();
                hp.setMinimumSize(new Dimension(80, 70));
                hp.setMaximumSize(new Dimension(80, 70));
                hp.setPreferredSize(new Dimension(80, 70));
                if(i%2==0) {
                hp.setBackground(myBlue1Color);
            }
            else {
                    hp.setBackground(myBlue2Color);
                 }


            panel2.add(hp, c);

               hp.repaint();
              hp.validate();
            }
            panel2.repaint();
            panel2.validate();
            jframe.repaint();

        }
JFrame-JFrame=新的JFrame(“Etiket打印”);
JPanel panel0=新的JPanel();
JPanel panel1=新的JPanel();
JPanel panel2=新的JPanel();
JPanel panel3=新的JPanel();
JPanel panel4=新的JPanel();
JScrollPane scrollFrame=新的JScrollPane(panel2);
jframe.setMinimumSize(新尺寸(12801000));
GridBagConstraints c=新的GridBagConstraints();
panel0.setLayout(新的GridBagLayout());
panel1.setLayout(新的GridBagLayout());
panel2.setLayout(新的GridBagLayout());
面板2.设置自动滚动(真);
panel3.setLayout(新的GridBagLayout());
panel4.setLayout(新的GridBagLayout());
jframe.setDefaultCloseOperation(jframe.EXIT_ON_CLOSE);
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.添加(面板0);
容器1.添加(面板1);
容器2.添加(容器1);
容器2.添加(面板3);
容器2.添加(面板4);
container.add(container2);
容器。添加(第2组);
添加(滚动框);
jframe.add(container,BorderLayout.NORTH);
jframe.pack();
jframe.setVisible(true);
如果(e.getActionCommand().equals(“Potvrd”)| e.getActionCommand().equals(“myTextField”)){
暂时阻塞的亚警告。清除();
面板2.移除所有();
harnessPanelList.clear();
GridBagConstraints c=新的GridBagConstraints();

对于(int i=0;i而不是
JPanel
尝试swingx库中的
JXPanel
。它实现了
可滚动
,因此它支持滚动。

您正在将滚动面板添加到它应该滚动的面板中。这可能行不通。William是对的。您应该将滚动面板添加到框架中。为了更好请尽快提供帮助,发布一个。
setPreferredSize(新维度(800750));
See。不要调用setPreferredSize,将所有内容留给LayoutManager。