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()
이 이벤트가 여전히 변경 중인 여러 이벤트 중 하나인지 여부를 반환합니다. 다양한 이벤트가 발생하면 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 요소 선택 프로세스 중에 업데이트 감지를 사용할 수 있습니다.