Swing : JTextArea, CheckBox, ComboBox
Thread
JTextField와 JTextArea의 다른점은 텍스트에리어는 여러줄의 텍스트를 입력할 수 있다는 점이다.
처음 객체를 생성할 때에 행과 열을 지정한드는 점에서 입력할 수 있는 범위가 다르다는 것을 알 수 있다.
.append()
: 기존의 내용에 새 내용을 덧붙일 때 사용하는 메서드
코드작성
: 텍스트필드에 입력한 텍스트를 "확인"버튼을 누르면 텍스트 에리어로 옮기는 코드
Swing에도 체크박스가 있다. 이름은 JChjeckBox 사용시 대소문자 바뀌지 않도록 주의하기
.isSelected()
: 선택되었는지 확인하는 메서드
코드 작성
: 체크박스가 선택되면 선택된 체크박스의 String이 텍스트필드에 나타나도록 하기
체크박스와 라디오버튼의 차이점은 체크박스는 여러개를 선택할 수 있다는 점이고 라디오 버튼은 (버튼그룹에 묶여있을 때) 하나만 선택할 수 있다.
라디오버튼들을 그룹으로 묶으려면 ButtonGroup을 import하고 객체를 만들어서 .add()로 버튼그룹객체에 넣어주면 된다.
코드작성
: 라디오 버튼이 선택될 때마다 "XXXX가 선택되었습니다."라는 메시지가 텍스트필드에 나타나게 하기
콤보박스는 드롭박스 혹은 셀렉트 등 부르는 이름이 다양하나 여러개의 선택 중에 하나를 선택하는 박스
콤보박스에 들어갈 자료형은 Strign, Double, Integer 그 외 객체까지 다양하다. 처음 객체를 생성할 때 자료형을 선택한다.
콤보박스에는 ActionListener를 쓸 수 없다. System.out.print()를 사용해 콘솔창에 ActionEvent의 event를 출력해보면 어떤 것을 선택했는지가 아니라 단순히 선택이 change 되었다고만 나온다.
그래서 콤보박스에는 ActionListener 대신 ItemListener 를 사용한다. 사용방법은 거의 비슷하다.
주의할 점은 상태가 변한 컨트롤의 현재 선택값 추출할 때 강제 캐스팅 을 해야 한다는 것이다.
제네릭을 사용했기때문에 (String) 같은 강제 캐스팅이 필요없을 것같지만, 현재 메서드 내부에서는 ItemEvent 형식의 참조변수에 저장되었다가 꺼내어지는 것이기 때문에 강제 캐스팅 필요하다.
코드작성
: 과일 콤보박스와 라벨을 만들어서 콤보박스의 아이템이 선택될 때마다 해당 이미지를 라벨에 띄우기
Swing 총 정리 예제
“확인”버튼을 클릭하면 입력된 값과 선택된 것들 한 번에 콘솔창에 프린트하기
정해진 구성대로 컨트롤들을 배치할 것
.getSelectedItem()
: 콤보상자에서 선택된 아이템 가져오는 메서드
주석처리부분은 내가 처음 작성한 것… 비교하고 공부하려고 기록을 남김
Thread.sleep(300);
: 0.3초씩 실행을 딜레이 시키는 Thread 클래스의 static메서드
아래의 코드 블럭은 t1.run() → t2.run(); → main의 for문
이 순서대로 차례차례 실행한다.
프로그램의 수행 중 동시에 처리하고자 하는 작업이 생겼을 때는 원래 갖고 있는 메인 Thread 외에 Thread클래스를 추가사용하여 실행시킬 수 있다.
Thread Class
: 프로그램 실행의 흐름을 분기할 수 있는 방법을 제공하는 클래스
💚 구현방법
1. Thread 클래스를 상속받는 방법
1-1. Thread 클래스를 상속받아 public void run()메서드를 오버라이딩
※ public void run() : 쓰레드가 생성되어 수행할 작업을 정의하는 메서드
1-2. 해당 클래스의 객체를 생성하고, start 메서드를 호출(실행)한다.
만약 오버라이딩 된 run() 메서드를 직접 호출하면,
쓰레드 생성 & 실행이 아니라, 일반 메서드 호출이 되므로
반드시 start 메서드를 통해 run으로 이어지게 호출한다.
※ start메서드
: Thread 클래스(부모 클래스)에 있는 메서드,
자체적으로 쓰레드 추가 생성 후 run 메서드 재호출하는 역할을 한다
(상속된 메서드로 메서드가 표면에 보여지지 않은채 사용된다)
2. Runnable 인터페이스를 implement(구현)하는 방법
2-1. Thread 클래스를 상속하는 방법과 같고 효과도 거의 같다.
String input = JOptionPane.showInputDialog("정답을 입력하세요.");
: 사용자에게 입력을 받을 수 있는 창을 띄울 수 있는 코드
Thread 클래스를 상속받아서 구현하기 2 🔽
카운트하는 코드와 다이얼로그 창이 동시에 실행되고 있지만 다이알로그에 입력한다고 카운트가 멈추지 않는다.
.stop()은 지금은 사용하지 않기 때문에 동시에 실행되고 있는 작업들이 서로 영향을 받아 멈추게 하려면 다소 복잡한 과정을 거쳐야 한다.
익명 클래스
: 클래스 이름없이 상속 또는 구현(implement)를 위해서 만드는 클래스
: 메소드를 오버라이딩 하면서 객체를 생성하는 방법
new Thread().start()
익명 클래스를 활용한 쓰레드 생성
Thread 클래스를 상속 받은 듯 하지만 상속의 구문은 없는 형태이다.
상속받은 클래스가 익명클래스이고, 그 안의 run메서드가 오버라이딩 된 상태
그리고 만들어진 객체에 바로 .start()
를 붙여서 실행한다.
쓰레드를 실행하는 세 번째 방법
private 변수를 만들고 이 변수의 getter와 setter를 만든다.
변수와 getter, setter메서드를 이용해서 특정 조건이 되면 멈추거나 계속 진행되는 쓰레드를 만들 수 있다.