=> 배치관리자를 사용하면 아래 설정값들을 할당해도 적용되지 않음.
( 배치관리자들이 위치, 크기등을 자동으로 설정해서 컴포넌트를 배치시키기 떄문 )
=> 배치관리자를 null 로 설정하자!
ImageIcon image = new ImageIcon("images/sunset.jpg");
JLabel imagelabel = new JLabel(image);
btn1.setIcon(Icon image)
btn1.setRolloverIcon(Icon)
btn1.setrPressedIcon(Icon)
(이거 대충하고 넘어간 예제임)
아래처럼 마우스를 버튼에 올리거나, 누르고 있는 상태에 따라서 다른 이미지가 출력되도록 할 수 있다.
setHorizontalAlignment(int align) : 수평정렬
=> align : SwingConstants.LEFT (좌측정렬), SwingConstants.RIGHT, (우측정렬), SwingConstants.CENTER (중앙정렬)
setVerticalAlignment(int align) : 수직정렬
=> => align : SwingConstants.TOP, SwingConstants.CENTER, SwingConstants.BOTTOM
이미지 아이콘을 가진 체크박스는 체크박스 모양이 생성되지 않음
( v 채크하는 박스가 생성안됨 )
이미지와 체크박스 동시에 생성가능 => JCheckBox(String text, Icon Image)
selected 를 true 로 설정하면 프로그램 초기에 체크박스가 체크된 상태로 나옴
아래그림 잘못된거임! 아래그림은 체크박스가 아니라, 라디오버튼이다!
(참고 삼아서만 보기)
이미지를 넣고나서 버튼을 눌러도 이미지의 변화가 없어서 이게 제대로 눌러진건지 아닌건지 알수가 없다.
체크박스를 선택(체크) 했을때 이미지가 다른것이 출력되도록 할 수 있다.
=> 즉, 체크박스의 선택상태일때의 이미지를 지정해준다!
ImageIcon cherryIcon = new ImageIcon("images/cherry.jpg");
ImageIcon selectedCherryIcon = new ImageIcon("images/selectedCherry.jpg");
JCheckBox cherry = new JCheckBox("체리, cherryIcon);
cherry.setSelectedIcon(selectedCherryIcon); // cherry 라는 체크박스가 체크된 상태일때 이미지를 selectedCherryIcon 로 지정
itemStateChanged(ItemEvent e) : 체크박스의 컴포넌트를 선택 or 해제제해서 상태가 변할때 발생하는 이벤트를 처리
리스너 클래스
e.getStatChange() : 이벤트 객체의 상태변화를 받아옴
이벤트가 발생한 체크박스이가 fruits 배열에 담긴 0번째 체크박스인지, 1번째인지, 2번째인지에 따라서 sum 에다 가격을 더함
만약 MyItemListener 리스너 객체인 listener 를 각 JCheckBox 객체에 등록하지 않고, new MyItemListener() 리스너 객체를 등록하는 경우
각 JCheckBox 객체에 대해서 listner 라는 동일한 리스너 객체가 등록되는 것이 아닌, 서로 다른 각각의 리스너 객체에다 등록된다.
즉, listner 라는 리스너 객체의 멤버변수인 sum 을 3개의 체크박스 객체가 같이 공유하고 조작하는 것이였다.
그런데 따로 리스너 객체를 등록하게 되면 각 체크박스 객체가 다른 sum 멤버변수를 가진 리스너 객체를 조작하므로, 각각에 대해 sum 값을 계산하고 값을 JLabel 에 출력하게 될 것이다.
JCheckBox 와 거의 동일함. But 차이점은 라디오버튼은 그룹에 속한 버튼 중 하나만 선택 상태가 된다. 즉, 다른걸 선택하면 기존에 선택한 체크 상태가 해제된다.
( <=> 체크박스는 각 체크박스마다 선택/해제가 가능 )
라디오버튼의 여러 체크박스 요소중에 반드시 하나만 체크 가능하도록 해주는것
=> 기존에는 컴포넌트를 생성한 것을 컨테이너(컨텐트팬) 에만 추가해줬는데,
ButtonGroup 이라는 객체에도 추가해준다!
버튼그룹 객체를 만들고 add() 로 그 안에 라디오버튼 객체를 버튼그룹에 추가
라디오 버튼을 ButtonGroup 객체에 추가하고, 컨테이너에도 추가해줘야함!
해당 라디오버튼 객체를 체크 선택된 상태로 변경
false 를 지정하면 선택 해제된 상태로 변경
=> setSelected() 로 라디오버튼이 체크가 됨에따라 그에 따른 이벤트가 발생해서, 즉 이벤트 객체가 발생하고 등록해준 리스너대로 동작한다.
라디오 버튼 객체가 선택(체크)되었는지 아닌지를 true / false 로 리턴
라디오 객체.isSelected() : 해당 라디오 컴포넌트가 체크(선택)된 상태인 경우
ItemEvent.DESELECTED : 객체가 버튼이 선택이 해제된 상태인 경우
=> 라디오 버튼1 가 체크된 상태에서 라디오 버튼 2를 체크할 경우, 자연스래 버튼1의 체크가 해제된다.
즉, 라디오 버튼을 새롭게 체크한 쪽에서도 이벤트가 발생하고, 자연스럽게 해제가 된 버튼에서도 이벤트가 발생한다.
양쪽 라디오버튼 객체 컴포넌트에 이벤트 객체가 던져지게 된다.
따라서 라디오 버튼이 선택된 쪽에 대한 처리는 isSelected() 로,
해제된 쪽은 ItemEvent.DESELECTED 로 처리하자!
형태
new JScrollPane(new JTextArea("hello", 7, 20));
// JTextArea 객체를 그냥 만들지않고,
// JScrollPane 컨테이너 객체에 집어넣어서 스크롤바가 JTextArea 컴포넌트에 달라붙게된다.
JScrollPane() 컨테이너 객체안에 인자로 JTextArea 객체를 넣어서 스크롤바 생성 가능
JPanel 외에도 JPane 이라는 컨테이너가 있다.
Jpane : 스크롤바를 지닌 컴포넌트를 받을수있는 컨테이너
=> JPane 어떤 컴포넌트가 들어오면 스크롤바를 붙여준다.
JTextField 으로 텍스트를 입력받고, 엔터키를 누르면 입렫받은 텍스트를 JTextArea() 로 생성한 창에다 텍스트를 추가해주는 프로그렘
JTextField 에서 엔터키를 누르면 Action 이벤트가 발생하므로,
ActionListener 를 JTextField 객체에 등록해준다.
리스너 내용 : 입력받은 JTextField 의 텍스트를 JTextArea 에 추가