JList

 

여러 개의 선택 항목 중에서 하나를 선택하기 위한 컴포넌트

 

리스트는 한 줄에 하나씩 선택 항목을 나타내며 화면은 스크롤이 가능하다.

 

사용자가 마우스로 선택한 항목을 더블 클릭하거나 엔터 키를 눌렀을 때 액션 이벤트가 발생한다.

 

생성자의 매개변수로 받을 ListModel은 디폴트일 경우 변경이 불가하여, 리스트에 항목을 추가하거나 삭제할 수 없다.

 

개별적으로 변경될 수 있는 리스트를 생성하기 위해서는 리스트 모델을 DefaultListModel의 인스턴스로 변경하여야 한다. 이는 setModel() 메소드를 호출함으로서 가능하다.

 

생성자

 JList() 

 빈 리스트를 생성한다.

 JList(Object[] items)

 매개변수로 받은 배열에 있는 값들을 가진 리스트를 생성한다.

 JList(ListModel list)

 지정된 리스트 모델을 사용하는 리스트를 생성한다.

 JList(Vector[] items) 

 벡터에 있는 값들을 가지고 선택항목을 생성한다.


- 선택 모드 : 디폴트값은 다중 구간 선택이다.

  • SINGLE_SELECTION : 단일 선택으로, 한 번에 하나의 항목만이 선택된다.

  • SINGLE_INTERVAL_SELECTION : 단일 구간 선택으로, 여러 개의 연속적인 항목들이 선택될 수 있다. 처음 클릭한 항목에서 쉬프트 키(Shift)를 누른 채로 원하는 범위의 항목(마지막 항목)까지 선택할 수 있다.

  • MULTIPLE_INTERVAL_SELECTION : 다중 구간 선택으로, 디폴트로 항목들이 자유롭게 선택될 수 있다. 연속적이지 않더라도 컨트롤 키(Ctrl)를 누른 채로 클릭하는 항목들은 모두 선택된다.


선택 모드를 변경하고 싶으면 setSelectionMode() 메소드를 호출하여 매개변수로 아래의 선택 모드 중 하나를 지정하면 된다.

  • ListSelectionModel.SINGLE_SELECTION

  • ListSelectionModel.SINGLE_INTERVAL_SELECTION

  • ListSelectionModel.MULTIPLE_INTERVAL_SELECTION

 

String[] listStr= { “김철수”, “김영희”, “김숙자”, “김자몽” };

JList myList= new JList(listStr); //생성자로 선택항목을 넘기는 것이 가장 일반적인 방법

myList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);


 

이벤트 처리 : 리스트의 항목이 선택되면 리스트 선택 이벤트(ListSelectionEvent)가 발생한다. 해당 이벤트를 처리하려면 리스트 선택 리스너(ListSelectionListener) 인터페이스를 구현함으로써 해결할 수 있다. 리스트 선택 리스너에는 아래의 메소드 하나만 구현하면 된다.


@Override

public void valueChanged(ListSelectionEvent e) {

if (list.getSelectedIndex() == -1) { //getSelectedIndex() : 선택한 항목 인덱스 값 반환

//선택이 되지 않은 경우

} else { //선택되지 않은 경우 1을 반환한다.

//선택이 된 경우

}

 

if (list.getSelectedItem().equals(name) { //getSelectedItem() : 선택한 항목의 이름 반환

// 항목 이름이 name인 선택된 경우

} else {

// 선택되지 않았거나선택된 항목 이름이 name이 아닌 경우

}

 

if (list.getSelectedValue()!=null) { //getSelectedValue() : 선택된 항목(Object 타입반환

//하나라도 선택된 경우

} else {

//하나도 선택되지 않은 경우

}

}


 

경계선 만들기 : 다른 컴포넌트에도 있는 메소드이다. 숫자 1은 선의 굵기이다.

 

myList.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));

 

화면에 표시되는 행 수 설정 : 스크롤 바 추가를 위해 행 수를 설정하는 것이 좋다.

 

listStr.setVisibleRowCount(10);

JScrollPane scrollPane = new JScrollPane(listStr);

scrollPane.setPreferredSize(new Dimension(300, 300)); //사이즈 설정

panel.add(scrollPane); //꼭 필요한 과정자주 까먹는 부분이니 주의바람.

 


리스트 항목 추가 : 디폴트 리스트 모델은 변경할 수 없기 때문에 새로운 DefaultListModel 인스턴스를 생성하여 생성자의 매개변수로 전달하여야 한다.

 

DefaultListModel model = new DefaultListModel();

model.addElement(“김철수”);

model.addElement(“김영희”);

model.addElement(“김숙자”);

model.addElement(“김자몽”);


JList myList = new JList(model); 


//또는


JList myList = new JList();

myList.setModel(model);

 

리스트 항목 제거

 

int index = 2;

model.remove(index); //위의 순서에서 인덱스가 2인 김숙자가 리스트에서 삭제된다.

 

-리스트 항목 삽입

 

model.insertElementAt("김커피", 1); //인덱스 1인 "김영희" 위치에 "김커피" 삽입된다.



- JList 예제

public class ListTest extends JFrame implements addListSelectionListener{

	//FIELDS
	private JLabel = new JLabel();
	private JTextField selectedList = new JTextField(10); //10글자까지 가능
	private JPanel listPanel = new JPanel();
	private JPanel labelPanel = new JPanel();
	private JList list;
	private JScrollPane scroll;
	private String[] names = {"김철수", "김영희", "김숙자", "김자몽"};

	//CONSTRUCTOR
	public ListTest() {
		setTitle("리스트 예제");
		setSize(500, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //프레임을 껐을 때 완전한 종료
		
		list = new JList(names);

		//리스트의 경계선 설정
		list.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));

		//리스트에 스크롤바 추가
		scroll = new JScrollPane(list);
		scroll.setPreferredSize(new Dimension(300, 300));

		//리스트의 단일 선택 모드 변경
		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		
		//리스트 선택 리스너 등록
		list.addListSelectionListener(this);

		label.setText("선택된 항목 : ");
		selectedList.setEditable(false); //텍스트 필드 수정 불가상태로 바꾸기

		listPanel.add(scroll); //리스트를 패널에 추가
		labelPanel.add(label); //라벨을 패널에 추가
		labelPanel.add(selectedList); //텍스트 필드를 패널에 추가

		add(listPanel, BorderLayout.CENTER); //프레임 중앙에 리스트를 배치
		add(labelPanel, BorderLayout.SOUTH); //프레임 하단에 라벨과 텍스트 필드 배치

		setVisible(true);
	}

	//METHODS
	@Override
	public void valueChanged(ListSelectionEvent e) {
		// 선택된 이름 얻기
		String name = (String) list.getSelectedValue();

		selectedList.setText(name);
	}

	public static void main(String[] args) {
		ListText listFrame = new ListTest();
	}
}










텍스트 컴포넌트

 

텍스트 컴포넌트들은 텍스트를 표시하며 사용자가 텍스트를 편집하거나 입력할 수 있게 하는 컴포넌트이다.

 

모든 텍스트 컴포넌트들은 JTextComponent 클래스를 부모 클래스로 가지며 상속받는다.


JTextComponent

카테고리

종류

설명

텍스트 필드

JTextField

한 줄로 된 텍스트를 표시하고 편집할 수 있다. 일반적으로 사용자로부터 적은 양의 텍스트를 입력받을 때 사용한다.

JPasswordField

JFormattedTextField

단순 텍스트 영역

JTextArea

여러 줄의 편집 가능한 텍스트를 나타낸다. 텍스트 영역에서는 동시에 하나의 폰트만 사용할 수 있다. 폰트는 변경 가능하다. 텍스트 영역은 사용자로 하여금 비교적 형식적인 제약이 없는 장문의 텍스트를 입력하는데 사용된다.

스타일 텍스트 영역

JEditorPane

스타일 텍스트 영역은 두 개 이상의 폰트를 동시에 사용할 수 있다. 단순 텍스트 영역의 추가 기능으로 이미지 컴포넌트도 내장할 수 있어서 고급 수요에 적합한 강력한 다용도 컴포넌트이다. 하지만 스타일 텍스트 영역은 초기에 설정해주어야 하는 것들이 많이 있다.

JTextPane



- 텍스트 편집 기능


메소드

설명

void setEditable(boolean editable)

편집 가능 여부를 설정한다.

boolean isEditable()

편집 가능하면 true, 아니면 false를 반환한다.

void setDragEnabled(boolean drag)

드래가 가능 여부를 설정한다.

boolean getDragEnabled()

드래그 가능하면 true, 아니면 false를 반환한다.



속성 설정 기능

 

메소드

설명

String getSelectedText()

현재 선택된 텍스트를 반환한다.

void selectAll()

모든 텍스트를 선택한다.

void select(int start, int end)

startend 사이의 텍스트를 선택한다.

void setSelectionStart(int start)

현재 선택된 위치를 설정하거나 반환한다.

void setSelectionEnd(int end)

int getSelectionStart()

int getSelectionEnd()

void cut()

시스템의 클립보드에 텍스트를 자르거나 복사하거나 붙여넣는다.

void copy()

void paste()

void replaceSelection(String s)

선택된 텍스트를 매개변수로 받은 문자열로 대체한다.



카렛 조작 기능 : 카렛(caret)이란 입력의 위치를 표시하는 커서이다.


메소드

설명

void setCaretPosition(int point)

문서 내의 카렛의 위치를 설정하거나 움직이거나 반환한다.

void moveCaretPosition(int point)

int getCaretPostion()

 


텍스트 입출력


메소드

설명

void read(Reader r, Object obj)

텍스트를 읽거나 다른 Writer 객체에 쓴다.

void write(Writer w)

String getText()

컴포넌트에 입력된 텍스트를 반환한다.

void setText(String str)

텍스트를 매개변수로 받은 str로 설정한다.

 

 

 

텍스트 필드(JTextField)

 

입력이 가능한 한 줄의 빈칸을 만드는 용도로 사용된다.

 

편집 여부를 결정할 수 있고, 편집을 안 할 경우 표시 전용이 된다.

 

텍스트 필드 안에서 문자열을 선택하거나 선택한 문자열을 복사 또는 붙이는 것도 가능하다.

 

텍스트 필드는 JPasswordField 클래스와 JFormattedTextField 클래스를 서브 클래스로 가지므로 두 클래스는 텍스트 필드의 메소드를 상속받는다.


JTextField

생성자

JTextField()

빈 텍스트 필드를 생성한다.

JTextField(int columns)

지정된 칸 수를 가진 텍스트 필드를 생성한다.

JTextField(String text)

지정된 문자열로 초기화된 텍스트 필드를 생성한다.

JTextField(String text, int columns)

칸 수와 문자열이 지정된 텍스트 필드를 생성한다.

메소드

void setText(String text)

현재 텍스트 필드 문자열을 설정한다.

String getText()

현재 텍스트 필드 문자열을 반환한다.

void setEditable(boolean editable)

사용자가 텍스트 필드를 수정 할 수 있는지를 설정한다.

boolean isEditable()

수정할 수 있으면 true, 아니면 false를 반환한다.

void setColumns(int colmuns)

텍스트 필드 칼럼의 크기를 설정한다.

int getColumns()

텍스트 필드 칼럼의 크기를 반환한다.

void setHorizontalAlignment(int p)

텍스트(문자열)의 정렬 방법을 설정하고 반환한다. 아래는 매개변수이다

  • JTextField.LEADING,

  • JTextField.CENTER,

  • JTextField.TRAILING

int getHorizontalAlignment()

void addActionListener(Action-

Listener actionListener)

액션 리스너를 추가하고 제거한다.

액션 이벤트는 텍스트 필드에 입력한 후 엔터를 치면 발생한다.

void removeActionListener(Action-

Listener actionListener)

void selectAll()

텍스트 필드의 모든 문자열을 선택한다.

 

주로 필드에 있는 텍스트를 제거하기 위해 아래와 같은 방법을 사용한다.


JTextField textField = new JTextField(“아무말 대잔치”);

textField.setText(“”); //자주 사용되는 방법

 

//입력을 위해 키보드 포커스를 텍스트 필드로 가져오려면 아래와 같은 방법을 사용한다.

textField.requestFocus();


 

 

 

패스워드 필드(JPasswordField)

 

패스워드 필드는 문자 그대로 비밀번호(암호)를 입력받을 때 사용된다.

 

입력받은 문자열은 모두 문자 *로 표기된다.


- 생성(선언) 방식은 JTextField 와 같다.


패스워드 필드는 텍스트 필드를 상속받으며 추가로 아래와 같은 메소드가 제공된다.


JPasswordField

메소드

설명

void setEchoChar(Char c)

화면에 대신 보여주는 문자를 지정한다.

char getEchoChar()

화면에 대신 보여주는 문자를 반환한다.

char[] getPassword()

사용자가 입력한 암호를 문자 배열 형태로 반환한다.

 

 

 

형식화 텍스트 필드(JFormattedTextField) 


형식화 텍스트 필드는 형식에 맞는 데이터를 입력 받을 때 사용한다.

 

예를 들어 날짜, 숫자, 금액, 전화 번호처럼 특정한 형식이 있는 데이터를 입력 받는 데 편리하다.

 

텍스트 필드를 상속받으며, 포매터(formatter)와 값(value)라는 속성이 추가된다. 포매터(Formatter)란 텍스트 필드의 값을 텍스트로 변환하여서 표시하고 반대로 텍스트를 값으로 변환하는 역할을 한다.

 

많이 사용되는 포매터는 DateFormatter(날짜 입력), NumberFormatter(다양한 형식의 숫자 입력), MaskFormatter(###-###형식의 전화번호 입력)이 있다.

 

JFormattedTextField

생성자

JFormattedTextField()

빈 형식화 텍스트 필드를 생성

JFormattedTextField(Format format)

지정된 포매터의 형식화 텍스트 필드를 생성

JFormattedTextField(JFormattedTextField

.AbstractFormatter formatter)

구체화된 추상화 포매터를 매개변수로 넘겨받아 해당 포매터의 형식화 텍스트 필드를 생성한다. 매개변수는 아래와 같다.

  • DataFormatter,

  • NumberFormatter,

  • MaskFormatter

JFormattedTextField(JFormattedTextField

.AbstractFormatterFactory factory)

구체화된 추상화 포매터팩토리를 매개변수로 넘겨받아 해당 팩토리의 형식화 텍스트 필드를 생성

JFormattedTextField(JFormattedTextField

.AbstractFormatterFactory factory,

Object currentValue)

팩토리와 초기값을 지정받은 형식화 텍스트 필드를 생성

JFormattedTextField(Object value)

초기값을 지정 받은 형식화 텍스트 드 생성

 

JFormattedTextField dateField = new JFormattedTextField(new DateFormatter());

dataField.setValue(new Date());

dateField.addpropertyChangeListener(“value”, this);





텍스트 영역(JTextArea)

 

앞의 텍스트 필드보다 더 많은 줄의 텍스트를 입력할 때 사용된다.

 

텍스트 영역은 디폴트값으로 편집 가능상태를 가진다.

 

아래의 생성자에서 넘겨받은 매개변수는 행과 열을 의미하며, 텍스트 영역은 스크롤되지 않기 때문에 스크롤 페인(ScrollPane)을 붙여야 스크롤 설정을 할 수 있다.


JTextArea

생성자

JTextArea()

비어있는 새로운 텍스트 영역을 생성한다.

JTextArea(int rows, int columns)

지정된 줄 수와 칸수의 비어있는 텍스트 영역을 생성한다.

JTextArea(String text)

지정된 텍스트가 입력된 텍스트 영역을 생성한다.

메소드

void setColumns(int columns)

텍스트 영역의 열의 개수를 설정

int getColumns()

텍스트 영역의 열의 개수를 반환

void setRows(int rows)

텍스트 영역의 행의 개수를 설정

int getRows()

텍스트 영역의 행의 개수를 반환

int setTabSize(int size)

하나의 탭이 몇 개의 문장에 해당되는지를 설정

int setLineWrap(boolean wrapped)

한줄이 너무 길면 줄을 자동으로 분리할 것인지를 결정하며, 디폴트는 false이다.

void append(String text)

텍스트 영역의 끝에 문자열을 추가한다.

void insert(String text, int position)

지정된 위치에 지정된 문자열을 삽입한다.

void replaceRange(String text, int start, int end)

지정된 문자열로 start에서 end까지의 위치의 문자열을 바꾼다.

int getLineCount()

줄의 개수를 반환한다.






 

 

경로 지정

 

외부로부터 이미지나 음악 파일 등을 불러올 때 항상 경로를 지정해야 한다.

 

경로를 지정하는 방식은 상대경로, 절대경로 두 가지가 있다.

 

상대경로 : 현재 위치한 곳을 기준으로 경로를 지정하는 방식인데, 소스파일이 있는 프로젝트 디렉토리 내에 외부 파일이 있다면 이미지 파일이름만 지정해도 된다.


ex) C:\users 위치에 A폴더와 Image폴더가 있고, A 폴더 안에 소스파일이, Image 폴더에 이미지 파일이 있다면, 해당 이미지 파일을 가져오기 위해 소스파일이 있는 A폴더 위치를 기준으로


상대경로를 지정하는데 몇 가지 규칙이 존재한다.

  • \ : 루트 디렉토리 ex) C:

  • .\ : 소스를 적고 있는 파일의 위치 ex) C:\users\A

  • ..\ : 소스파일을 포함하는 상단 폴더가 있는 위치 ex) C:\users (해당 경로의 디렉토리에는 A폴더와 Image 폴더가 있다.)

 

“.\Image\이미지파일명 라고 지정하면 된다.

 

- 보통 Toolkit 객체를 통해 이미지 파일을 얻는다.


 Image img = Toolkit.getDefaultToolkit().getImage(“.\Image\이미지파일명”);


(getDefaultToolkit() 메소드는 Toolkit 객체를 반환한다무조건 이렇게 객체를 얻어야함.)



 

절대경로 : 웹사이트의 URL 주소, 컴퓨터에서 파일이 있는 위치


ex) 

https://www.naver.com/

C:\Program Files\Java\jdk1.8.0_131

 

절대경로를 지정하기 위해 자바에서는 다양한 메소드가 제공된다.

 

A 클래스의 디렉토리에 Image 폴더가 있고, 해당 폴더 안의 이미지를 구한다면A 클래스의 디렉토리에 접근하고자 “A.class.getResource(“”).getPath();“ 를 사용하면 된다.


결론적으로 아래의 방법을 통해 폴더 안의 이미지 파일의 절대 위치를 얻게 되는 것이다.


String imgPath = A.class.getResource("").getPath() + "\Image\이미지파일명";


Toolkit 객체에 절대 경로를 넣는 방법도 있다.

 

Image img = Toolkit.getDefaultToolkit().getImage("C:\users\Image\이미지파일명");


 

 

이미지 표시하기

 

거의 모든 스윙 컴포넌트에는 텍스트 옆에 이미지를 표시하거나 레이블(JLabel), 버튼(JButton)에도 이미지를 표시할 수 있다.

 

이미지를 얻으려면 Image 객체 또는 ImageIcon 객체를 생성해야 한다. 위에서 Image 객체를 얻는 방법을 위에 설명했으니 ImageIcon 객체를 통해 이미지를 얻는 방법을 살펴볼건데, 실제로 레이블과 버튼의 아이콘 설정(setIcon)을 할 때, ImageIcon 객체를 매개변수로 넘겨야 한다.


ImageIcon img = new ImageIcon("절대경로 또는 상대경로").getImage();

 

이미지 파일의 경로가 지정되지 않고 파일 이름만 줄 경우, 프로젝트 디렉토리 내에 파일이 있는 것으로 가정된다.


ImageIcon img = new ImageIcon("image.png").getImage();


JLabel label = new JLabel();

label.setIcon(img);


//또는


JLabel label = new JLabel(img);


 

 

체크 박스

 

- JCheckBox 클래스란 사용자가 클릭하여 체크 상태 여부를 결정하는 일종의 컨트롤이다.s


JCheckBox

생성자

JCheckBox()

텍스트가 없는 Checkbox를 생성한다.

(체크하는 네모칸만 존재한다.)

JCheckBox(String text)

지정된 텍스트의 Checkbox를 생성한다.

JCheckBox(String text,

boolean selected)

체크 여부와 지정된 텍스트를 가지는

Checkbox를 생성한다.

메소드

String getText()

체크박스에 표시되는 텍스트를 가져온다.

Boolean isSelected()

체크박스의 표시유무를 반환한다.

void setSelected(boolean value)

체크박스의 표시유무를 설정한다.

void setText(String text)

체크박스의 텍스트를 설정한다.


 

사용자가 체크박스를 선택하면 ItemEvent가 발생하며, 이벤트를 처리하려면 ItemListener 인터페이스를 구현해야 한다.


public class CheckboxExample implements ItemListener {

 

//FIELDS

JCheckBox check = new JCheckBox(“checkbox1”);

 

//CONSTRUCTOR

CheckBoxExample() {

check.addItemListener(this);

}

 

//METHODS

@Override

public void itemStateChanged(ItemEvent e) {


//체크박스의 아이템 이벤트를 처리한다체크박스의 상태가 변경될 때마다 호출됨.

String changeText = “changeCheck!”;

 

Object source = e.getItemSelectable(); //선택된 체크박스를 얻는다.


if(source == check) {

if(e.getStateChange() == ItemEvent.DESELECTED) //체크가 해제되었다면,

check.setText(“checkbox1”);

} else {

check.setText(changeText);

}

}

}


 

 

 

라디오 버튼

 

라디오 버튼은 체크박스와 비슷하지만 하나의 그룹 안에서는 한 개의 버튼만 선택할 수 있다는 점에서 차이가 있다.

 

그룹으로 묶인 라디오 버튼들은 하나만 선택될 수 있고, 나머지는 모두 해제된 상태를 유지한다.

 

라디오 버튼을 만들기 위해서는 JRadioButton 클래스와 ButtonGroup 클래스를 선언해야 한다. ButtonGroup 클래스는 버튼들을 그룹핑하는 데 사용된다.

 

라디오 버튼의 모든 사용법은 앞의 체크박스와 유사하다.


JRadioButton

생성자

JRadioButton(String text)

지정된 텍스트의 라디오 버튼을 생성한다.

JRadioButton(String text,

boolean selected)

초기 상태와 지정된 텍스트를 가진 라디오 버튼을 생성한다.

 

ButtonGroup

생성자

ButtonGroup()

버튼을 그룹핑 하는 버튼 그룹 객체를 생성한다.

메소드

void add(AbstractButton b)

매개변수로 넘겨받은 버튼을 그룹핑에 추가한다.

void clearSelect()

모든 버튼의 선택을 해제한다.

int getButtonCount()

그룹핑된 버튼의 개수를 반환한다.

ButtonModel getSelection()

선택된 버튼의 종류를 반환한다.

boolean isSelected(ButtonModel m)

매개변수로 넘겨받은 버튼의 선택 유무를 반환한다.

void remove(AbstractButton b)

매개변수로 넘겨받은 버튼을 그룹핑에서 제외시킨다.

void setSelected(ButtonModel m,

boolean selected)

지정된 버튼의 선택유무를 설정한다.


...


JRadioButton radioBtn1 = new JRadioButton(“RadioButton1”);

JRadioButton radioBtn2 = new JRadioButton(“RadioButton2”);

JRadioButton radioBtn3 = new JRadioButton(“RadioButton3”);

 

ButtonGroup grouping = new ButtonGroup();

grouping.add(radioBtn1);

grouping.add(radioBtn2);

grouping.add(radioBtn3);

 

//세 버튼 중 하나만 선택된다.


 

 

 

경계 만들기

 

경계(Border)란 시각적으로 컴포넌트들을 그룹핑할 때 사용하는 장식적인 요소이다.

 

일반적으로 체크박스나 라디오 버튼을 그룹핑할 때 함께 사용한다.

 

경계를 생성하기 위해 BorderFactory 클래스의 정적 메소드를 활용한다.

 

경계 객체를 생성한 뒤, 컴포넌트를 추가한 패널(JPanel)setBorder()메소드를 통해 설정하면 된다.


BorderFactory

메소드

설명

Border createLineBorder(Color color)

직선으로 된 경계를 생성한다. 매개변수로 받은 Color 객체는 선의 색상을 결정한다.

Border createLineBorder(Color c, int w)

두 번째 매개변수는 선의 폭을 결정하며, 단위는 픽셀이다.

TitleBorder createTitledBorder(String t)

제목이 붙여진 경계를 생성한다. 문자열 매개변수가 제목을 나타낸다.


public class MyFrame extends Frame { //리스너를 설정하지 않은 상태..!


//FIELDS 

JPanel panel = new JPanel();

JRadioButton btn1 = new JRadioButton(“btn1”);

JRadioButton btn2 = new JRadioButton(“btn2”);

JRadioButton btn3 = new JRadioButton(“btn3”);


ButtonGroup group = new ButtonGroup(); //버튼 그룹핑


Border border = BorderFactory.createTitled(“버튼들”);


//CONSTRUCTOR

MyFrame() {

panel.setBorder(border);



group.add(“btn1”);

group.add(“btn2”);

group.add(“btn3”);


panel.add(“btn1”); //패널에 버튼 추가 (추가해야 보입니다.)

panel.add(“btn2”);

panel.add(“btn3”);

 

//Frame의 디폴트 레이아웃은 BorderLayout이므로 중간에 설정하면패널의 경계를 기준으로 경계 안에 버튼들이 있을 겁니다.

add(panel, BorderLayout.CENTER);

}

}


 





 

 

JComponent 클래스

 

최상위 컨테이너를 제외하고는 거의 모든 컴포넌트가 JComponent를 상속받는다.

 

- JComponent 클래스에는 스윙 컴포넌트들이 공통적으로 가져야 하는 속성과 메소드가 포함되어 있다.

 

- JComponent 클래스는 ComponentContainer 클래스를 상속받는다.


- Component 클래스는 화면 그리기이벤트 처리 기능을 제공한다.


Container 클래스는 컴포넌트 추가 및 제거 기능레이아웃 기능을 제공한다


- 이 기능들은 스윙 컴포넌트들도 모두 사용할 수 있다.

 

 

 

컴포넌트의 외관 변경 메소드


메소드

설명

void setBorder(Border border)

Border getBorder()

컴포넌트의 경계를 설정하거나 반환한다.

void setForeground(Color color)

Color getForeground()

컴포넌트의 전경색을 설정하거나 반환한다.

void setBackground(Color color)

Color getBackground()

컴포넌트의 배경색을 설정하거나 반환한다.

void setFont(Font font)

Font getFont()

컴포넌트의 폰트를 설정하거나 반환한다.

void setCursor(Cursor cursor)

Cursor getCursor()

컴포넌트의 커서를 설정한다.

 

 

 

컴포넌트의 상태 변경 메소드


메소드

설명

void setToolTipText(String text)

툴팁에 표시되는 텍스트를 설정한다

툴팁 : 컴포넌트에 마우스를 두면 표시됨

void setName(String name)

String getName()

컴포넌트의 이름을 설정하거나 반환한다.

boolean isShowing()

컴포넌트가 화면에 표시되고 있으면 true, 표시되지 않으면 false를 반환한다.

void setEnabled(boolean enabled)

boolean isEnabled()

컴포넌트의 활성화 여부를 설정하고 반환한다.

void setVisible(boolean visible)

boolean isVisible()

컴포넌트를 화면에 표시할지를 설정하고 표시 여부를 반환한다.

 

 

 

공통 이벤트 처리 메소드


메소드

설명

void addMouseListener(MouseListener mouseListener)

마우스 리스너를 추가한다.

void removeMouseListener(MouseListener mouseListener)

마우스 리스너를 제거한다.

void addActionListener(ActionListener actionListener)

액션 리스너를 추가한다.

void removeActionListener(ActionListener actionListener)

액션 리스너를 제거한다.

...

각 리스너마다 메소드가 addXXXX(), removeXXXX() 형태로 존재한다.




▶ 컴포넌트 그리기 메소드


메소드

설명

void repaint()

void repaint(int x1, int y1, int x2, int y2)

컴포넌트의 일부나 전체를 다시 그리라고 요청한다.

void revalidate()

컨테이너 안의 컴포넌트를 다시 배치하라고 요청한다.

void paintComponent(Grpahics g)

컴포넌트를 그린다. 만약 사용자 맞춤형 컴포넌트에서는 이 메소드를 오버라이딩(재정의)하여서 그림을 그린다.



 

컨테이너에 컴포넌트 추가 및 제거 메소드


메소드

설명

Component add(Component component)

컴포넌트를 컨테이너에 추가한다.

void remove(Component component)

컨테이너에서 컴포넌트를 삭제한다.

 void removeAll()

컨테이너의 모든 컴포넌트를 삭제한다.

Container getParent()

컴포넌트가 추가된 컨테이너를 반환한다.




▶ 레이아웃 메소드

 

메소드

설명

int getWidth()

int getHeight()

해당 컴포넌트의 너비와 높이를 픽셀 단위로 반환한다.

Dimension getSize()

해당 컴포넌트의 크기를 픽셀 단위로 반환한다.

int getX()

int getY()

부모 컨테이너를 기준으로 컴포넌트의 상대적인 x좌표, y좌표를 반환한다.

Point getLocation()

부모 컨테이너 안에서의 상대적인 위치를 반환한다.

Point getLocationOnScreen()

모니터 화면에서의 절대 위치를 반환한다.

void setLocation(int x, int y)

void setLocation(Point point)

부모 컨테이너 안에서의 컴포넌트의 좌표를 지정하며, 배치 관리자가 없는 경우에만 유효하다.

void setBounds(int x, int y, int width, int height)

부모 컨테이너 안에서의 컴포넌트의 위치와 크기를 설정한다. 배치 관리자가 없는 경우에만 유효하다.



 

크기와 위치 정보 얻는 메소드


메소드

설명

void setPreferredSize(Dimension dimen)

void setMaximumSize(Dimension dimen)

void setMinimunSize(Dimension dimen)

컴포넌트의 크기, 최소 크기, 최대 크기를 설정한다.

void setAlignmentX(float x)

void setAlignmentY(float y)

컨테이너 안에서의 컴포넌트들의 정렬을 지정한다.

void setLayout(LayoutManager)

LayoutManager getLayout()

배치 관리자를 설정하거나 반환한다.






+ Recent posts