【问题标题】:Scrollable JPanel with "cards" in it in javajava中带有“卡片”的可滚动JPanel
【发布时间】:2021-06-21 13:22:14
【问题描述】:

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

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

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

public class FenetrePrincipale extends JFrame implements ActionListener,MouseListener{

  LinkedList<Carte> cartesFidelite; //Liste des cartes de fidélités
  
  JPanel conteneurCarte;
  JPanel monConteneurMain;
  JScrollPane scrollPane;

  public FenetrePrincipale(LinkedList<Carte> c){
    cartesFidelite=c; //List of cards

    //Window
    setTitle("Gestionnaire de cartes");
    setBounds(0, 0, 1195,722);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setResizable(false);

    //CONTAINER Main
    containerMain = new JPanel();
    containerMain.setLayout(null);
    containerMain.setBackground(Color.white);

    //CONTAINER List of cards
    conteneurCarte = new JPanel();
    conteneurCarte.setLayout(null);
    conteneurCarte.setBackground(new Color(242,242,242));
    conteneurCarte.setBorder(BorderFactory.createLineBorder(new Color(199,199,199)));
  
    scrollPane = new JScrollPane(conteneurCarte);
    scrollPane.setBounds(34, 90, 377,550);
    containerMain.add(scrollPane);

这是显示卡片的方法:

public void refreshListCard (){
conteneurCarte.removeAll();
  int i = 0;
  for(Carte e : cartesFidelite){
    e.setLocation(15,(15+i*(172+15)));
    conteneurCarte.add(e);
    e.addMouseListener(this);
    i++;
  }
  conteneurCarte.updateUI();
}

感谢您的帮助:)

【问题讨论】:

    标签: java swing jpanel jscrollpane


    【解决方案1】:

    不要使用空布局!

    Swing 旨在与布局管理器一起使用。

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

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

    panel.remove(...);
    panel.add(...);
    panel.revalidate();
    panel.repaint(); 
    

    这将反过来调用布局管理器。

    阅读 Layout Managers 上的 Swing 教程

    【讨论】:

    • 在课堂上我们学习使用空布局。我想继续使用它,有什么方法可以让面板滚动吗?
    • 那你应该再上一堂课。正如我之前所说的,Swing 旨在与布局管理器一起使用,因此您应该学习使用 Swing 的正确方法。你不应该需要“忘记”一些东西。您编写的任何代码都将有效地编写布局管理代码,所以为什么不利用现有的 API 而不是重新发明轮子。
    猜你喜欢
    • 1970-01-01
    • 2016-01-26
    • 2021-06-03
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多