Java JScrollBar

2023. 2. 5. 11:53Java

프로젝트 내 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