Listenfeld der grafischen Java-Benutzeroberfläche
Das Listenfeld wird von der Swing-Komponente JList generiert, die immer eine feste Anzahl von Zeilen auf dem Bildschirm einnimmt. Wenn Sie die ausgewählten Elemente im Listenfeld abrufen möchten, rufen Sie einfach getSelectedValuesList() auf, wodurch ein String-Array mit den Namen der ausgewählten Elemente generiert werden kann. Die JList-Komponente ermöglicht eine Mehrfachauswahl. Wenn Sie die Strg-Taste gedrückt halten, können alle angeklickten Elemente ausgewählt werden. Wenn Sie ein Element auswählen, halten Sie die Umschalttaste gedrückt und klicken Sie auf ein anderes Element. Um ein Element aus der Auswahl zu entfernen, halten Sie die Strg-Taste gedrückt und klicken Sie auf das Element.
Nachdem Sie das Listenfeld initialisiert haben, können Sie Inhalte zum Listenfeld hinzufügen und ändern. Unterteilt in statische Operationen und dynamische Operationen.
1. Statische Operation
Bei der statischen Operation werden alle Elemente gleichzeitig zur JList hinzugefügt. Nach dem Hinzufügen können sie nicht geändert oder gelöscht werden, dh das Listenfeld kann nicht bedient werden während der Ausführung des Programms.
Z.B.
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); } }
Fügen Sie wie im obigen Beispiel einfach alle Elemente hinzu, wenn Sie die JList initialisieren.
Ausführungsergebnis: Das Listenfeld kann nicht bedient werden.
2. Dynamischer Betrieb
Wenn Sie sich die JList-Methode ansehen, können Sie feststellen, dass JList nicht für den dynamischen Betrieb des Listenfelds verantwortlich ist Einzelheiten zu allen dynamischen Vorgängen finden Sie unter Das „Listenmodell“ ist in DefaultListModel vervollständigt. Sie müssen nur das Listenmodell zu JList hinzufügen.
ListModel listmodel = new DefaultListModel();
listmodel.addElement(element1); //Elemente hinzufügen
listmodel.clear();///Alle Elemente löschen
listmodel.remove(int index);//Element an der angegebenen Position löschen
Zum Beispiel
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); } }
Ausführungsergebnis:
Im obigen Programm werden die von JList unterstützte getValueIsAdjusting()-Methode des von JList unterstützten Ereignisses und die getSelectedValuesList()-Methode von JList verwendet. Sie müssen auf die Verwendung dieser beiden achten Methoden.
(1)Boolean javax.swing.event.ListSelectionEvent.getValueIsAdjusting()
Gibt zurück, ob dieses Ereignis eines von mehreren verschiedenen Ereignissen ist, die sich noch ändern, wenn dieses Ereignis eines davon noch ändert viele verschiedene Ereignisse, gibt true zurück.
Beispiel: Bei einem Ereignis, bei dem die Auswahl als Reaktion auf das Ziehen durch den Benutzer aktualisiert wird, wird diese Eigenschaft auf „true“ gesetzt, wenn das Ziehen beginnt, und auf „false“, wenn das Ziehen endet. Während des Ziehens empfängt der Listener Ereignisse, bei denen die Eigenschaft „valueIsAdjusting“ auf „true“ gesetzt ist. Am Ende des Drag-Vorgangs, wenn die Änderung beendet ist, empfängt der Listener ein Ereignis, dessen Wert auf false gesetzt ist.
Wenn das JList-Objektregistrierungsprogramm die Update-Erkennungsanweisung entfernt:
if(e.getValueIsAdjusting()) return;
lautet die Ausgabe:
Es ist sichtbar dass keine Update-Erkennung mehr erfolgt, nach Auswahl des Listbox-Elements erfolgt eine erneute Ausgabe.
(2)List javax.swing.JList.getSelectedValuesList()
Das JList-Objekt ruft die Methode getSelectedValuesList() auf, um ein String-Array zu generieren, dessen Inhalt ausgewählt ist Elementname.
3. JList-Bildlaufleiste
JList bietet keine direkte Unterstützung für das Scrollen. Wir müssen JList nur in JScrollPane einbinden, und es hilft automatisch bei der Verarbeitung aller Details.
Zusammenfassung: Wenn Sie Elemente zu JList hinzufügen möchten, können Sie bei der Initialisierung von JList den statischen Vorgang zum Hinzufügen aller Elemente ausführen oder das „Listenmodell“ DefaultListModel verwenden, um den dynamischen Vorgang aller Listen abzuwickeln Änderungsdetails.
Hinweis: Bei der Auswahl von JList-Elementen kann die Aktualisierungserkennung verwendet werden, um die Stabilität des Programms sicherzustellen.