@21.04.19
JAVA
@GUI - JSlider
% 3개의 슬라이더를 변경하면 버튼의 색이 실시간으로 바뀌는 실습
%StateChange
슬라이더의 이벤트에 StateChange 라는 이벤트를 추가한다. 해당 이벤트는 슬라이더의 값이 변경될 때마다 발생하는 이벤트로 해당 슬라이더의 값을 R,G,B의 값중 하나로 지정, Button의 색상을 변경한다.
각 이벤트 별로 실시간으로 색이 변경되게 하기 위해, RGB의 3개의 색상에 해당하는 부분을 바로바로 가져오도록 만들었다.여기서, 가운데 사진을 보면, slider_color 변수가 아래에서 지정이되어 getValue 를 가져오지 못하는 경우 또한 존재하였다. 이에 대해 맨 위의 Field에 정의해주는게 맞긴 하겠지만... 나는 그냥 코드 위치를 바꿨다.정의하는건 위로, 이벤트는 아래로.(원래는 그냥 Field 쪽에 < private int R,G,B = 0 > 이라는 한줄만 추가해주면 된다. )
그렇게 우측의 사진처럼 슬라이더가 변경될 때마다 "색상을 변경해주세요!"라는 버튼의 색상이 바뀌는 것을 볼 수 있다.
%setBackground
setBackground 라는 명령어를 통해 Button의 색상을 변경해줄건데 보면 매개변수로서 객체가 Color 임을 볼 수 있다. 때문에 집어 넣을때는 new 를 사용해 Color 객체에 우리가 만들었던 RGB 값을 대체한 int형 변수를 집어 넣게 된다.
%Error - NullpointerException
NullpointerException 이라는 에러는 해당 객체가 생성은 되었으나, 갖고 있는 값이 null이라서 발생하는 에러이다.
뭐 당연히 내가 값이 부여가 안되어있을리는 없으나, 코드 위치상 맞지 않아 발생하는 에러일 것.
위의 에러는 내가 btn 이라 이름 붙힌 Button의 색상을 setBackground 라는 명령어로 바꾸려하는데, 그 전에 변수에 값이 할당되지 않을것이다.
때문에, Field에 btn이라는 변수를 정의해주는것으로 에러를 해결하였다.
@Stack & Queue
%Stack
asd
asd
%Queue
asd
asd
@GUI - 이미지 넣기
음... 이미지는 Image 라는 객체로 ImageIcon 명령어를 통해 파일을 가져오고, getImage 명령어를 통해 사진을 가져온다. getScaledInstance 라는 명령어를 통해 집어 넣을 이미지의 크기와 해상을 설정하였다.
@JDBC(Java DataBase Connectivity)
@연결하기
연결은 위의 그림과 같다.
전에 Music이란 JAR 파일을 연결해준것 처럼 외부 파일을 연결한다.
위의 그림처럼 오라클내에 존재하는 JAVA의 JAR파일을 이클립스와 연동하여 연결한다.
@DataBase 연결
// 2. DataBase 연결
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user_id = "hr";
String user_pw = "hr";
위의 코드에 대해 하나씩 보면
위와 같다. 여기서 "thin"은 Driver의 이름이다.
그리고 DriverManager.getConnection 이라는 명령어를 통해 sql에 접속할 수 있다.
위에서 설정했던 ID와 PW를 통해 오라클에 접속하게 되는데 이때, 예외처리문을 통해 ClassNotFoundException을 제외해준다. 해당 에러는 Class 명을 찾지 못해 나는 에러라고 하는데...
분명 폴더에 파일이 있더라도 발생하는 경우가 있다고 한다.
@데이터 삽입
// 2. DataBase 연결
//connection
Connection conn = DriverManager.getConnection(url, user_id, user_pw);
// 3. info 테이블에 id - lihyun, pw - 1234 데이터 삽입
String sql = "insert into info values('psu', '1234')";
PreparedStatement psmt = conn.prepareStatement(sql);
int cnt = psmt.executeUpdate();
if(cnt>0) {
System.out.println("회원가입 성공");
}else {
System.out.println("회원가입 실패");
}
if(conn != null) {
System.out.println("연결");
}else {
System.out.println("연결 실패");
}
위에서 연결은 해보았다. 그렇다면 이번에는 데이터 삽입인데.
.sql 이라는 변수에 내가 오라클에 집어 넣을 명령문을 집어 넣고, .PreparedStatement라는 명령어 및 객체를 통해 내가 연결한 ( 여기서는 .conn이라는 변수에 넣어줬다. ) 오라클 DB에 수행할 작업을 입력하는것으로 내가 지정한 작업을 수행시킬 수 있다.
executeUpdate 는 DB에서 추가, 삭제, 수정 등의 데이터를 건드리는 SQL문을 실행하게 해준다.
--> 해당 메서드의 반환 값은 해당 SQL문 실행에 영향을 받은 행(Row)의 수를 반환한다.
@동적로딩
=> Java는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다.
동적 로딩의 장점과 단점
-일부 클래스가 변경되어도 전체 어플리케이션을 다시 컴파일 하지 않아도 된다.
-변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 어플리케이션을 작성할 수 있다.
-C언어와 다르게 코드 블럭이 이곳 저곳에 위치해 있어도 된다.
-다형성과 같은 객체지향 개념이 적용될 수 있게 해준다.
-실행 시 연결된 부분에 대한 판단을 해야하므로 속도 측면에서는 불리하다.
클래스 동적 로딩의 종류
-로드 타임 동적 로딩 : 하나의 클래스를 로딩하는 과정에서 필요한 다른 클래스를 동적으로 로딩하는 것
-런타임 동적 로딩 : 코드를 실행하는 순간에 필요한 클래스를 로딩하는 것
@Dead Code
=> 직역하면 죽은 코드. 간단히 말해서 자바 클래스내에서 실행되지 않을 코드를 말한다. 예로 들면
int a = 0;
if(a>0){
//Dead Code
} else{
System.out.println("0보다 크지 않다.");
}
위에서 첫번째 조건문에 해당하는 부분을 Dead Code 라고 한다.
@finally - 예외처리
==> 자바에서의 try-catch문에서 사용할 다른 명령어. 간단히 말하면 오류의 여부와 관계 없이 무조건 실행되는 구간을 말한다.
-> do-while문에서 do 안의 실행문과 비슷한 개념이다.
asd
이벤트 디스패처 공부해보기
'국비교육기관 > 수업' 카테고리의 다른 글
28일차_자바_JDBC (0) | 2021.04.21 |
---|---|
27일차_자바_GUI_StaticMain살짝 / JDBC_DAO_DTO (0) | 2021.04.20 |
25일차_자바_GUI (0) | 2021.04.16 |
24일차_자바_상속_오버라이딩_캐스팅 (0) | 2021.04.15 |
23일차_자바_ArrayList_MVC (0) | 2021.04.14 |
댓글