Java圖形用戶界面之列表框。本站提示廣大學習愛好者:(Java圖形用戶界面之列表框)文章只能為提供參考,不一定能成為您想要的結果。以下是Java圖形用戶界面之列表框正文
列表框經由過程Swing組件JList發生,其老是在屏幕上占領固定行數的空間。假如要獲得列表框中被選中的元素,只需挪用getSelectedValuesList(),它可以發生一個字符串數組,內容為被選中的元素稱號。JList組件許可多重選擇;假如按住Ctrl鍵,可以選中一切點擊的元素;假如選中一個元素,按住Shift鍵並單擊另外一個元素,那末這兩個元素之間的一切元素都被選中;要從選中的元素中去失落一個,按住Ctrl鍵單擊該元素便可。
初始化列表框後,接著就是向列表框添加和修正內容。分為靜態操作和靜態操作。
1、靜態操作
靜態操作就是將一切元素同時添加到JList中,添加後不克不及修正,不克不及刪除,即在法式履行進程中不克不及操作列表框。
E.g.
package test; import javax.swing.*; import java.awt.*; import static net.mindview.util.SwingConsole.*; public class ListTest1 extends JFrame{ private String[] str = {"Monday","Tuesday","Wednesday","Thursday","Friday","Staturday","Sunday"}; private JList list;public ListTest1() { list = new JList(str); setLayout(new FlowLayout()); add(list); } public static void main(String[] args) { run(new ListTest1(),200,100); } }
如上例,只需在初始化JList時將一切元素添加出來便可。
履行成果:列表框弗成以被操作。
2、靜態操作
經由過程檢查JList的辦法,可以發明JList不擔任列表框的靜態操作,一切的靜態操作的細節可以在“列表模子”即DefaultListModel中完成,只需將該列表模子參加JList便可。
DefaultListModel listmodel = new DefaultListModel(); listmodel.addElement(element1);//添加元素 listmodel.clear();//消除全體元素 listmodel.remove(int index);//消除指定地位的元素
E.g.
package test; import java.awt.*;import java.awt.event.*;import static net.mindview.util.SwingConsole.*; import javax.swing.*; import javax.swing.border.Border; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; public class ListTest extends JFrame{ private String[] str = {"Monday","Tuesday","Wednesday","Thursday","Friday","Staturday","Sunday"}; private JButton button1 = new JButton("Add Item"), button2 = new JButton("Clear Item"); private JTextArea text = new JTextArea(str.length,20); private DefaultListModel listmodel = new DefaultListModel(); private JList list = new JList(listmodel); //將列表模子參加JList,列表模子擔任完成靜態操作,JList擔任創立列表和很多其它任務(如多重選擇)。 private int count = 0; private boolean flag = false; public ListTest() { text.setEditable(false);//只是用來顯示,不克不及編纂 for(int i = 0;i<4;i++) { listmodel.addElement(str[count++]); } button1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { if(count<str.length) { listmodel.addElement(str[count++]); }else { button1.setEnabled(flag); flag = true; } } }); button2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { if(count<str.length) { count = 0;//列表從新開端添加元素 listmodel.clear();//列表元素消除 text.setText(null); }else { count = 0; listmodel.clear(); text.setText(null); button1.setEnabled(flag);//啟動按鈕 } } }); list.addListSelectionListener(new ListSelectionListener(){ @SuppressWarnings("deprecation") public void valueChanged(ListSelectionEvent e) { if(e.getValueIsAdjusting()) return; //假如檢測到事宜在更改,則前往true,前面語句不履行;當更改停止後,則前往false,履行前面語句。 for(Object item : list.getSelectedValuesList()) { text.append(item + "\n");//List型對象轉換為Object } //list挪用getSelectedValuesList()辦法,發生一個字符串數組,內容為被選中的元素稱號 } }); setLayout(new FlowLayout()); Border border = BorderFactory.createMatteBorder(1, 1, 2, 2, Color.RED);//添加邊框 list.setBorder(border);//設置邊框 text.setBorder(border); add(button1); add(button2); add(new JScrollPane(text)); add(list); } public static void main(String[] args) { run(new ListTest(),250,375); } }
履行成果:
在下面的法式中,對JList的處置進程頂用到了JList所支撐的事宜ListSelectionEvent的getValueIsAdjusting()辦法和JList的getSelectedValuesList()辦法,須要留意這兩個辦法的用法。
(1)Boolean javax.swing.event.ListSelectionEvent.getValueIsAdjusting()
前往此事宜能否是依然在更改的多個分歧事宜之一,假如此事宜是依然在更改的多個分歧事宜之一,則前往 true。
例如,關於選擇被更新以呼應一個用戶的拖動的事宜,那末在拖動開端時,此屬性被設置為 true;在拖動停止時被設置為 false。在拖動時代,監聽器吸收 valueIsAdjusting 屬性設置為 true 的事宜。在拖動的最初,當更改終止時,監聽器吸收一個值設置為 false 的事宜。
假如將JList對象的注冊法式去失落更新檢測的語句:
if(e.getValueIsAdjusting()) return;
輸入為:
可見,沒有了更新檢測,選中列表框元素後,有反復輸入。
(2)List javax.swing.JList.getSelectedValuesList()
JList對象挪用getSelectedValuesList()辦法,發生一個字符串數組,內容為被選中的元素稱號。
3、JList轉動條
JList本沒有對轉動供給直接的支撐,我們只需將JList包裝進JScrollPane,它將主動贊助處置一切細節。
總結:JList想添加元素,可以履行將一切元素在JList初始化時參加的靜態操作,也能夠應用“列表模子”DefaultListModel處置一切列表修正細節的靜態操作。
留意:在JList元素選擇的進程中能夠會用到更新檢測,從而確保法式的穩固性。
以上所述是小編給年夜家引見的java圖形用戶界面之列表框,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!