带“的可滚动JPanel”;卡片“;在java中使用it

带“的可滚动JPanel”;卡片“;在java中使用it,java,swing,jpanel,jscrollpane,Java,Swing,Jpanel,Jscrollpane,我正在为我的学校项目开发一个java应用程序。我需要在容器中显示“卡片”列表。如果卡的数量超过3,则由于容器的大小,以下卡将不可见:有问题的卡列表: 所以我尝试使用JScrollPane,因为它似乎是解决方案。 但我没有成功地使面板可滚动。有什么想法吗 import javax.swing.*; 导入java.awt.*; 导入java.awt.event.*; 导入java.util.*; 公共类FenetReprincipaleJFrame实现ActionListener、MouseLis

我正在为我的学校项目开发一个java应用程序。我需要在容器中显示“卡片”列表。如果卡的数量超过3,则由于容器的大小,以下卡将不可见:有问题的卡列表:

所以我尝试使用JScrollPane,因为它似乎是解决方案。 但我没有成功地使面板可滚动。有什么想法吗

import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.*;
公共类FenetReprincipaleJFrame实现ActionListener、MouseListener{
LinkedList CartesFadelite;//列出fidélités的点菜
JPanel公司;
摩根大通;
JScrollPane滚动窗格;
公共FenetrePrincipale(链接列表c){
cartesFidelite=c;//卡片列表
//窗口
setTitle(“点菜指南”);
立根(0,0,1195722);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
此参数为.setresizeable(false);
//集装箱干管
containerMain=newjpanel();
containerMain.setLayout(空);
集装箱箱底(颜色:白色);
//集装箱卡清单
contennerCarte=新JPanel();
contennerCarte.setLayout(空);
背景(新颜色(242242));
contennercote.setboorder(BorderFactory.createLineBorder(新颜色(199));
scrollPane=新的JScrollPane(contennerCarte);
滚动窗格.立根(34,90,377550);
containerMain.add(滚动窗格);
以下是显示卡片的方法:

公共无效刷新列表卡(){
contennerCarte.removeAll();
int i=0;
对于(Carte e:CartesFadelite){
e、 设定位置(15,(15+i*(172+15));
增加(e);
e、 addMouseListener(这个);
i++;
}
contennerCarte.updateUI();
}

感谢您的帮助:)

不要使用空布局

Swing设计用于布局管理器

特别是,如果不使用布局管理器,JScrollPane将无法工作

另外,不要调用updateUI()。如果从面板添加/删除组件,则使用:

panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint(); 
这将依次调用布局管理器


阅读关于

的Swing教程,在课堂上我们学习使用空布局。我想继续使用它,有没有办法使面板可以滚动?然后你应该学习另一门课。正如我前面所说的,Swing设计用于布局管理器,所以你应该学习使用Swing的正确方法。你不需要这样做“忘却”一些东西。你写的任何代码实际上都是在写布局管理代码,所以为什么不利用现有的API而不是重新发明轮子呢。