我有一个 JComboBox,每次从 JComboBox 选择不同的元素时,我想在 JScrollPane 中加载不同的内容。内容由各种数量的 JLabels 和 JTextField 组成。
我做了什么:
JScrollPane scrollPane;
JComboBox combo;
JPanel back = new JPanel(new BorderLayout());
combo = new JComboBox({ "Bird", "Cat", "Dog", "Rabbit", "Pig" });
combo.addActionListener(new AnimalLoader());
scrollPane = showPanel((String) combo.getSelectedItem());
back.add(combo, BorderLayout.NORTH);
back.add(scrollPane, BorderLayout.SOUTH);
back.setVisible(true);
protected JScrollPane showPanel(String name)
{
JPanel contentPanel = new JPanel(new JLabel(name));
scrollPane = new JScrollPane(contentPanel);
return scrollPane;
}
private class AnimalLoader implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
JComboBox cb = (JComboBox) e.getSource();
String selected = (String) cb.getSelectedItem();
scrollPane = showPanel(selected);
}
}
当我选择另一个项目时,我没有设法重新加载不同的 JScrollPane。 仅加载属于 JComboBox 第一项(默认项)的 JScrollPane。
请问我做错了什么吗?
最佳答案
scrollPane = showPanel(selected);
选择项目时不要创建新的滚动 Pane 。相反,您需要更改滚动 Pane 视口(viewport)中包含的面板。也就是说,您的“showPanel”方法应该返回面板,而不是滚动 Pane 。然后你可以使用:
scrollPane.setViewportView( showPanel(selected) );
下次应该发布适当的 SSCCE。
关于java - 从 JComboBox 中选择元素后如何刷新 JScrollPane?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5289274/