경로 지정

 

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

 

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

 

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


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

}

}


 





+ Recent posts