2011-03-13 56 views
0

我有一個JComboBox,我想在JScrollPane中加載一個不同的內容,每次我從JComboBox中選擇一個不同的元素。內容由各種數量的JLabel和JTextFields組成。如何在從JComboBox中選擇元素後刷新JScrollPane?

我做了什麼:

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被加載。

任何想法,我做錯了,請嗎?

+1

爲了更好地幫助越早,後期的SSCCE(http://pscode.org/sscce的.html)。 – 2011-03-13 12:37:50

回答

2
scrollPane = showPanel(selected);  

當您選擇一個項目時,不要創建新的scoll窗格。相反,您需要更改滾動窗格的視口中包含的面板。也就是說,你的「showPanel」方法應該返回面板,而不是一個滾動窗格。然後您可以使用:

scrollPane.setViewportView(showPanel(selected)); 

下一次應該發佈正確的SSCCE。

+0

謝謝camickr,你的答案永遠不會失敗。下次我會發布更好的SSCCE。 – radonys 2011-03-14 09:20:21

1

沒有證據顯示新創建的JScrollPane添加到任何東西。

我會嘗試任何一種:

  1. 用CardLayout添加一個JPanel來 JScrollPane的,並添加組件的其他 收集到 的JPanel。
  2. 調用 setViewportView(組件視圖) 現有的JScrollPane。
+0

JScrollPane在創建後添加到JPanel。我沒有發佈所有的代碼,因爲它是一個複雜的應用程序。我已經完成了你所說的。 'JPanel centerPanel;centerPanel = new JPanel(new JLabel(「Test」)); productsPane = new JScrollPane(centerPanel);' – radonys 2011-03-13 12:52:41

+0

我遵循JComboBoxes上的sun示例http://download.oracle.com/javase/tutorial/uiswing/components/combobox.html#uneditable – radonys 2011-03-13 12:55:37

+1

然後您需要發佈信息足夠的信息,所以你的問題是可以回答的。安德魯在他上面對你的帖子的第一條評論中提到,[SSCCE](http://sscce.org)會很好地完成。 – 2011-03-13 13:00:22

0

panel.revalidate();
panel.repaint();

0

當你使用這個example,嘗試行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

謝謝......問題已經解決如上。 – radonys 2011-03-14 09:21:26