DAY_018[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2022년 10월 24일
0

국비과정

목록 보기
19/99

 🌞 Day 018 

  • Swing : JTextArea, CheckBox, ComboBox

  • Thread



 🎃 Swing 

 🎪 JTextArea 

  • JTextField와 JTextArea의 다른점은 텍스트에리어는 여러줄의 텍스트를 입력할 수 있다는 점이다.

  • 처음 객체를 생성할 때에 행과 열을 지정한드는 점에서 입력할 수 있는 범위가 다르다는 것을 알 수 있다.

  •  .append() 
    : 기존의 내용에 새 내용을 덧붙일 때 사용하는 메서드

  • 코드작성
    : 텍스트필드에 입력한 텍스트를 "확인"버튼을 누르면 텍스트 에리어로 옮기는 코드


 🎪 JCheckBox 

  • Swing에도 체크박스가 있다. 이름은 JChjeckBox 사용시 대소문자 바뀌지 않도록 주의하기

  •  .isSelected() 
    : 선택되었는지 확인하는 메서드

  • 코드 작성
    : 체크박스가 선택되면 선택된 체크박스의 String이 텍스트필드에 나타나도록 하기


 🎪 RadioButton 

  • 체크박스와 라디오버튼의 차이점은 체크박스는 여러개를 선택할 수 있다는 점이고 라디오 버튼은 (버튼그룹에 묶여있을 때) 하나만 선택할 수 있다.

  • 라디오버튼들을 그룹으로 묶으려면 ButtonGroup을 import하고 객체를 만들어서 .add()로 버튼그룹객체에 넣어주면 된다.

  • 코드작성
    : 라디오 버튼이 선택될 때마다 "XXXX가 선택되었습니다."라는 메시지가 텍스트필드에 나타나게 하기


 🎪 JComboBox(드롭박스, 셀렉트 등등) 

  • 콤보박스는 드롭박스 혹은 셀렉트 등 부르는 이름이 다양하나 여러개의 선택 중에 하나를 선택하는 박스

  • 콤보박스에 들어갈 자료형은 Strign, Double, Integer 그 외 객체까지 다양하다. 처음 객체를 생성할 때 자료형을 선택한다.

  • 콤보박스에는 ActionListener를 쓸 수 없다. System.out.print()를 사용해 콘솔창에 ActionEvent의 event를 출력해보면 어떤 것을 선택했는지가 아니라 단순히 선택이 change 되었다고만 나온다.

  • 그래서 콤보박스에는 ActionListener 대신  ItemListener 를 사용한다. 사용방법은 거의 비슷하다.

  • 주의할 점은 상태가 변한  컨트롤의 현재 선택값 추출할 때 강제 캐스팅 을 해야 한다는 것이다.

  • 제네릭을 사용했기때문에 (String) 같은 강제 캐스팅이 필요없을 것같지만, 현재 메서드 내부에서는 ItemEvent 형식의 참조변수에 저장되었다가 꺼내어지는 것이기 때문에 강제 캐스팅 필요하다.

  • 코드작성
    : 과일 콤보박스와 라벨을 만들어서 콤보박스의 아이템이 선택될 때마다 해당 이미지를 라벨에 띄우기


 🎪 구성 연습 

  • Swing 총 정리 예제

  • “확인”버튼을 클릭하면 입력된 값과 선택된 것들 한 번에 콘솔창에 프린트하기

  • 정해진 구성대로 컨트롤들을 배치할 것

  •  .getSelectedItem() 
    : 콤보상자에서 선택된 아이템 가져오는 메서드

  • 주석처리부분은 내가 처음 작성한 것… 비교하고 공부하려고 기록을 남김



 🎃 Thread 

 🎪 쓰레드란? 

  • Thread
    : 프로그램의 명령을 실행하게끔 해주는 실행 주체.
    : 개발자가 별도의 Thread를 생성하지 않는다면, 한 프로그램에 하나의 Thread가 존재하여 해당 명령을 차례 차례 순서대로 실행 시킴

 ✨ 쓰레드를 별도로 만들지 않았을 때 

  •  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 클래스를 상속하는 방법과 같고 효과도 거의 같다.

  • Thread 클래스를 상속받아서 구현하기 1 🔽

  • String input = JOptionPane.showInputDialog("정답을 입력하세요.");
    : 사용자에게 입력을 받을 수 있는 창을 띄울 수 있는 코드

  • Thread 클래스를 상속받아서 구현하기 2 🔽

  • 카운트하는 코드와 다이얼로그 창이 동시에 실행되고 있지만 다이알로그에 입력한다고 카운트가 멈추지 않는다.

  • .stop()은 지금은 사용하지 않기 때문에 동시에 실행되고 있는 작업들이 서로 영향을 받아 멈추게 하려면 다소 복잡한 과정을 거쳐야 한다.


 ✨ Runnable 인터페이스를 사용해서 구현하기 

  • Runnable 인터페이스를 구현(implement)하는 방법
    1.  Runnable 인터페이스를 구현 하는 클래스 작성
    2.  public void run() 오버라이딩  구현
    3. 해당 클래스의 A  객체 생성 
    4.  A 객체를 Thread 클래스의 생성자로 전달하여 Thread 객체 생성 
    5. 생성시킨 쓰레드의 start 메소드 호출


 ✨ 익명 클래스 : 쓰레드 생성 

  • 익명 클래스
    : 클래스 이름없이 상속 또는 구현(implement)를 위해서 만드는 클래스
    : 메소드를 오버라이딩 하면서 객체를 생성하는 방법

  • new Thread().start()
    익명 클래스를 활용한 쓰레드 생성

  • Thread 클래스를 상속 받은 듯 하지만 상속의 구문은 없는 형태이다.
    상속받은 클래스가 익명클래스이고, 그 안의 run메서드가 오버라이딩 된 상태
    그리고 만들어진 객체에 바로 .start()를 붙여서 실행한다.
    쓰레드를 실행하는 세 번째 방법


 🎪 쓰레드를 중간에 멈추는 법 

  • private 변수를 만들고 이 변수의 getter와 setter를 만든다.

  • 변수와 getter, setter메서드를 이용해서 특정 조건이 되면 멈추거나 계속 진행되는 쓰레드를 만들 수 있다.



profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글