2023. 2. 5. 11:53ㆍJava
프로젝트 내 src 내 javabasic 패키지 내 Ex1ScrollColor.java
package javabasic;
import java.awt.Color;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollBar;
import javax.swing.border.LineBorder;
public class Ex1ScrollColor extends JFrame {
JScrollBar sbRed, sbGreen, sbBlue;
JLabel lblRed, lblGreen, lblBlue;
int red = 223, green = 196, blue = 219;
JLabel lblColor;
public Ex1ScrollColor(String title) {
// TODO Auto-generated constructor stub
super(title);
this.setBounds(700, 100, 500, 300);// 시작위치x,y,크기 w,h
// super로 해도 되고 this로 해도 됨 super는 조상
// this로 해도 상속을 받아서 괜찮음
// this.getContentPane().setBackground(Color.orange);//프레임위에 있는 패널의 색상 변경
this.getContentPane().setBackground(Color.white);// 프레임위에 있는 패널의 색상 변경
this.setDesign();// 디자인 코드
this.setVisible(true);// 보이게 하기
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 프로그램을 종료해주는 메서드
}
public void setDesign() {
this.setLayout(null);
// 앞에 제목 부분
JLabel lbl1 = new JLabel("Red");
lbl1.setBounds(10, 20, 40, 20);
this.add(lbl1);
JLabel lbl2 = new JLabel("Green");
lbl2.setBounds(10, 100, 40, 20);
this.add(lbl2);
JLabel lbl3 = new JLabel("Blue");
lbl3.setBounds(10, 180, 40, 20);
this.add(lbl3);
// 스크롤바 부분
// sbRed = new JScrollBar(JScrollBar.HORIZONTAL, red, 33, 0, 256); // extent 파라메터 값이 여기서는 33까지만 넣을 수 있다.
sbRed = new JScrollBar(JScrollBar.HORIZONTAL, red, 1, 0, 256); // 원래 최고값은 256 이라서 스크롤바를 최대로 올리면
// 256이 나와야 하지만 extent 파라메터에 1 이라는 숫자를 주었다. 그러면 여기서는
// 최댓값 - extent 값, 즉 256 - 1 = 255. 오른쪽으로 스크롤을 해서 최대로 보이는 숫자가 255 가 된다.
// 만약 extent 값이 2 라면, 256 - 2 = 254. 스크롤 시 최댓값이 보이는 범위는 최대 254 로 보인다.
sbRed.setBounds(70, 20, 200, 20);
this.add(sbRed);
sbGreen = new JScrollBar(JScrollBar.HORIZONTAL, green, 1, 0, 256);
sbGreen.setBounds(70, 100, 200, 20);
this.add(sbGreen);
sbBlue = new JScrollBar(JScrollBar.HORIZONTAL, blue, 1, 0, 256);
sbBlue.setBounds(70, 180, 200, 20);
this.add(sbBlue);
// 라벨-숫자 출력부분
lblRed = new JLabel(String.valueOf(red), JLabel.CENTER);
lblRed.setBounds(280, 20, 40, 20);
lblRed.setBorder(new LineBorder(Color.red));
this.add(lblRed);
lblGreen = new JLabel(String.valueOf(green), JLabel.CENTER);
lblGreen.setBounds(280, 100, 40, 20);
lblGreen.setBorder(new LineBorder(Color.green));
this.add(lblGreen);
lblBlue = new JLabel(String.valueOf(blue), JLabel.CENTER);
lblBlue.setBounds(280, 180, 40, 20);
lblBlue.setBorder(new LineBorder(Color.blue));
this.add(lblBlue);
// 색상 라벨 부분
lblColor = new JLabel();
lblColor.setOpaque(true);// 불투명모드로
lblColor.setBackground(new Color(red, green, blue));
lblColor.setBounds(340, 20, 130, 180);
this.add(lblColor);
// red 스크롤바 이벤트
sbRed.addAdjustmentListener(new AdjustmentListener() {
@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
// TODO Auto-generated method stub
// 스크롤된 레드값을 red변수에 저장
red = sbRed.getValue();// 스크롤하는 현재값으로 반환
// 라벨에 출력
lblRed.setText(String.valueOf(red));
// 칼라 클래스 생성후 라벨의 배경색 변경
Color color = new Color(red, green, blue);
lblColor.setBackground(color);
}
});
// green
sbGreen.addAdjustmentListener(new AdjustmentListener() {
@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
// TODO Auto-generated method stub
green = sbGreen.getValue();
lblGreen.setText(String.valueOf(green));
Color color = new Color(red, green, blue);
lblColor.setBackground(color);
}
});
// blue
sbBlue.addAdjustmentListener(new AdjustmentListener() {
@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
// TODO Auto-generated method stub
blue = sbBlue.getValue();
lblBlue.setText(String.valueOf(blue));
Color color = new Color(red, green, blue);
lblColor.setBackground(color);
}
});
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Ex1ScrollColor("색상표");
}
}
javax.swing.JScrollBar.JScrollBar(int orientation, int value, int extent, int min, int max)
JScrollBar(int orientation, int value, int extent, int min, int max) 생성자 함수에서
"extent" 파라메터는 볼 수 있는 영역의 크기를 말하는데, 이것은 또한 "보이는 양" 으로도 알려져 있다.
이해가 안되서 찾아보았다.
extent 가 보이는 영역이라기 보다는 int max 파라메터 값에서 제외할 크기 인 듯 하다..
그래서 int max 값에서 int extent 값을 뺀 값이 최종적으로 보이는 최댓값 크기이다.
만약에 int max 파라메터 값이 256 이고 내가 보여주고 싶은 빨간색 값은 0 부터 255 라고 하면
256 은 보여주면 안되니까 int extent 파라메터 값에 1 을 대입하면 된다. 그러면
256 - 1 = 255 가 나와서 스크롤바 상에 보이는 최댓값은 255 가 된다.
위의 코드를 실행할 때 단축키로
Ctrl + F11 을 눌러도 된다.
그런데 본인은 실수로
F11 키만 누르게 되었다. 몇 번 정도 그랬다.
그런데 F11 키를 누르니 그건 Debug 단축키 였다.
그래서 내가 잘 모르는 브레이크포인트가 잡힌 듯 했다.
후에 Ctrl + F11 로 다시 실행했을 때 브레이크포인트가 잡힌 곳 줄이 항상 초록색으로 마킹이 되었고
무언가 그곳에서부터 시작하는 듯한 생각이 들고 번거롭다는 생각이 들었다.
코드를 적은 곳에 줄숫자가 적혀있는곳 왼쪽에 스크롤바는 아니지만 비슷한 빈 수직으로된 영역이 있는데
그 영역에 파란색 화살표 표시가 잡혀 브레이크포인트가 되어있었다. 그것을 없애고 싶었다.
현재 프로젝트에 설정된 모든 브레이크포인트를 한 눈에 확인할 수 있다.
Window > Perspective > Open Perspective > Other... > Debug 를 선택해서
Open 을 선택한다.
오른쪽에 디버그와 관련된 다양한 탭과 창 하나가 뜬다. 그 창 내에
Breakpoints 탭을 선택한다. 그 탭에서 프로젝트 내 설정된 모든 브레이크포인트를 확인할 수 있는데
본인이 보는 창에는 하얗게 아무것도 보이지 않았다. 그럴 때는 코드 창 왼쪽에 줄숫자 왼쪽에 스크롤바 같이 생긴
비어있는 수직의 긴 줄 영역에 보이는 파란색 화살표가 있는 곳에 마우스 오른쪽 클릭을 누른다.
그러면 메뉴중에 Toggle Breakpoint 를 선택하면 Debug 창 내에 Breakpoints 탭에 브레이크포인트에 대한 내용이 뜬다.
브레이크포인트의 삭제(해제)를 위해서는, Breakpoints 탭의 빈 영역에 마우스 오른쪽 버튼을 클릭한다. 메뉴가 뜨면
메뉴에서 Remove All 을 클릭한다. Remove All Breakpoints 창에 Are you sure you want to remove all breakpoints? 와 같이 의견을 묻는 창이 나올 수 있다. Yes 버튼 같은 것이 있으면 그것을 누르면 된다. 그러면 프로젝트 내 모든 브레이크포인트들이 제거된다.
'Java' 카테고리의 다른 글
Java StringBuffer 와 StringBuilder (0) | 2023.02.05 |
---|---|
Java getSource() (0) | 2023.02.05 |
Java WindowAdapter (1) | 2023.02.03 |
Java DefaultTableModel (0) | 2023.02.03 |
Java JTable (1) | 2023.02.03 |