容器未显示在 JScrollPane 中
Container not displaying in JScrollPane
我有一个 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;
scrollPane.add(contractContainer);
不要向 JScrollPane 添加组件。该组件需要添加到 scollpane 的 viewport
。这可以通过以下两种方式之一完成:
scrollPane = new JScrollPane( contractContainer );
或
scrollPane = new JScrollPane();
scrollPane.setViewportView( contractContainer );
除非您动态更改视口中的组件,否则我会使用第一种方式。
然后当您将组件添加到可见的 gui 时,代码将是:
contractContainer.add(a);
contractContainer.revalidate();
contractContainer.repaint();
我有一个 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;
scrollPane.add(contractContainer);
不要向 JScrollPane 添加组件。该组件需要添加到 scollpane 的 viewport
。这可以通过以下两种方式之一完成:
scrollPane = new JScrollPane( contractContainer );
或
scrollPane = new JScrollPane();
scrollPane.setViewportView( contractContainer );
除非您动态更改视口中的组件,否则我会使用第一种方式。
然后当您将组件添加到可见的 gui 时,代码将是:
contractContainer.add(a);
contractContainer.revalidate();
contractContainer.repaint();