Как я могу обновить JScrollPane после выбора элемента из JComboBox? - PullRequest
0 голосов
/ 13 марта 2011

У меня есть JComboBox, и я хочу загружать в JScrollPane разное содержимое каждый раз, когда я выбираю другой элемент из JComboBox.Содержимое состоит из различного числа JLabels и JTextFields.

Что я сделал:

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, когда я выбираю другой элемент.Загружается только JScrollPane, который принадлежит первому элементу (элемент по умолчанию) JComboBox.

Любые идеи о том, что я сделал неправильно, пожалуйста?

Ответы [ 4 ]

2 голосов
/ 13 марта 2011
scrollPane = showPanel(selected);     

Не создавайте новую панель прокрутки при выборе элемента. Вместо этого вам нужно изменить панель, которая содержится в области просмотра панели прокрутки. То есть ваш метод showPanel должен возвращать панель, а не полосу прокрутки. Тогда вы можете использовать:

scrollPane.setViewportView( showPanel(selected) );

В следующий раз будет опубликован правильный SSCCE.

1 голос
/ 13 марта 2011

Нет никаких свидетельств того, что недавно созданный JScrollPane когда-либо добавлялся к чему-либо.

Я бы попробовал одно из:

  1. Добавить JPanel с CardLayout в JScrollPane и добавитьдругие коллекции компонентов для JPanel.
  2. Вызовите setViewportView (представление компонентов) на существующей JScrollPane.
0 голосов
/ 13 марта 2011

Поскольку вы используете этот пример , попробуйте этот вариант в строке 73 рядом с концом конструктора ComboBoxDemo:

//Lay out the demo.
add(petList, BorderLayout.PAGE_START);
JScrollPane jsp = new JScrollPane(picture);
jsp.getViewport().setPreferredSize(new Dimension(100, 100));
add(jsp, BorderLayout.PAGE_END);
setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
0 голосов
/ 13 марта 2011

panel.revalidate ();panel.repaint (); * +1001 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...