JScrollPane 예제 - JScrollPane yeje


Swing/JScrollPane

2015. 7. 21. 16:52

Java Swing, JScrollPane example

JScrollPane 은 JList 등 다른 콤포넌트를 안에 두고 가장자리에 스크롤바를 생성해주는 컨테이너 클래스이다

예를 들어, JList 에 포함된 항목 5개만 보여지고 그 이상의 항목이 있는 경우에는 수직 스크롤바가 나타나게 하려면 다음과 같이 하면 된다

JList<String> list = new JList<>();

   .....

list.setVisibleRowCount(5);

JScrollPane sp = new JScrollPane(list);

sp.setBounds(100,20,sp.getPreferredSize().width, sp.getPreferredSize().height );

contentPane.add(sp);

package org.kdea.swing;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import java.util.*;

public class MyFrame extends JFrame {

	private Container contentPane;
	private JButton btn;
	private JLabel lbl;
	private JList<String> list;
	private JScrollPane sp;
	
	public MyFrame(String title) {
		super(title);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setBounds(200, 100, 500,500);
		contentPane = getContentPane();
		contentPane.setLayout(null);

		java.util.List<String> data = new ArrayList<>();
		data.add("강호동");
		data.add("이수근");
		data.add("김병만");
		data.add("박세리");
		data.add("박찬호");
		data.add("김연아");
		MyListModel mlm = new MyListModel(data);
		
		list = new JList<>();
		//list.setBounds(100, 20, 150, 200); // 크기와 위치는 SP에서 지정함
		list.setVisibleRowCount(5); // 보여질 아이템 수 설정
		list.setModel(mlm);
		sp = new JScrollPane(list);
		sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		int width = sp.getPreferredSize().width; // 적절한 폭
		int height = sp.getPreferredSize().height; // 적절한 높이
		sp.setBounds(100, 20, width, height);
		contentPane.add(sp);
		
		btn = new JButton("색상선택");
		btn.setBounds(261, 20, 100, 20);
		btn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				java.util.List<String> data = new ArrayList<>();
				data.add("흰색"); data.add("노랑"); data.add("청색"); data.add("홍색");
				data.add("색1"); data.add("색2"); data.add("색3"); data.add("색4");
				MyListModel mlm = new MyListModel(data);
				list.setModel(mlm);
			}
		});
		contentPane.add(btn);
		
		setVisible(true);
	}
}


next → ← prev

A JscrollPane is used to make scrollable view of a component. When screen size is limited, we use a scroll pane to display a large component or a component whose size can change dynamically.

Constructors

ConstructorPurpose
JScrollPane() It creates a scroll pane. The Component parameter, when present, sets the scroll pane's client. The two int parameters, when present, set the vertical and horizontal scroll bar policies (respectively).
JScrollPane(Component)
JScrollPane(int, int)
JScrollPane(Component, int, int)

Useful Methods

ModifierMethodDescription
void setColumnHeaderView(Component) It sets the column header for the scroll pane.
void setRowHeaderView(Component) It sets the row header for the scroll pane.
void setCorner(String, Component) It sets or gets the specified corner. The int parameter specifies which corner and must be one of the following constants defined in ScrollPaneConstants: UPPER_LEFT_CORNER, UPPER_RIGHT_CORNER, LOWER_LEFT_CORNER, LOWER_RIGHT_CORNER, LOWER_LEADING_CORNER, LOWER_TRAILING_CORNER, UPPER_LEADING_CORNER, UPPER_TRAILING_CORNER.
Component getCorner(String)
void setViewportView(Component) Set the scroll pane's client.

JScrollPane Example

Output:

JScrollPane 예제 - JScrollPane yeje

Next TopicJava JSplitPane

← prev next →

오늘은 자바 스윙중에서 JScrollPane에 대해서 공부해 보기로 하겠다. 말이 디립게(?) 어려운데 이해하기 쉬운 용어로 다시 풀이하자면 '스크롤바'를 떠올리면 되겠다. 그럼 그림을 보자.

JScrollPane 예제 - JScrollPane yeje

이젠 칼라로 볼까?

JScrollPane 예제 - JScrollPane yeje

그림 더 보기로 하자.

JScrollPane 예제 - JScrollPane yeje

JScrollPane에 대해서 공부하다보면 자연스럽게 알게되는 용어들인데 해당 단어가 무엇을 뜻하는지 그림을 통하면 여러분이 보다시피 훨씬 쉬울 것이다. 위의 사진에서 아기가 외국 아가(?)인 것은 자바가 외국에서 만들어져서 그런 것이다. 아마 한국이였으면 한국 아가(?)를 예제로 써먹을 것이라는 우스갯 소리 아닌 소리를 하면서 본격적인 프로그램으로 들어가보겠다.^^

이제 볼 예제 프로그램을 소개하자면 항상 그렇지만 필자는 오로지 핵심 그리고 초간단 예제, 즉 프로그래밍의 완전 초짜(?)도 신기하게 이해하는 프로그램을 제작하였다. 프로그래밍은 고수일수록 프로그램이 아주 간단하고 명료하며 하수일수록 프로그램이 아주 복잡하고 길다. 따라서 모르는 사람들이 보면 프로그램 길게 쓰는 사람이 고수인줄 아는데 큰 착각이다.ㅎㅎ 오늘 예제를 보면 필자에게서 고수의 풍모를 유감없이 느낄 것이라 본다.^^ 쉿~ 묻지도 말고 따지지도 말고 결과부터 자봐(JAVA)! ㅎㅎ

JScrollPane 예제 - JScrollPane yeje

허걱 웬 아가씨가~ ㅎㅎ 아주 눈들이 초롱초롱 빛나는구나 *_*
그냥 패널안에다가 text나 써놓고 JScrollPane 자바소스 공부하려다가 여러분의 의욕과 정열(?)을 고취시키기 위해 필자가 특별히 이쁜이(?)를 긴급 섭외해서 여러분께 소개하니 집중해서 소스를 보기로 하자. ㅎㅎ 오늘은 강조안해도 눈에 불을 키고 들고 팔것 같구나.^^

다시 본론으로 가서 결과물 사진을 보면 오른쪽 옆과 아래쪽 밑에 스크롤바를 움직여 사진의 안보이는 쪽을 볼수 있게 하고 있다. 만약 JScrollPane이라는 클래스를 프로그램에서 구현하지 않았다면 사진이 그냥 짤려서 나오지 저렇게 스크롤바가 나오지 않는다. 그럼 어떻게 하면 스크롤바가 튀어나오게 해서 이쁜이(?)를 제대로 볼수 있을까? *_- 그것이 오늘의 핵심이다. 예제를 보기전에 미리 생각 좀 때려보고 모르겠거든 자기 머리를 힘차게 때린후에 아래 예제를 보도록 한다.

JScrollPane 예제 - JScrollPane yeje

소스를 보면 중간에 네줄이 오늘 배울 내용인데 보다시피 코드가 굉장히 심플하다. 왜냐? 강조안하겠다.ㅎㅎ 중간에 위의 ImageIcon 클래스를 불러들여 레이블에 저렇게 이미지를 집어넣고 있는데 그림파일을 스윙에서 구현할때 쓰이는 표현방식이니 어떻게 쓰는지 관심있게 보면서 익숙해지기 바란다. 그림파일은 소스와 같은 디렉토리에 두면 작동된다. 혹시 Icon이랑 ImageIcon이랑 매치가 안되는걸 이상하게 생각하고 있는 이들은 필자가 아주 오래전에 상속부분인가 거기에서 저렇게 다른식으로 쓰는 방법이 있다고 하였으니 찾아보기 바라고 여기선 Icon이 클래스가 아니라 인터페이스일텐데 그것도 라이브러리 찾아보면 나오는 것이니 게으름피지말고 확인해보기 바란다. 중간 밑에 두줄은 말 그대로 스크롤바 만들려고 객체생성해서 사진 넣고 셋팅하는 명령어다. 만약에 밑에 두줄 없이 바로 프레임의 add 메소드에다가 사진 집어넣으면 스크롤바가 당근 안뜬다. 궁금하면 확인해보길 바라면서 오늘은 이렇게 끝내겠다.^^ 아차 그리고 사진속 소녀의 이름이 궁금한 이들은 필자가 예제소스에다 이름써놓았으니 괜히 또 묻지말아라.ㅎㅎ