从 JScrollPane 中删除和替换组件时出现问题

Problems removing and replacing components from JScrollPane

我在更改 JScrollPane 组件时遇到问题。我有一个名为 textFields 的 ArrayList,我想从中获取元素并添加到我的 scrollPane。

有人可以帮助我吗?我似乎无法删除 scrollPane 的元素或似乎无法从 ArrayList 添加其他文本字段。这是我的方法::

private void resetJSPComponents()
   {
     
      scrollPane.removeAll();
      for(int a = 0; a < 5; a++)
      {   
        JTextField jTF = textFields.get(a); 
       scrollPane.add(jTF);  
      }
      
      scrollPane.revalidate();
      scrollPane.repaint();
      
   }

我知道您有更好的解决方案,但对于将来使用 JScrollPane 时,这里是您最初问题的答案。

Problems removing and replacing components from JScrollPane

  scrollPane.removeAll();
  for(int a = 0; a < 5; a++)
  {   
    JTextField jTF = textFields.get(a); 
   scrollPane.add(jTF);  
  }

从不 remove/add 组件到滚动窗格。滚动窗格是一个复杂的组件,包含许多 child 个组件:

  1. horizontal/vertical 滚动条
  2. column/row headers
  3. 一个视口

要更改滚动窗格中显示的内容,您需要在视口中重置组件。

所以在你的例子中你会:

  1. 为所有 child 组件创建一个 JPanel
  2. 将文本字段添加到此面板

然后你使用:

scrollPane.setViewportView( panel );

就是这样。无需使用 removeAll() 方法或 revalidate() 和 repaint() 滚动窗格。