如何将 jscrollpane 添加到 jframe?

Posted

技术标签:

【中文标题】如何将 jscrollpane 添加到 jframe?【英文标题】:how to add jscrollpane to jframe? 【发布时间】:2013-08-31 03:12:17 【问题描述】:

我有以下源代码...有人可以给我一个建议如何将 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();

                    
                );
            ;
        

我的应用程序的图片:

实际状态:

【问题讨论】:

scrollable panel in swing 的可能重复项 - 重复问题无济于事,您努力尝试理解答案... 【参考方案1】:

JFrame 默认使用BorderLayout。它的默认位置(如果你没有指定)是CENTER

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

所以当你这样做时......

jframe.add(scrollFrame);
jframe.add(container);

它将scrollFrame 添加到中心位置,并在您添加container 时有效地删除它(它实际上并没有删除它,但结果几乎相同)。

尝试提供位置约束。比如……

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

详情请见How to use BorderLayout

【讨论】:

我试图这样改变它:jframe.add(scrollFrame, BorderLayout.EAST); jframe.add(容器,BorderLayout.WEST);现在我可以在东侧看到一个薄的组件(尺寸为 cca 0.5 mm),但我仍然无法使用它进行滚动,你知道可能出了什么问题吗?我会用它再发一张照片 视口将使用preferredSize,或者,如果实现,则使用preferredScrollabelSize

以上是关于如何将 jscrollpane 添加到 jframe?的主要内容,如果未能解决你的问题,请参考以下文章

动态创建 jCheckBox 并添加到 jScrollPane

如何强制刷新/重绘 JScrollPane?

如何检查 JScrollPane 中的 JComponent 是不是对用户可见?

JScrollPane添加到JFrame中,怎么不显示呢?

JScrollPane没有出现

为啥 JOptionPane 中的 JScrollPane 不显示其所有内容?