Java 如何滚动我的JPanel

Java 如何滚动我的JPanel,java,swing,Java,Swing,我正在用下面的代码创建一个银行活动列表。窗格是一个JPanel,数组是一个ArrayList,分别包含金额和描述数据。设置是一个小图标,允许您修改每个动作 MouseClass是一个扩展MouseAdapter的类,我创建该类是为了向mouseClicked方法添加“k”索引。我是java gui编程新手。我想知道是否有一个快速的方法来添加一个滚动到我的面板 JLabel[] movement = new JLabel[array.size()]; JLabel[] descri

我正在用下面的代码创建一个银行活动列表。窗格是一个
JPanel
,数组是一个
ArrayList
,分别包含金额和描述数据。设置是一个小图标,允许您修改每个动作

MouseClass
是一个扩展
MouseAdapter
的类,我创建该类是为了向mouseClicked方法添加“k”索引。我是java gui编程新手。我想知道是否有一个快速的方法来添加一个滚动到我的面板

    JLabel[] movement = new JLabel[array.size()];
    JLabel[] description = new JLabel[array.size()];
    JLabel[] data = new JLabel[array.size()];
    JLabel[] setting = new JLabel[array.size()];

    System.out.println(array.size());


    int i = 0;
    for(int k=0; k<array.size(); k++){
        movement[k] = new JLabel("");
        movement[k].setForeground(SystemColor.text);
        movement[k].setFont(new Font("Segoe UI", Font.PLAIN, 20));
        movement[k].setBounds(17, i, 145, 30);
        movement[k].setText(array.get(array.size() - k - 1).getAmount() + "€");
        panel.add(movement[k]);

        description[k] = new JLabel("");
        description[k].setForeground(SystemColor.text);
        description[k].setFont(new Font("Segoe UI", Font.PLAIN, 20));
        description[k].setBounds(187, i, 274, 30);
        description[k].setText(array.get(array.size() - k - 1).getDescription());
        panel.add(description[k]);

        data[k] = new JLabel("");
        data[k].setForeground(SystemColor.text);
        data[k].setFont(new Font("Segoe UI", Font.PLAIN, 20));
        data[k].setBounds(478, i, 145, 30);
        data[k].setText(array.get(array.size() - k - 1).getDate());
        panel.add(data[k]);

        setting[k] = new JLabel();
        setting[k].setIcon(new ImageIcon(List.class.getResource("/it/andreavaiuso/financemanager/images/edit.png")));
        setting[k].setForeground(SystemColor.text);
        setting[k].setFont(new Font("Segoe UI", Font.PLAIN, 20));
        setting[k].addMouseListener(new MouseClass(array.size() - k - 1) {
            @Override
            public void mouseClicked(MouseEvent arg0) {
                Modify mdf = new Modify(this.index);
                mdf.setVisible(true);
                dispose();
            }
        });
        setting[k].setBounds(640, i, 82, 30);
        panel.add(setting[k]);

        i += 40;



    }
JLabel[]移动=新的JLabel[array.size()];
JLabel[]description=新的JLabel[array.size()];
JLabel[]数据=新的JLabel[array.size()];
JLabel[]设置=新的JLabel[array.size()];
System.out.println(array.size());
int i=0;
对于(int k=0;k
我试过使用JScrollPane,但不起作用

我看到很多代码带有
setBounds(…)
,这意味着您使用的是空布局

不要使用空布局。Swing设计用于布局管理器。事实上,滚动窗格仅在与布局管理器一起使用时才起作用,因为滚动窗格需要知道面板的首选大小,以便确定何时使用滚动条


我还建议您也应该使用
JTable
来实现类似的功能。它更高效,因为您不需要为每行数据创建单独的组件。阅读Swing教程中的部分以获取更多信息和示例。

对于您需要的JScrollPane,1个JScrollPane,1个JList和一个DefaultListModel

首先将项目添加到DefaultListModel中,然后将模型添加到JList中,然后生成一个JSCrollPane,并将其作为参数传递给JList

例如:

DefaultListModel model = new DefaultListModel<String>();


JList list = new JList<String>();
model.addElemenet("1");
model.addElemenet("3");
model.addElemenet("2");
list.setModel(model);
JScrollPane scrollPane = new JScrollPane(list);
DefaultListModel=newDefaultListModel();
JList list=新JList();
模型。addElemenet(“1”);
模型。addElemenet(“3”);
模型。addElemenet(“2”);
list.setModel(model);
JScrollPane scrollPane=新的JScrollPane(列表);

Add JScrollPane。将JPanel添加到JScrollPane而不是JFrame。“我尝试了使用JScrollPane,但没有成功!”请将您的尝试添加到代码示例中