Java グラフィカル ユーザー インターフェイス リスト ボックス
リスト ボックスは、Swing コンポーネント JList を通じて生成され、常に画面上の固定行数のスペースを占有します。リスト ボックスで選択した要素を取得したい場合は、getSelectedValuesList() を呼び出すだけで、選択した要素の名前を含む文字列配列が生成されます。 JList コンポーネントでは複数の選択が可能です。Ctrl キーを押したままにすると、クリックされたすべての要素が選択されます。要素が選択されている場合は、Shift キーを押しながら別の要素をクリックすると、2 つの要素の間にあるすべての要素が選択されます。選択から要素を削除するには、Ctrl キーを押したまま要素をクリックします。
リスト ボックスを初期化した後の次のステップは、リスト ボックスにコンテンツを追加して変更することです。静的操作と動的操作に分けられます。
1. 静的操作
静的操作は、すべての要素を同時に JList に追加することです。つまり、プログラムの実行中にリスト ボックスを操作することはできません。
例:
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 を初期化するときにすべての要素を JList に追加するだけです。
実行結果:リストボックスは操作できません。
2. 動的操作
JList メソッドを見ると、JList がリスト ボックスの動的操作を担当していないことがわかります。動的操作の詳細はすべて「リスト モデル」で完了できます。 "、つまり DefaultListModel です。リストを追加するだけです。モデルを JList に追加するだけです。 T DefaultListModel ListModel = New DefaultListModel ();
Listmodel.addelement (Element1); // 要素の追加
listmodel.clear (); // 位置要素のクリア
例:
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がサポートするイベントListSelectionEventのgetValueIsAdjusting()メソッドと、JListのgetSelectedValuesList()メソッドをJListの処理に使用していますので、この2つのメソッドの使い方に注意が必要です。 。
(1)Boolean javax.swing.event.ListSelectionEvent.getValueIsAdjusting()
このイベントがまだ変化している複数の異なるイベントの 1 つであるかどうかを返します。このイベントがまだ変化している複数の異なるイベントの 1 つである場合は、を返します。真実。 たとえば、ユーザーのドラッグに応じて選択が更新されるイベントの場合、このプロパティは、ドラッグが開始されると 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 要素の選択プロセス中に更新検出が使用される場合があります。