Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用JScrollPane滚动包含其他几个面板的JPanel_Java_Swing_Jpanel_Jscrollpane_Layout Manager - Fatal编程技术网

Java 无法使用JScrollPane滚动包含其他几个面板的JPanel

Java 无法使用JScrollPane滚动包含其他几个面板的JPanel,java,swing,jpanel,jscrollpane,layout-manager,Java,Swing,Jpanel,Jscrollpane,Layout Manager,我有一个主JPanel,其中我使用了其他几个面板。我想在我的面板中添加一个滚动窗格,这样当子面板超出框架时,它们应该可以滚动,但我无法实现这一点 如何实现面板内面板的正确滚动功能 “我的孩子”面板中的代码: 我的主面板中的代码: 我认为你的问题是主面板不可滚动,因此你根本无法滚动 尝试在那里使用JScrollPane并查看以获取有关JScrollPanes的更多信息。还有很多关于其他GUI对象(如框架和面板)的信息,所以我认为您可以找到解决问题的方法 我猜问题在于GridLayout和setSi

我有一个主
JPanel
,其中我使用了其他几个面板。我想在我的面板中添加一个滚动窗格,这样当子面板超出框架时,它们应该可以滚动,但我无法实现这一点

如何实现面板内面板的正确滚动功能

“我的孩子”面板中的代码: 我的主面板中的代码:
我认为你的问题是主面板不可滚动,因此你根本无法滚动


尝试在那里使用JScrollPane并查看以获取有关JScrollPanes的更多信息。还有很多关于其他GUI对象(如框架和面板)的信息,所以我认为您可以找到解决问题的方法

我猜问题在于
GridLayout
setSize
调用。当您调用时,基本上布局管理器将覆盖您的
setSize
call

在下面的示例中,我设置了首选和最小尺寸,滚动窗格工作正常

    JFrame frame = new JFrame("Grids of Grids");

    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(3, 3));
    for(int i = 0; i<9; i++){
        JPanel localGrid = new JPanel();
        localGrid.setMinimumSize(new Dimension(250, 250));
        localGrid.setPreferredSize(new Dimension(250, 250));

        localGrid.setLayout(new GridLayout(5, 5));
        for(int j = 0; j<25; j++){
            localGrid.add(new JLabel("" + i + ":: " + j));
        }
        panel.add(localGrid);
    }
    JScrollPane scroll = new JScrollPane(panel);
    frame.add(scroll);

    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFrame-frame=新的JFrame(“网格的网格”);
JPanel面板=新的JPanel();
panel.setLayout(新网格布局(3,3));

for(int i=0;i将主面板从
FlowLayout
(默认)更改为使用面板的子组件填充可用空间的布局(此处使用
GridLayout
)可以解决此问题

import java.awt.*;
import javax.swing.*;

public class Page1311Test extends JPanel {

    public JScrollPane pane = null;
    public JPanel panel = null;

    /**
     * Create the panel.
     */
    public Page1311Test() {
        setLayout(new GridLayout());
        //JPanel panel = new JPanel(); //shadowed class attribute
        panel = new JPanel(new GridLayout(0, 1, 1, 40));

        for (int ii = 0; ii < 17; ii++) {
            panel.add(new Page13111SubPanel(ii));
        }

        pane = new JScrollPane(panel,
                ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        add(pane);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setExtendedState(frame.MAXIMIZED_BOTH);
        frame.setLocation(0, 0);
        frame.add(new Page1311Test());
        frame.pack();
        frame.setVisible(true);
    }
}

class Page13111SubPanel extends JPanel {

    /**
     * Create the panel.
     */
    public Page13111SubPanel(int num) {
        //setSize(1000, 130); // Don't set sizes using 'magic numbers'
        setLayout(new GridLayout(3, 3, 40, 35));

        add(new JLabel(num + " Vehicle Companies:asdddddddddddddddd1"));
        add(new JLabel("Vehicle Make:"));
        add(new JLabel("Vehicle Model"));
        add(new JLabel("Vehicle Number"));
        add(new JLabel("Vehicle Driver:"));
        add(new JLabel("Vehicle Wheels"));
        add(new JLabel("Vehicle Air Con"));
    }
}
import java.awt.*;
导入javax.swing.*;
公共类页面1311测试扩展JPanel{
public JScrollPane=null;
公共JPanel面板=空;
/**
*创建面板。
*/
公共页1311测试(){
setLayout(新的GridLayout());
//JPanel panel=newjpanel();//阴影类属性
panel=newjpanel(新网格布局(0,1,1,40));
对于(int ii=0;ii<17;ii++){
增补(新的第13111页第(二)子面板);
}
窗格=新的JScrollPane(面板,
ScrollPaneConstants.VERTICAL\u滚动条\u始终,
ScrollPaneConstants.水平滚动条(根据需要);
添加(窗格);
}
公共静态void main(字符串[]args){
JFrame=新JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setExtendedState(frame.MAXIMIZED_两者);
帧设置位置(0,0);
frame.add(新页面1311test());
frame.pack();
frame.setVisible(true);
}
}
类Page13111子面板扩展了JPanel{
/**
*创建面板。
*/
公共页面13111子面板(整数){
//设置大小(1000130);//不要使用“幻数”设置大小
setLayout(新的GridLayout(3,3,40,35));
添加(新JLabel(num+“车辆公司:ASDD1”);
添加(新JLabel(“车辆品牌”);
添加(新JLabel(“车型”);
添加(新JLabel(“车辆编号”);
添加(新JLabel(“车辆驾驶员”);
添加(新JLabel(“车轮”);
添加(新JLabel(“车辆空调”);
}
}

当您尝试此操作时,您会得到什么。您会得到任何滚动条吗?所有面板都可见,但都被切断了。非常感谢andrew thompson…您解决了我的问题…再次感谢
    JFrame frame = new JFrame("Grids of Grids");

    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(3, 3));
    for(int i = 0; i<9; i++){
        JPanel localGrid = new JPanel();
        localGrid.setMinimumSize(new Dimension(250, 250));
        localGrid.setPreferredSize(new Dimension(250, 250));

        localGrid.setLayout(new GridLayout(5, 5));
        for(int j = 0; j<25; j++){
            localGrid.add(new JLabel("" + i + ":: " + j));
        }
        panel.add(localGrid);
    }
    JScrollPane scroll = new JScrollPane(panel);
    frame.add(scroll);

    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
import java.awt.*;
import javax.swing.*;

public class Page1311Test extends JPanel {

    public JScrollPane pane = null;
    public JPanel panel = null;

    /**
     * Create the panel.
     */
    public Page1311Test() {
        setLayout(new GridLayout());
        //JPanel panel = new JPanel(); //shadowed class attribute
        panel = new JPanel(new GridLayout(0, 1, 1, 40));

        for (int ii = 0; ii < 17; ii++) {
            panel.add(new Page13111SubPanel(ii));
        }

        pane = new JScrollPane(panel,
                ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        add(pane);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setExtendedState(frame.MAXIMIZED_BOTH);
        frame.setLocation(0, 0);
        frame.add(new Page1311Test());
        frame.pack();
        frame.setVisible(true);
    }
}

class Page13111SubPanel extends JPanel {

    /**
     * Create the panel.
     */
    public Page13111SubPanel(int num) {
        //setSize(1000, 130); // Don't set sizes using 'magic numbers'
        setLayout(new GridLayout(3, 3, 40, 35));

        add(new JLabel(num + " Vehicle Companies:asdddddddddddddddd1"));
        add(new JLabel("Vehicle Make:"));
        add(new JLabel("Vehicle Model"));
        add(new JLabel("Vehicle Number"));
        add(new JLabel("Vehicle Driver:"));
        add(new JLabel("Vehicle Wheels"));
        add(new JLabel("Vehicle Air Con"));
    }
}