Java 그래픽 사용자 인터페이스 목록 상자
목록 상자는 Swing 구성 요소 JList에 의해 생성되며 항상 화면에서 고정된 행 수의 공간을 차지합니다. 목록 상자에서 선택한 요소를 가져오려면 getSelectedValuesList()를 호출하면 선택한 요소의 이름이 포함된 문자열 배열을 생성할 수 있습니다. JList 구성 요소에서는 다중 선택이 가능합니다. Ctrl 키를 누른 상태에서 클릭한 모든 요소를 선택할 수 있습니다. 요소를 선택한 경우 Shift 키를 누른 채 다른 요소를 클릭하면 두 요소 사이의 모든 요소가 선택됩니다. 선택 항목에서 요소를 제거하려면 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 초기화 시 모든 요소를 추가하면 됩니다.
실행 결과: 리스트박스를 조작할 수 없습니다.
2. 동적 작업
JList 메서드를 보면 JList가 목록 상자의 동적 작업을 담당하지 않는다는 것을 알 수 있습니다. 모든 동적 작업에 대한 자세한 내용은 "목록 모델"이 DefaultListModel에서 완료되는 경우 JList에 목록 모델만 추가하면 됩니다.
DefaultListModel listmodel = new DefaultListModel() >
listmodel.remove(int index);//지정된 위치의 요소 지우기 예실행 결과:
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. 이 두 가지 메소드의 사용법에 주의해야 합니다.
(1)부울 javax.swing.event.ListSelectionEvent.getValueIsAdjusting()
출력은 다음과 같습니다.
if(e.getValueIsAdjusting()) return;
볼 수 있습니다. 더 이상 업데이트 감지가 없다는 것을 확인하고 목록 상자 요소를 선택한 후 출력이 반복됩니다.