2022. 10. 6. 08:41ㆍDev.Program/Java & Spring
======== JAVA0427 → Ex.java
import javax.swing.JFrame; public class Ex extends JFrame { public Ex() { showFrame(); } public void showFrame() { setBounds(600, 400, 300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { new Ex(); } } |
- 기본 틀 만들기
Design 탭으로 가기
< JPasswordField >
- Center에 JPasswordField 붙이고
- North 에 JLable
- Soute 에 JButton
<Ex.java>
- JTextField 랑 다르게 패스워드는 입력값이 노출안됨
다시 Design 탭으로 가기
- 속성 값 * 로 바꿔보기 (echoChar)
- 별 모양으로 바뀐다
> 확인버튼에 리스너 연결하기
- deprecated 처리 됐기 때문에 사용 권장하지 않음
- getPassword(); 사용 권장!
- 근데 getPassword()는 char[] 배열 타입 ! String 으로 가져오지 못한다.
- new 선언으로 인스턴스 생성 (char[] 들고옴)
- 입력 값 가져옴!
======== Ex2.java (Ex.java 복사해오기)
< JComboBox >
- 드롭 다운 메뉴 나옴!
JComboBox comboBox = new JComboBox(); comboBox.setModel(new DefaultComboBoxModel(new String[] {"과목 선택", "JAVA", "JSP", "ANDROID"})); getContentPane().add(comboBox, BorderLayout.CENTER); |
.setModel(new DefaultXXXModel ⇒ 계속 나올거
- 지금은 E[] 사용 중인데 우리는 제일 밑에 있는 Vector 사용
JComboBox comboBox = new JComboBox(); // String[] 타입을 사용하여 표시할 항목을 생성 // ⇒ 배열이므로 생성 후 크기 고정 // comboBox.setModel(new DefaultComboBoxModel(new String[] {"과목 선택", "JAVA", "JSP", "ANDROID"})); // Vector 타입을 사용하여 표시할 항목을 생성 // => 컬렉션이므로 생성 후에도 크기(항목) 변경 가능 Vector<String> list = new Vector<String>(); list.add("과목선택"); list.add("JAVA"); list.add("JSP"); list.add("ANDROID"); |
comboBox.setModel(new DefaultComboBoxModel<String>(list)); |
- 추가
- 아까랑 실행결과 똑같음
// Vector 객체 생성 시 데이터를 한꺼번에 추가하는 방법 Vector<String> list = new Vector<String>(Arrays.asList("과목 선택", "JAVA", "JSP", "ANDROID")); |
- .asList ⇒ List 타입 객체로 되돌려줌
- 그래도 결과는 같다!
- 별도의 항목 추가도 가능하다!
- 여기 노란 줄 그이는 이유는 위에 콤보박스에 제네릭 선언이 안되어있어서
- 처리하면 노란 줄 사라짐(꼭 할 필요는 없다)
- 콤보박스도 이벤트 달아줄 수 있음
JComboBox<String> comboBox = new JComboBox<String>(); comboBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent arg0) { System.out.println("itemStateChanged"); } }); |
- 2번씩 호출됨
- 그래서 우린 이거 안쓰고 버튼에 액션리스너 사용
- getselected 메서드 호출하려니 메서드가 3개!
btnNewButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("인덱스 : " + comboBox.getSelectedIndex()); System.out.println("아이템 : " + comboBox.getSelectedItem()); } }); |
- 인덱스는 0번부터! (그래서 0번 제외시켜줘야함)
>
North 에 JLabel 지우고 JPanel 넣어보기
Panel 안에 JTextField 와 “추가” 라는 JButton 만들기
추가 버튼 눌렀을 때 textField 값 가져오기
- 추가 누르면 콘솔창에 뜸!
> 근데 우리가 하고싶은 건 추가 눌렀을 때 ‘과목 추가’ 리스트 안으로 들어가는 것!
추가 버튼 클릭 시 텍스트필드에 입력된 항목을 JComboBox 에 동적으로 추가
- 다운캐스팅
// JComboBox 에 입력된 텍스트 내용 추가 // 1. JComboBox 객체로부터 Model 객체 가져오기 DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) comboBox.getModel(); // 2. Model 객체의 addElement() 메서드 호출하여 항목 추가 model.addElement(textField.getText()); |
⇒
- 추가 누르니까 리스트로 들어감!
< 동적 select 박스 >
// JComboBox 객체에 ActionListener 직접 적용 가능 comboBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("인덱스 : " + comboBox.getSelectedIndex()); System.out.println("아이템 : " + comboBox.getSelectedItem()); } }); |
- 위에 버튼 액션리스너 복사 해 와서 comboBox 로 바꾸기만 하기!
- 확인 안눌러도 이제 콘솔창에 뜸
⇒ 쇼핑몰 할 때 동적 select 많이 사용! 카테고리 별로 누르면 바뀌도록….
관리자페이지 같은 거 웹으로도 만들고 JAVA 로도 만들 수 있기 때문에… JAVA 로도 만들어보기!
======== Ex3.java(Ex2.java 복사해와서 기본틀만 남기고 다 지우기)
design 탭
< JSpinner >
center - JSpinner
South - JButton
JSpinner spinner = new JSpinner(); spinner.setFont(new Font("굴림체", Font.PLAIN, 30)); spinner.setModel(new SpinnerNumberModel(new Integer(0), null, null, new Integer(1))); getContentPane().add(spinner, BorderLayout.CENTER); |
- 초기값(시작값), 최소값, 최대값
- Date 탭
- 근데 얘는 불편해서 많이 안 씀 ( 보통은 칸 다 따로따로 만든다 )
- List 탭
- 탭 3개 마다 객체들 다 다름!
- 우리는 제일 복잡한 ListModel 쓸 거
// 1. String[] 객체를 생성하여 항목을 추가하는 방법 // spinner.setModel(new SpinnerListModel(new String[] {"과목을 선택하세요", "JAVA", "JSP", "ANDROID"})); // 2. Model 객체를 생성하여 항목을 추가하는 방법 spinner.setModel(new SpinnerListModel(Arrays.asList("과목을 선택하세요", "JAVA", "JSP", "ANDROID"))); |
System.out.println(spinner.getValue()); |
- getValue() 를 통해 값을 가져옴
> Spinner 는 ActionListener 가 없다
- 대신 ChangeListener 가 있음!
- 안드로이드에선 이 Spinner 가 ComboBox 역할을 함!
======== Ex4.java 기본 틀 만들기
< JList >
design 탭 가기
Center 에 JList
버튼 필요 없지만 일단 South 에 JButton
- 누르면 눌러짐
- ctrl 키를 통해 복수개 선택 가능
- shift 키를 통해 복수개 연속적 선택 가능
> single_interval ~
- ctrl 선택 안됨 (단일 선택만 가능)
JList list = new JList(); list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); list.setModel(new AbstractListModel() { String[] values = new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}; public int getSize() { return values.length; } public Object getElementAt(int index) { return values[index]; } }); getContentPane().add(list, BorderLayout.CENTER); |
- getSize(), getElementAt() 나중에 안드로이드에서필요
- 얘는 하나밖에 없음
⇒ 여기까지 주석처리 하기!
- 아까처럼 만들려고 했는데 아까와 달리 파라미터 생성자가 없음! 이 방법이 아니다!
- 벡터타입
// 2. Vector 객체를 생성하여 항목 추가 후 JList 객체에 Vector 객체 추가하는 방법 Vector<String> vList = new Vector<String>(Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")); JList list = new JList(vList); |
- 최종!
- 앞이랑 똑같이 됨!
- 근데 아래부분까지 안보임 ⇒ 스크롤바 필요
< JScrollPane >
- 필요에 따라 스크롤 자동으로 달아줌!
> 일단 리스트 없애기
Center 에 JScrollPane 넣기
// 스크롤바 기능을 제공하는 JScrollPane 객체 생성 // => JTable, JList 등 스크롤이 필요한 컴포넌트를 결합하여 사용 JScrollPane scrollPane = new JScrollPane(); // JFrame 또는 JPanel 등 필요한 곳에 JScrollPane 객체 부착 getContentPane().add(scrollPane, BorderLayout.CENTER); JList list = new JList(); // JScrollPane 객체에 스크롤할 객체를 추가하기 위해 // setViewportView() 메서드에 스크롤바를 동작시킬 객체 전달 scrollPane.setViewportView(list); |
- 이 부분이 중요! 스크롤 만들어서 거기 넣어줘야됨!
- 나중에 테이블도 이렇게 만들 거 (회원정보 같은 거 뿌릴 때 스크롤바 필수)
Vector<String> vList = new Vector<String>(Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")); JList list = new JList(vList); // JScrollPane 객체에 스크롤할 객체를 추가하기 위해 // setViewportView() 메서드에 스크롤바를 동작시킬 객체 전달 scrollPane.setViewportView(list); |
- 위에꺼 복사해오기
- 이제 스크롤바 보임
⇒ 주로 테이블이나 리스트에서 많이 쓰임
> 이벤트 처리 (버튼에 달 수도 있고, 리스트에 바로 달수도 있다)
일단 버튼에 이벤트 달아보기
> 다중선택일 때와 단일선택일 때 항목 가져오는 방법이 다름
- getSelectedValue() 와 getSelectedValuesList() 차이!
- getSelectedValues() 는 deprecate
> 다중 선택 가져오기!
> 디자인탭에서 단일 선택으로 바꿔보기
list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); |
- 코드 추가됨
- 단일 모드 항목 가져오기
- 위에 코드도 제네릭 추가해주기
- 이제 단일 항목으로 나옴
======== Ex5.java (기본 틀 만들기)
design 탭으로 가기
- absolute 로 바꾸면 추가할 때 아무곳에나 위치시킬 수 있음
- 코드보기! 버튼에 setBounds 되어있음
- 원하는 대로 위치시킬 수 있음!
< Layout >
- 지금까지 배운 4가지
boarderLayout : 동서남북센터
FlowLayout : 오른쪽으로 → 자리 없으면 아래로
GridLayout : 표랑 같다
absolute : 좌표로 가능
< cmd 창 mysql → java >
< member2 테이블 생성 > 필드 1. 번호(idx) INT형 PK(PRIMARY KEY) AI(AUTO_INCREMENT) 2. 이름(name) VARCHAR(20) NN 3. 나이(age) INT형 NN 4. 성별(gender) VARCHAR(2) NN 5. E-Mail(email) VARCHAR(50) NN UN 6. 주민번호(jumin) VARCHAR(14) NN UN CREATE TABLE member2 ( idx INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL, age INT NOT NULL, gender VARCHAR(20) NOT NULL, email VARCHAR(50) NOT NULL UNIQUE, jumin VARCHAR(14) NOT NULL UNIQUE ); |
다시 이클립스로 돌아와서
======== Member2Join.java 만들기
- 오른쪽 정렬
- 콤보박스 선택 시 잠김
- 직접입력 선택 시 풀림 → 포커스
public boolean inputCheck() { String nameRegex = "^[가-힣]{2,5}$"; // 한글 2 ~ 5글자 String ageRegex = "^[0-9]{1,3}$"; // 나이 숫자 1 ~ 3자리 // 이름 정규 표현식 틀렸을 때 if(!Pattern.matches(nameRegex, textField.getText())) { System.out.println("이름을 한글 2 ~ 5 글자로 입력하세요!"); textField.requestFocus(); return false; } // 나이 정규 표현식 틀렸을 때 if(!Pattern.matches(ageRegex, textField_1.getText())) { System.out.println("나이를 숫자 1 ~ 3자로 입력하세요!"); textField_1.requestFocus(); return false; } return true; } |
- 제어할 게 많아서 틀렸을 경우를 false 로 둠!
'Dev.Program > Java & Spring' 카테고리의 다른 글
MVC2 - (1) (0) | 2022.10.07 |
---|---|
자바 Swing(스윙) - (5) (0) | 2022.10.06 |
자바 Swing(스윙) - (3) (0) | 2022.10.06 |
자바 Swing(스윙) - (2) (0) | 2022.10.06 |
DAO/DTO 패턴 / 자바 Swing(스윙) - (1) (0) | 2022.10.06 |