잡동사니에도 사랑을

[21.08.26] JListEx 본문

JAVA_SE/13_swing

[21.08.26] JListEx

luvforjunk 2021. 8. 29. 20:55
728x90
반응형

package swing;

 

import java.awt.FlowLayout;

import java.util.Vector;

 

import javax.swing.DefaultListModel;

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.JScrollPane;

import javax.swing.ListSelectionModel;

 

//JFrame BorderLayout(동서남북)

public class JListEx extends JFrame {

 

         public JListEx() {

                  super("JList Test"); // 부모 생성자 호출

 

                  setLayout(new FlowLayout());

                  // List 따닥따닥 붙어서 나오는 setLayout FlowLayout으로 잡아놨기 때문.

                  // 현재 갖고 있는 중앙을 기점으로 순서대로 붙여주게 된다.

 

                  String[] listData = { "Hong", "Gil", "Dong", "JAVA", "JSP" };

                  JList<String> list1 = new JList<String>(listData);

                  list1.setSelectedIndex(1);

 

                  // JList 바깥에 보여주는 작업 - 강사(부모)

                  // 안에 있는 데이터를 넣다 뺏다 하는 작업은 DefaultListModel - 매니저(자식)

                  // 데이터가 들어오는 항목은 문자열이고 (model) 매니저

                  // model 관련된 JList 작성해서 넣는

 

                  // Model 먼저 하거나~~~

                  // DefaultListModel<String> model = new DefaultListModel<String>();

                  // JList<String> list2 = new JList<String>(model);

 

                  // =

                  // List 먼저 잡고 Model 뒤따라오게 하거나~~~

                  JList<String> list2 = new JList<String>(new DefaultListModel<String>());

                  DefaultListModel<String> model = (DefaultListModel<String>) list2.getModel();

                  // 항상 부모는 자식에게 맞춰서 가야한다

                  // 부모인 ListModel 자식인 DefaultListModel 바꿔서 Casting 다음에 보내줘야 한다

 

                  model.addElement("사과");

                  model.addElement("");

                  model.addElement("딸기");

                  model.addElement("바나나");

                  list2.setSelectedIndex(1);

                  // Index 1번에 맞춰줬으니 "" 나옴

 

                  Vector<String> vListData = new Vector<String>();

                  JList<String> list3 = new JList<String>(vListData);

                  JScrollPane scroll = new JScrollPane(list3);

                  vListData.add("축구");

                  vListData.add("야구");

                  vListData.add("농구");

                  vListData.add("배구");

                  vListData.add("테니스");

                  vListData.add("수영");

                  vListData.add("육상");

                  vListData.add("태권도");

                  vListData.add("유도");

 

                  class Student { // 분명히 생성자라는 메소드 안에 클래스를 선언해서 쓴다?

                           // 로컬이너 몇번? 한번 쓰겠다

                           String id;

                           String name;

                           String department;

 

                           // 생성자를 잡자!

                           // 우클릭 - Source - Generator Constructor using field

                           public Student(String id, String name, String department) {

                                   super();

                                   this.id = id;

                                   this.name = name;

                                   this.department = department;

                           }

 

                           @Override

                           public String toString() { // 주소가 아닌 이름으로 나오게 하기 위해서

                                   return name; // 이름만 화면에 떴으면 좋겠어

                           }

                  }

 

                  JList<Student> list4 = new JList<Student>(new DefaultListModel<Student>());

                  // 문자열이 아닌 student라는 클래스 객체열을 담겠다

                  DefaultListModel<Student> model2 = (DefaultListModel<Student>) list4.getModel();

                  // getmodel 잡았으니 casting 걸어주자

                  list4.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 하나만 선택하고 싶어요

                  model2.addElement(new Student("100", "홍길동", "전산과"));

                  model2.addElement(new Student("200", "손오공", "건축과"));

                  model2.addElement(new Student("300", "사오정", "토목과"));

                  model2.addElement(new Student("400", "저팔계", "경영학"));

                  list4.setSelectedIndex(1);

 

                  add(list1);

                  add(list2);

                  add(scroll);

                  // add(list3); 라고 하면 scroll 만들었어도 나오지 않는다

                  // ? list scroll 갖다붙였기 때문에(JScrollPane scroll = new JScrollPane(list3);)

                  // Frame 붙일 때는 list 아닌 scroll 붙여야 한다.

                  add(list4);

 

                  setBounds(900, 200, 400, 300);

                  setVisible(true);

                  setDefaultCloseOperation(EXIT_ON_CLOSE);

         }

 

         public static void main(String[] args) {

                  new JListEx();

         }

}

 

728x90
반응형

'JAVA_SE > 13_swing' 카테고리의 다른 글

[21.08.26] JButtonEx  (0) 2021.08.29
[21.08.26] JTableEx2  (0) 2021.08.29
[21.08.26] JTableEx  (0) 2021.08.29