Java 我想在一个滚动窗格中使用一个BoxLayout,它有一个面板的ArrayList

Java 我想在一个滚动窗格中使用一个BoxLayout,它有一个面板的ArrayList,java,swing,jpanel,boxlayout,Java,Swing,Jpanel,Boxlayout,当我将输出面板设置为BoxLayout时,面板消失。但是,滚动条显示ArrayList中的“我的面板”位置正确。 我对Java完全是新手,所以如果有任何评论,我将不胜感激 import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.util.*; import javax.swing.*; public class gui extends JFrame{ int c

当我将输出面板设置为BoxLayout时,面板消失。但是,滚动条显示ArrayList中的“我的面板”位置正确。 我对Java完全是新手,所以如果有任何评论,我将不胜感激

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.util.*;
import javax.swing.*;

public class gui extends JFrame{

    int ctr=0, top=5;
    public List<JPanel> o_panels = new ArrayList<JPanel>(); //Your List    

    public gui(){
        super("MCC");
        setLayout(null);
        //Output panel for the results
        JPanel outpanel = new JPanel();
        outpanel.setBackground(Color.blue); 
        outpanel.setVisible(true);
        outpanel.setLayout(new BoxLayout(outpanel, BoxLayout.PAGE_AXIS));           
        //Scroll pane
        JScrollPane scrollPane = new JScrollPane(outpanel,
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);            
        scrollPane.setBounds(0,0,780,400);
        add(scrollPane);            
        //result panel
        //creating and adding panels in to the array list
        while(ctr<=4){
            JPanel label1 = new JPanel();
            label1.setPreferredSize(new Dimension(600,100));
            o_panels.add(label1);
            outpanel.add(o_panels.get(ctr));        
        ctr++;
        }
    }

    public void runGui(){
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(800,600);
        this.setVisible(true);
        this.setResizable(false);
        //i call this on the other class
    }
}
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.util.*;
导入javax.swing.*;
公共类gui扩展JFrame{
int ctr=0,top=5;
public List o_panels=new ArrayList();//您的列表
公共图形用户界面(){
超级(“MCC”);
setLayout(空);
//结果的输出面板
JPanel outpanel=新的JPanel();
外板退台(颜色:蓝色);
outpanel.setVisible(真);
outpanel.setLayout(新的BoxLayout(outpanel,BoxLayout.PAGE_轴));
//滚动窗格
JScrollPane scrollPane=新的JScrollPane(输出面板,
JScrollPane.VERTICAL\u滚动条\u始终,
JScrollPane.水平滚动条(根据需要);
滚动窗格.立根(0,0780400);
添加(滚动窗格);
//结果小组
//在阵列列表中创建和添加面板

虽然(ctr代码没有太多错误,但问题是,您还没有建立任何方法来查看您添加的内容

看看这个

while (ctr <= 4) {
    JPanel label1 = new JPanel();
    label1.setPreferredSize(new Dimension(600, 100));
    o_panels.add(label1);
    outpanel.add(o_panels.get(ctr));
    ctr++;
}
也看看


你真的应该避免使用
null
布局,像素完美的布局在现代ui设计中是一种错觉。影响组件个体大小的因素太多了,你无法控制。Swing设计的核心是布局管理器,丢弃它们将导致无止境的问题和问题您将花费越来越多的时间试图纠正的问题

尝试使用其他布局管理器。与FlowLayout类似。避免使用
null
布局,像素完美布局在现代ui设计中是一种幻觉。有太多的因素会影响组件的单个大小,您无法控制。Swing设计为rk以布局管理器为核心,丢弃这些将导致无止境的问题,您将花费越来越多的时间试图纠正这些问题。我觉得自己太笨了……同时也感谢MadProgrammer提供了关于布局的更多信息(这是我经常遇到的问题).干杯^ ^欢迎来到我的世界:Plol,我想我会借此机会向您索要一个链接,该链接将解释ContentPane以及它在应用程序界面中的重要性。.tnx提前。:)简短的回答是,请看一看,这应该会让您更了解它是如何结合在一起的
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.LineBorder;

public class Test extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }
                Test test = new Test();
                test.runGui();
            }
        });
    }

    int ctr = 0, top = 5;

    public List<JPanel> o_panels = new ArrayList<JPanel>(); //Your List

    public Test() {
        super("MCC");
        //Output panel for the results
        JPanel outpanel = new JPanel();
        outpanel.setBackground(Color.blue);
        outpanel.setVisible(true);
        outpanel.setLayout(new BoxLayout(outpanel, BoxLayout.PAGE_AXIS));

        //Scroll pane
        JScrollPane scrollPane = new JScrollPane(outpanel,
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        scrollPane.setBounds(0, 0, 780, 400);
        add(scrollPane);

    //result panel
        //creating and adding panels in to the array list
        while (ctr <= 4) {
            JPanel label1 = new JPanel();
            label1.setPreferredSize(new Dimension(600, 100));
            label1.setBorder(new LineBorder(Color.RED));
            o_panels.add(label1);
            outpanel.add(o_panels.get(ctr));
            ctr++;
        }
    }

    public void runGui() {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        this.setVisible(true);
//        this.setResizable(false);
        setLocationRelativeTo(null);
    }
}