提问者:小点点

JScrollPane中未显示Contiainer


我有一个JScrollPanel,它将填满用户添加的按钮。 当前,用户创建了一个新按钮,并将其添加到JScroll窗格内的容器中,但没有显示任何内容。 这是因为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);

向容器添加新的JButtons


            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;

共1个答案

匿名用户

scrollPane.add(contractContainer);

不要向JScrollPane添加组件。 需要将组件添加到SCollPane的视口中。 这可以通过以下两种方式之一实现:

scrollPane = new JScrollPane( contractContainer );

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

我将使用第一种方式,除非您动态更改视口中的组件。

那么当您将组件添加到可见gui时,代码将是:

contractContainer.add(a);
contractContainer.revalidate();
contractContainer.repaint();