본문 바로가기

Swing/JScrollPane

JScrollPane example

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);
	}
}