大家在使用Swing的JList的時候一定會關心幾個問題常見問題:
1:怎么把JList弄到界面上去
2:怎么往JList上放數據
3:怎么監聽JList里的項的雙擊事件,然后取出數據
4:數據太多,怎么添加滾動條。
這是幾個常用功能,今天在這里做個總結。
=========================================================================
1:怎么把JList弄到界面上去
2:怎么往JList上放數據
這兩個問題十分簡單,我們要把一個JList放在JPanel上,只要設置好JList的數據、大小,就可以直接用JPanel的add方法添加上去。
ListModel jListModel = new DefaultComboBoxModel(new String[] { "張三", "李四" }); //數據模型 JList myJlist = new JList(); myJlist.setModel(jListModel); myJlist.setPreferredSize(new java.awt.Dimension(192, 173)); myPanel.add(myJlist); //直接add
這樣就可以顯示到myPanel上,注意數據模型接收的是Object類型數據。
效果圖:
什么時候你想更新數據,只需要調用JList.setModel(ListModel model)方法設置新的數據即可。
3:怎么監聽JList里的項的雙擊事件,然后取出數據
首先來看看如何監聽雙擊事件:
我們在查API的時候會發現沒有類似C#那種doubleClick事件,而單擊事件我們直接使用addListSelectionListener也可以,但是似乎這個監聽器沒法實現雙擊事件監聽。
那么我們要利用鼠標單擊事件做雙擊事件的判斷,而mouseClicked方法傳入的event正好有一個getClickConunt()方法。
getClickCount
public int getClickCount()
- 返回與此事件關聯的鼠標單擊次數。
-
- 返回:
- 單擊次數的整數值
myJlist.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if(e.getClickCount() == 2){ System.out.println("雙擊"); } } });
這樣就可以完成一次雙擊的判斷。
但是我們怎么拿出來我們雙擊的項的數據呢?這個mouseClicked事件作用域是整個JList。
大家知道事件監聽機制里有一個叫“事件源”的東西,這個東西就是觸發這個事件的源頭。而在這里源頭就是JList。我們可以獲得它,然后再獲得它的已選下標,再獲取數據。
myJlist.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if(e.getClickCount() == 2){ System.out.println("雙擊"); JList myList = (JList) e.getSource(); int index = myList.getSelectedIndex(); //已選項的下標 Object obj = myList.getModel().getElementAt(index); //取出數據 System.out.println(obj.toString()); } } });
這樣就完成了一次雙擊取數據的動作。
4:數據太多,怎么添加滾動條。
這個也很簡單,把JPanel換成JScrollPane即可,但是這時候不再調用add方法,而是調用setViewportView方法
JScrollPane jScrollPane1 = new JScrollPane(); //滾動條panel jScrollPane1.setPreferredSize(new java.awt.Dimension(218, 164)); ListModel jList1Model = new DefaultComboBoxModel(new String[] { "張三","李四","李四","李四","李四","李四","李四","李四","李四","李四","李四" }); JList myJlist = new JList(); myJlist.setModel(jList1Model); //設置數據 jScrollPane1.setViewportView(myJlist); //不能直接add
這樣在數據超出顯示范圍時即可出現滾動條。
效果圖:
最后介紹個學習網站:Here