容器在JScrollPane中不显示。

问题描述 投票:0回答:1

我有一个 JScrollPane 的容器,该容器将被用户添加的按钮填满。目前,用户创建了一个新的按钮,并将其添加到滚动窗格内的容器中,但没有任何显示。

这是因为滚动窗格已经被显示了吗?

启动滚动窗格和容器。

newHeading.addActionListener(this);
newHeading.setActionCommand("newHeading");

contractContainer.setLayout(new BoxLayout(contractContainer, BoxLayout.Y_AXIS));

scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.add(contractContainer);

contractHeadingPanel.setLayout(new BorderLayout());
contractHeadingPanel.add(newHeading, BorderLayout.SOUTH);
contractHeadingPanel.add(scrollPane, BorderLayout.CENTER);

contractHeadingFrame.setSize(200, 400);
contractHeadingFrame.setAlwaysOnTop(true);
contractHeadingFrame.add(contractHeadingPanel);
contractHeadingFrame.setVisible(true);

添加新按钮 JButton 组件到容器中。

case "newHeading":
    // Adds new details section
    headingDetails.add(new String[0][0]);
    // Adds title to list
    headingTitles.add(JOptionPane.showInputDialog(this, "Heading title:"));
    // Sets up and adds button to container
    JButton a = new JButton(headingTitles.get(headingTitles.size()-1));
    a.addActionListener(this);
    contractContainer.add(a);
    Log.logLine(this.getClass(), "Adding new Heading under " + a.getText());
    // Adds Heading title to list
    headingTitles.add(a.getText());

    scrollPane.revalidate();
    repaint();
    break;
java swing containers jbutton jscrollpane
1个回答
3
投票
scrollPane.add(contractContainer);

不要在JScrollPane中添加组件。组件需要添加到JScrollPane中。viewport 的。这可以通过两种方式之一来实现。

scrollPane = new JScrollPane( contractContainer );

scrollPane = new JScrollPane();
scrollPane.setViewportView( contractContainer );

我会使用第一种方法,除非你在视口中动态地改变组件。

然后,当你在可见的gui中添加一个组件时,代码将是。

contractContainer.add(a);
contractContainer.revalidate();
contractContainer.repaint();
© www.soinside.com 2019 - 2024. All rights reserved.