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

由于JPanel没有调整大小,JScrollPane没有反应

鱼恩
2023-03-14

我有一个cardlayout JPanel,里面是一个JScrollPane,里面是一个springlayout JPanel。springlayout JPanel从上到下动态添加JPanel,但是当JButtons超出JPanel时,JScrollPane无法容纳额外的内容。此外,尽管添加了内容,springlayout JPanel的高度仍然保持为0。将Resizeable属性设置为true也不会起任何作用。

这是一个代码片段。我省略了cardlayout JPanel和代码切换卡。

    SpringLayout mainlayout = new SpringLayout();
    JPanel maincard = new JPanel(mainlayout); // springlayout JPanel
    for (int i = 0; i < info.size(); i++) {
        GridLayout entryLayout = new GridLayout(1, 1);
        JPanel entry = new JPanel(entryLayout);
        entry.setSize(800, 30);

        JButton name = new JButton();
        name.setSize(250, 30);
        name.setText(info.get(i).name);

        entry.add(name);

        mainlayout.putConstraint(SpringLayout.NORTH, entry,
                 i * 100 + 5,
                 SpringLayout.NORTH, maincard); // moves JPanel lower and lower
        maincard.add(entry);
    }
    maincard.setSize(width, 30 * (info.size() + 1));
    maincard.revalidate();
    JScrollPane scroll = new JScrollPane(maincard);
    scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    scroll.setSize(200, 200); // this and setPreferredSize don't affect
    cardpanel.add(scroll, cardName);
    cardpanel.setSize(20, 200); // no effect

共有1个答案

沃宇
2023-03-14

我自己也有一些问题。对我有用的是使用边框布局。在添加新元素后,您需要调用重新验证,以便更新滚动面板。

下面是我不久前在项目中使用的代码示例:

public BookingTable()
{
    super(new BorderLayout());
    _contentPanel = new JPanel();
    _contentPanel.setLayout(new BoxLayout(_contentPanel, BoxLayout.Y_AXIS));
    _scrollPane = new JScrollPane(_contentPanel);

    add(_scrollPane, BorderLayout.CENTER);
}

private void addToPanel(EntryView panel)
{
    panel.setPreferredSize(new Dimension(150, 35));
    panel.setMaximumSize(new Dimension(160, 45));
    panel.setMinimumSize((new Dimension(80, 30)));   

    _contentPanel.add(panel);
    _contentPanel.revalidate();
}

希望这对你有帮助!另一个技巧是,如果您从滚动窗格中删除元素,您需要调用Repaint,以便从UI中实际删除元素,如果您不这样做,它们将保持可见,直到您在其上绘制。

 类似资料:
  • 我似乎无法调整这个iframe的大小 为了简单起见,我没有包括几个包装div,因为它们只用于样式。然而,上面的两个外部div位于flexbox的div中,因此它们是水平显示的,而不是占据整个水平空间。我将内容div设置为100%的宽度,第一个div设置为固定宽度。如你所见,iframe也从硬编码的固定宽度/高度开始。还要注意,重置iframe的src在js函数中起作用,而不是宽度和高度。 谢谢你

  • 我一直在尝试学习按钮,但它拒绝调整大小。按钮1(下面的代码)只占据了整个屏幕。我看到其他帖子的问题是他们没有使用 但是我正在使用它,它仍然不工作!我还没有制作JPanel。这是我的JFrame: 我的主要课程简单明了:

  • 作为学习的一部分,我在一个简单的swing应用程序中制作了一个JPanel。我把它弄得没装饰。现在只显示了一个JPanel。我应用了组件移动和添加关闭按钮到这个面板,但面板的大小是固定的。 如何使JPanel可调整大小? 包X;公共类TestRun扩展javax.swing.jframe{ }

  • 使用Java,我用GridBagLayout创建一个表单。GUI在一个J面板中,它在一个添加到JFrame的scrollPane中。 我希望带有GUI的JPanel的大小是固定的,以防止表单被拉伸,但是,我希望JScrollPanel可以根据用户的喜好调整大小。(类似于MS Paint,画布是我的JPanel)。我想要防止表单被拉伸的原因是因为我希望它能够打印,并且从我现在的方式来看,打印的表单几

  • 起初,我只有文本栏和状态栏,如下例所示(我不需要父容器): 这是应该的。但是,请记住状态栏的高度。现在,如果您将StatusBar类更改为下面的类,那么高度几乎会增加一倍。为什么会这样? 这种设置并不需要更多的垂直空间: 我可以让这成为一个新问题,但我觉得不值得...

  • 问题内容: 我想要实现以下目标: 我能获得的最接近的是以下(伪)代码: 每当我想添加组件时,就将它们添加到内部容器中: ....等 我面临以下问题: 我让布局管理器负责所有UI元素的大小。所以最好不要使用任何.setxxSize()方法。一个JTextArea,包含大量文本,将使用所有需要的空间(垂直和水平)。完全没问题。每当调整框架的大小时,JTextArea都会增长,这仍然是可以的。但是每当我