JMenuBar



 

메뉴는 공간을 절약함과 동시에 사용자에게 여러 가지 옵션 중에서 하나를 선택하게 하는 컴포넌트이다.

 

다른 컴포넌트와 달리 컨테이너 안에 배치되지 않는다. , 항상 맨 위에 고정적인 자리를 가진다.

 

메뉴바는 프레임에만 부착될 수 있다. 패널은 부착불가.

 

메뉴는 메뉴바에 나타나거나 팝업 메뉴로만 나타난다.

 

- 메뉴바에 메뉴를 나열하고, 메뉴바에 나열된 메뉴들에서 각 메뉴 항목을 가진다.


- 메뉴 항목에는 텍스트뿐만 아니라 이미지도 올 수 있고 체크 박스도 올 수 있다. 또한, 폰트나 색상도 변경 가능하다.

 

팝업 메뉴란 사용자가 팝업이 가능한 컴포넌트 위에서 마우스 우클릭을 할 때 등장한다.

 

메뉴는 JAbstractButton 클래스를 상속하고 있으므로 일종의 버튼이라 보면 된다. 따라서 누르면 이벤트가 발생한다.

 

메뉴바는 JMenuBar 객체, 메뉴는 JMenu 객체, 메뉴 항목은 JMenuItem 객체로 만들어진다.


- 팝업메뉴는 JPopupMenu라는 객체를, 체크박스 메뉴항목은 JCheckboxMenuItem 객체에 의해 표현된다.

 

- Simple Example


...

JFrame frame = new JFrame(“메뉴바 예제”);


JMenuBar menuBar; //메뉴바 선언

JMenu menu; //메뉴 선언

JMenuItem menuItem; //메뉴 항목 선언

 

menuBar = new JMenuBar(); //메뉴바 초기화

 

menu = new JMenu(“메뉴1”);

menuBar.add(menu);

 

menuItem = new JMenuItem(“메뉴항목1”); //메뉴항목 선언

//menuItem = new JMenuItem(“메뉴항목1”, KeyEvent.VK_T); ->키보드 단축키 설정 가능

menu.add(menuItem); //메뉴에 메뉴항목 추가

 

frame.setJmenuBar(menuBar); //프레임에 메뉴바 설정

...


각 메뉴 항목마다 단축키를 설정하려면 setMenuShortCut 메소드를 불러오면 된다.

 

이벤트 처리 : 메뉴항목(JMenuItem)을 눌렀을 때 발생하는 이벤트를 처리하기 위해 ActionListener 인터페이스를 구현한다.

 

키보드와의 관계 : 메뉴는 기억키(menmontcs)와 가속키(accelerators)의 두 가지 종류의 키보드 선택을 지원한다. 기억키는 모든 사용자를 위한 것이고, 가속키는 고급 사용자를 위한 것이라고 생각하면 된다.


기억키는 setMnemonic() 메소드를가속키는 setAccelerator() 메소드를 사용한다.

  • 기억키 : 키보드를 사용하여 이미 표시되어 있는 메뉴 계층을 둘러보는데 이용된다. 주로 메뉴에 단축키를 설정하여 Alt를 누르면 첫 번째 메뉴가 선택되게 한다.

menuItem.setMnemonic(KeyEvent.VK_T);

  • 가속키 : 메뉴 계층 구조를 통하지 않고 직접 메뉴 항목을 선택할 수 있다. , 메뉴 항목이 선택되는 키들의 조합이다. 예를 들어 Alt + 1을 눌렀을 때 Alt 단축키를 가진 메뉴의 서브 메뉴 항목의 첫 번째를 선택하게 된다. 단말 메뉴 항목만이 가속키를 가질 수 있다.

 menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_t, ActionEvent_ALT_MASK));



예제

public class MenuTest extends JFrame implements ActionListener, ItemListener {
	
	//FIELDS
	private JMenuBar menuBar = new JMenuBar();
	private JMenu firstMenu, secondMenu, submenu;
	private JMenuItem menuItem1, menuItem2;
	private JMenuItem subMenuItem1, subMenuItem2;
	private ButtonGroup group = new ButtonGroup();
	private JRadioButtonMenuItem rbMenuItem1, rbMenuItem2;
	private JCheckBoxMenuItem cbMenuItem1, cbMenuItem2;
	
	MenuTest() {
	
		//첫번째 메뉴 초기화
		firstMenu = new JMenu("first menu");
		firstMenu.setMnemonic(KeyEvent.VK_F); //단축키 설정
		menuBar.add(firstMenu);
		
		//메뉴 항목 생성
		menuItem1 = new JMenuItem("menu item 1", KeyEvent.VK_1);
		menuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, ActionEvent.ALT_MASK));
		menuItem1.addActionListener(this); //리스너 설정해야 이벤트 처리 가능함
		firstMenu.add(menuItem1); //메뉴항목을 첫번째 메뉴에 등록
		
		ImageIcon icon = new ImageIcon("example_icon.png");
		menuItem2 = new JMenuItem("menu item 2", icon); //이미지 등록
		menuItem2.addActionListener(this);
		menu.add(menuItem2);
		
		//라디오 버튼 메뉴 항목 생성
		firstMenu.addSeparator(); // 구분자 생성
		
		rbMenuItem1 = new JRadioButtonMenuItem("radio button item 1");
		rbMenuItem1.setSelected(true); //선택 되어있도록 설정
		group.add(rbMenuItem1); //버튼 그룹에 추가
		firstMenu.add(rbMenuItem1); //그룹에 추가하는 것과 메뉴에 추가하는 것은 별도이다.
		
		rbMenuItem2 = new JRadioButtonMenuItem("radio button item 2");
		group.add(rbMenuItem2);
		firstMenu.add(rbMenuItem2);
		
		//체크 박스 메뉴 항목 생성
		firstMenu.addSeparator();
		cbMenuItem1 = new JCheckBoxMenuItem("check box item 1");
		cbMenuItem1.addItemListener(this); //체크박스는 아이템 이벤트가 발생함 (액션 이벤트와는 별도 처리)
		firstMenu.add(cbMenuItem1);
		
		cbMenuItem2 = new JCheckBoxMenuItem("check box item 2");
		cbMenuItem2.addItemListener(this);
		firstMenu.add(cbMenuItem2);
		
		//서브 메뉴 생성
		submenu.addSeparator();
		submenu = new JMenu("sub menu");
		submenu.setMnemonic(KeyEvent.VK_S); //단축키 설정
		
		subMenuItem1 = new JMenuItem("sub menu item 1");
		subMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));
		submenu.add(subMenuItem1);
		
		subMenuItem2 = new JMenuItem("sub menu item 2");
		subMenuItem2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, ActionEvent.ALT_MASK));
		submenu.add(subMenuItem2);
		
		menu.add(submenu);
		
		//두번째 메뉴 초기화
		secondMenu = new JMenu("second menu");
		secondMenu.addActionListener(this);
		menu.setMnemonic(KeyEvent.VK_S);
		menuBar.add(menu);
		
		//프레임에 메뉴바 추가하기
		setJMenuBar(menuBar);
		setVisible(true);
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == menuItem1) {
			System.out.println("This is the menu item 1.");
		}else if (e.getSource() == menuItem2) {
			System.out.println("This is the menu item 2.");
		}
	}
	
	@Override
	public void itemStatedChanged(ItemEvent e) {
		if (e.getSource() == cbMenuItem1) {
			System.out.println("check box item 1");
		else (e.getSource() == cbMenuItem2) {
			System.out.println("check box item 2");
		}
	}
	
	public static void main(String[] args) {
		MenuTest frame = new MenuTest();
		f.setSize(500, 500);
		f.setVisible(true);
	}
}







 

 

경로 지정

 

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

 

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

 

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


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

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






 

 

ActionEvent

 

컴포넌트에 구체적인 동작이 일어났을 때 발생하는 이벤트로 버튼을 클릭하는 동작이 있다.

 

- ActionEvent를 받기 위해서는 ActionListener 인터페이스를 구현하여야 한다.


ActionEvent 클래스

 생성자

 ActionEvent(Object source, int id, String command)

 매개변수로 컴포넌트의 이벤트 소스(source)와 이벤트 동작을 식별하는 id값, 이벤트 동작을 나타내는 command값을 받아 초기화한다.

 ActionEvent(Object source, int id, String command,                                                   int modifiers)

 ActionEvent의 구체적인 수정키를 추가로 초기화한다.

 ActionEvent(Object source, int id, String command,                                    long when, int modifiers)

 ActionEvent의 구체적인 수정키들과 시간을 추가로 초기화한다.

필드

(변화 키)

 public static final int SHIFT_MASK

 이벤트가 일어나는 동안 쉬프트 키(Shift)가 눌러짐을 나타냄

 public static final int CTRL_MASK

 컨트롤 키(Ctrl)가 눌러짐을 나타낸다.

 public static final int META_MASK

 메타 키(Meta)가 눌러짐을 나타낸다.

 public static final int ALT_MASK

 알트 키(Alt)가 눌러짐을 나타낸다.

 public static final int ACTION_FIRST

 이벤트 동안에 이용되는 id의 범위 중 첫번째 순서

 public static final int ACTION_LAST

 이벤트 동안에 이용되는 id의 범위 중 마지막 순서

 public static final int ACTION_PERFORMED 이벤트 동작이 발생했다는 것을 나타냄

 메소드

 String getActionCommand() 해당 동작과 관련있는 커맨드 문자열을 반환한다.
 int getModifiers()

 ActionEvent가 일어나는 동안 변화 키들을 리턴한다.

 long getWhen() ActionEvent가 일어났을 때의 시간을 반환한다.
 String paramString()

 ActionEvent를 식별하는 문자열을 반환한다.


ActionListener 인터페이스

 메소드

설명 

 void actionPerformed(ActionEvent e) { }

 ActionEvent의 동작들을 처리한다. 



 

KeyEvent

 

사용자가 키보드를 이용하여 입력을 하는 경우에 발생한다


- KeyEvent가 발생하려면 컴포넌트가 반드시 키보드 포커스를 가지고 있어야 한다. 키보드 포커스를 얻으려면 requestFocus() 라는 메소드를 사용한다. 또한 KeyEvent 클래스는 InputEvent 클래스를 상속받는다.

 

-KeyEvent를 받기 위해서는 KeyListener를 구현하여야 한다.


KeyListener 인터페이스

메소드

설명

void KeyTyped(KeyEvent e) { }

사용자가 글자를 입력했을 경우에 호출

void KeyPressed(KeyEvent e) { }

사용자가 키를 눌렀을 경우에 호출

void KeyReleased(KeyEvent e) { }

사용자가 키에서 손을 떼었을 경우에 호출


KeyEvent 클래스

메소드

설명

int getKeyChar() { }

KeyEvent에 들어있는 글자(유니코드)

반환한다.

int getKeyCode() { }

KeyEvent에 들어있는 키코드(keycode)를 반환한다. 키코드란 글자가 아니라 키보드 자판의 각각의 키를 가리키는 상수이다.

예를 들어, Escape 키의 키코드는 VK_ESCAPE로 정의되어 있다.

boolean isActionKey() { }

이벤트를 발생시킨 키가 액션 키이면 true를 반환한다. 액션 키란 Cut, Copy, Paste, Page Up, Caps Lock, 화살표와 function 키를 의미한다.

 

InputEvent 클래스

메소드

설명

int getID() { }

이벤트의 타입을 반환한다.

MouseEvent.MOUSE_PRESSED, MouseEvent.MOUSE_RELEASED

MouseEvent.MOUSE_CLICKED

Component getComponent { }

이벤트를 일으킨 컴포넌트를 반환한다. getSource()를 사용하여도 된다.

, getSource()로 얻은 것은 해당 컴포넌트로 강제 타입변환 해주어야 한다.

int getWhen() { }

이벤트가 발생한 시각을 반환한다.

boolean isAltDown() { }

boolean isControlDown() { }

boolean isMetaDown() { }

boolean isShiftDown() { }

이벤트가 발생한 시각에 키보드의 수식키들의 상태를 반환한다.




MouseEvent & MouseMotionEvent

 

- Mouse 이벤트는 사용자가 마우스를 조작하는 경우에 발생한다.


- MouseEvent는 많은 메소드를 InputEvent 클래스에서 상속받는다. InputEvent 클래스의 메소드도 사용할 수 있다.


- MouseEvent를 받기 위해서는 MouseListener를 구현하여야 한다.

 

MouseListener 인터페이스

메소드

설명

void mouseClicked(MouseEvent e)

사용자가 컴포넌트를 클릭한 경우에 호출된다.

void mouseEntered(MouseEvent e)

마우스 커서가 컴포넌트로 들어가면 호출된다.

void mouseExited(MouseEvent e)

마우스 커서가 컴포넌트에서 나가면 호출된다.

void mousePressed(MouseEvent e)

마우스가 컴포넌트 위에서 눌려지면 호출된다.

void mouseReleased(MouseEvent e)

마우스가 컴포넌트 위에서 떼어지면 호출된다.



MouseEvent 클래스

메소드

설명

int getClickCount()

빠른 연속적인 클릭의 횟수를 반환한다.

int getX()

int getY()

Point getPoint()

이벤트가 발생했을 당시의 (x, y)위치를 반환한다위치는 컴포넌트에 상대적이다.

int getXOnScreen()

int getYOnScreen()

int getLocationOnScreen()

절대 좌표값 (x, y)을 반환한다이들 좌표값은 가상 화면에 상대적이다.

int getButton()

어떤 마우스 버튼의 상태가 변경되었는지를 반환한다

NOBUTTON, BUTTON1, BUTTON2, BUTTON3 중의 하나이다.


- MouseEvent로 마우스의 움직임을 추적하는 것은 시스템적으로 영향을 끼치므로 마우스가 이동하는 경우에만 따로 이벤트를 받도록 한다.


MouseMotionListener 인터페이스

메소드

설명

void mouseDragged(MouseEvent e)

마우스로 드래그하면 호출된다.

void mouseMoved(MouseEvent e)

마우스가 클릭되지 않고 이동하는 경우에 호출.







+ Recent posts