java - 如何滚动我的 JPanel

标签 java swing

SCREENSHOT

我正在使用以下代码创建银行变动列表。 pane 是一个 JPanel,array 是一个 ArrayList,分别包含数量和描述数据。设置是一个小图标,允许您修改每个 Action 。

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;



    }

但我不知道如何滚动它。我已经尝试过 JScrollPane 但不起作用! 我确信有一种最简单的方法可以将这些项目添加到我的面板中...

最佳答案

I've tried woth JScrollPane but don't work!

嗯,我看到很多带有 setBounds(...) 的代码,这意味着您正在使用空布局。

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

我还建议您也应该使用 JTable 来完成类似的事情。它更加高效,因为您不需要为每行数据创建单独的组件。阅读 Swing 教程中关于 How to Use Tables 的部分了解更多信息和示例。

关于java - 如何滚动我的 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41494946/

相关文章:

java - 聊天 GUI 的组件选择

java - java GUI 的问题。我无法在 JLabel 中显示 JRadioButtons

java - XML 解析异常 org.xml.sax.SAXParseException cvc-elt.1

java - 尝试登录会生成 java.lang.NoClassDefFoundError 和 java.lang.ClassNotFoundException 错误

java - 为什么线程会在我的 actionListener 实现中卡住我的代码?

java - 设置 Swing BorderLayout 侧面板的最小宽度

java - 在 JPanel 中重置图形

java - Openjpa锁不起作用

java - 从按钮组中获取所选单选按钮的名称

java - 如何模拟 REST 请求