java - 从 JComboBox 中选择元素后如何刷新 JScrollPane?

标签 java swing jcombobox

我有一个 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/

相关文章:

java - 将 JComboBox 嵌入 JRadioButtonMenuItem 中

java - Weblogic 管理控制台未启动

java - Hibernate @OneToOne 与父类(super class),仅在连接时检索父类(super class)字段

java - 学习 GUI - 使用 actionPerformed() 处理按钮操作

java - 使用 GridBagLayout 将 JButton 设置在 TextArea 下方

java - xml DOM-换行符在 java DOM 解析器中添加文本/属性内容两次

java - JPackage 仅返回 Java 14 上的 SDK 版本号

java - System.currenTimeInMillis() 与 System.nanoTime()

Java:将默认 Swing 方向更改为 RTL

java - 每当我在 JTextField 中写入时,Swing java JComboBox 就会消失