当前位置: 首页 > 知识库问答 >
问题:

JScrollPane包含JPanel,其中包含动态生成的较小面板-显示为空

戎永福
2023-03-14

我有一个JScrollPane,叫它jsp。我想用动态生成的字符串列表填充这个滚动窗格。为此,我创建了一个JPanel“pane”,并使用GridBagLayout(用于仅垂直列表)向其中插入了几个扩展JPanel的MiniGUI(按照我希望的输出格式进行格式化)。

当我加载程序时,jsp显示为空。我以前用JTextAreas(而不是MiniGUI)以同样的方式填充它,它工作得很好,但是JTextArea被证明在格式化方面很糟糕。我需要在MiniGUI中插入一些小图片(稍后),不用说使用JTextAreas是不可能做到的,所以我无法摆脱MiniGUI。

我似乎在网上找不到答案,所以如果有人能帮忙,那就太好了。我检查了这个问题:如何使JScrollPane与嵌套的JPanel一起正常工作?,但缩小MiniGUI的大小并没有奏效,我已经在使用重新验证。

我已经发布了我的代码。JScrollPane约为250x500。

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class MiniGUI extends JPanel {
public MiniGUI(String str1, String str2) {
    this.setLayout(null);
    this.setSize(new Dimension(250, 95));
    this.setVisible(true);

    JLabel lbl1 = new JLabel(str1);
    lbl1.setOpaque(true);
    lbl1.setVerticalAlignment(SwingConstants.TOP);
    lbl1.setBackground(Color.WHITE);
    lbl1.setBounds(0, 0, 234, 64);
    this.add(lbl1);

    JLabel lbl2 = new JLabel(str2);
    lbl2.setHorizontalAlignment(SwingConstants.RIGHT);
    lbl2.setOpaque(true);
    lbl2.setBackground(Color.WHITE);
    lbl2.setVerticalAlignment(SwingConstants.TOP);
    lbl2.setBounds(86, 63, 148, 21);
    this.add(lbl2);

    this.setBackground(Color.WHITE);

    // To be set later:
    // ImagePanel panel = img; //img passed as parameter, image panel is a class i made
    // if (img == null)
    // return;
    // panel.setBounds(0, 0, 108, 89);
    // this.add(panel);
}

以及填充滚动窗格 jsp 的html" target="_blank">函数:

public void fillScrollPane() {
    JPanel pane = new JPanel();
    GridBagLayout expLayout = new GridBagLayout();
    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 1;
    c.weighty = 0;
    c.gridx = 0;
    c.gridy = 0;
    pane.setLayout(expLayout);
    ArrayList<Triplet> content = this.C2.getAL(); //C2 is another class i have, getAL returns ArrayList, Triplet is just 3 strings
    for (int i = 0; i < content.size(); i += 1) {
        MiniGUI x = new MiniGUI(content.get(i).first,
                content.get(i).second + " " + content.get(i).third); //setVisible is in minigui class
        pane.add(x, c);
        pane.revalidate();
        c.gridy += 1;
    }
    MiniGUI end = new MiniGUI("", "");
    c.weighty = 1;
    pane.setBackground(Color.WHITE);
    pane.add(end, c);
    pane.setVisible(true);
    jsp.setViewportView(pane);
    jsp.revalidate();
}

共有1个答案

胡志
2023-03-14

1)对于< code>MiniGUI,您可以使用< code>setPreferredSize()而不是< code>setSize(),因为< code>setSize()仅适用于空布局,但是您可以在< code>GridBagLayout的帮助下将< code>MiniGUI添加到< code >窗格中,因此替换该代码即可使用。

2)不要在你的MiniGUI中使用this.setLayout(null)。尝试使用LayoutManager,例如FlowLayout或BorderLayout,您的代码也可以正常工作。

阅读有关 LayoutManager 的更多信息。

此外,您不需要为每次添加重新验证()容器,在添加所有组件时执行此操作。

 类似资料:
  • 我有一个JScrollPane,其中包含一个JPanel,该JPanel包含一组JPanels。 集合大小可以更改,这就是为什么我把它放在JScrollPane中的原因。 由于某种原因,无论我做什么,旋钮都不会出现在卷轴上。 正如您所看到的,主JPanel(预览)确实有一个布局。我读到如果布局为空,可能会发生这种情况。 有人知道怎么解决这个吗? null 这是我的代码:

  • 我有一个JFrame(黑色)包含一个主JPanel(灰色),这个JPanel包含另外三个JPanels:North和South(红色)以及Center(蓝色)。中央的蓝色JPanel将在程序过程中动态添加大量的JPanel(绿色)。当中心JPanel已满时,我希望一个JScrollbar自动出现,向下滚动中心面板,并看到它包含的所有子(绿色)面板。谁能帮帮我吗?问题是滚动条根本没有出现,如果我在蓝

  • 问题内容: 在Java应用程序中使用时,我遇到了一个小问题。 我有一个。这被动态地与按钮(垂直排序),其可以是任何宽度的更新。的自动调整其宽度最大的部件内部。 现在,当出现垂直滚动条时,它会占用my右侧的一些空间,这将导致最大的按钮无法完全显示。除了显示整个按钮之外,我不想使用水平滚动条。 当滚动条出现时,是否有办法调整我的大小,使其很好地显示在我的按钮旁边?还是有其他方法可以使滚动条出现在我的旁

  • 问题内容: 为什么此代码不起作用? 我总是会出错。我已经启用,并且在php.ini中也是128M。如果我删除,我不会收到错误,但也不会看到图像。我所看到的是这个:- £ ,` 问题答案: 您不得在之前输出任何内容 。只需以(作为第一个文件字符)开头,然后是用于显示图像的代码即可。跳过HTML标签。 甚至不要在 header() 之前写一个空白行 。 如果要在您的html文档中显示图像,则必须在两个

  • 如何在Thymeleaf中显示包含HTML标记的字符串? 所以这段代码: 在这行代码中,它会在浏览器上生成以下内容: 但是我想在浏览器上显示这个: 测试

  • 问题内容: 我正在使用SASS的SCSS语法来创建动态网格系统,但是遇到了麻烦。 我试图像这样使网格系统完全动态: 然后我创建像这样的列: 哪个输出: 这很好用,但是 我接下来要做的是根据选择的$ columns的数目动态生成一列由逗号分隔的长列类 -例如,我希望它看起来像这样: 我已经累了: 但是输出是这样的: 我对这里的逻辑以及创建这样的东西所需的SCSS语法有些困惑。 有人有什么想法吗? 谢

  • 我有一个基本的JFrame--它包含一个JTable(由NetBeans swing GUI builder自动添加的JScrollPane包围,我希望保留滚动窗格)。 当从按钮单击实例化框架时,JTable中的行数可能会根据它是从哪个按钮打开的而改变。我想调整JTable的大小,这样如果只有2行,它就不会因为有额外的空间而看起来很傻。包含JTable的JScrollPane似乎是给我带来问题的原