기초적인 스윙 컴포넌트와 상속 관계
스윙 컴포넌트의 공통 메소드, JComponent의 메소드
● JLabel, 레이블 컴포넌트
: 문자열이나 이미지를 컴포넌트화 하여 출력하기 위한 목적으로 사용합니다.
단순 텍스트 만을 가진 레이블 컴포넌트 생성
JLabel textLabel = new JLabel("사랑합니다");
이미지를 가진 레이블 컴포넌트 생성
ImageIcon image = new ImageIcon("images/sunset.jpg");
JLabel imageLabel = new JLabel(image);
수평 정렬 값을 가진 레이블 컴포넌트 생성
ImageIcon image = new ImageIcon("images/sunset.jpg");
JLabel label = new JLabel("사랑합니다", image, SwingConstants.CENTER);
이미지 파일로부터 이미지를 읽기 위해 ImageIcon 클래스 사용합니다.
다룰 수 있는 이미지 : png, gif, jpg
sunset.jpg의 경로명이 "images/sunset.jpg"인 경우
public class LabelEx extends JFrame {
public LabelEx() {
setTitle("레이블 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JLabel textLabel = new JLabel("사랑합니다.");
ImageIcon beauty = new ImageIcon("images/beauty.jpg");
JLabel imageLabel = new JLabel(beauty);
ImageIcon normalIcon = new ImageIcon("images/normalIcon.gif");
JLabel label = new JLabel("보고싶으면 전화하세요",
normalIcon, SwingConstants.CENTER);
c.add(textLabel);
c.add(imageLabel);
c.add(label);
setSize(400,600);
setVisible(true);
}
public static void main(String [] args) {
new LabelEx();
}
}
● JCheckBox
: 선택(selected)과 비선택(deselected)의 두 상태만 가지는 체크 버튼 입니다.
class JCheckBoxText extends JFrame {
JTextField jtf ;
JCheckBoxText(){ // 중복선택 가능
JCheckBox jcb1 = new JCheckBox("java");
JCheckBox jcb2 = new JCheckBox("r");
JCheckBox jcb3 = new JCheckBox("python");
JCheckBox jcb4 = new JCheckBox("db");
jtf = new JTextField(10);
Container container = getContentPane();
container.setLayout(new FlowLayout());
container.add(jcb1);
container.add(jcb2);
container.add(jcb3);
container.add(jcb4);
container.add(jtf);
-
setTitle("JCheckjBox");
setSize(500,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
public class JCheckBoxText_ {
public static void main(String[] args) {
new JCheckBoxText();
}
}
출력값 :
JCheckBox에서 Item 이벤트 처리)
Item 이벤트
:체크 박스나 라디오버튼의 선택 상태가 바뀔 발생하는 이벤트 입니다.
- 마우스나 키보드로 체크박스를 선택 상태를 바꾸는 경우
- 프로그램에서 선택 상태를 바꾸는 경우
위의 코드 + ItemListener
class JCheckBoxText extends JFrame implements ItemListener{
JTextField jtf ;
JCheckBoxText(){
JCheckBox jcb1 = new JCheckBox("java"); // 중복선택 가능
JCheckBox jcb2 = new JCheckBox("r");
JCheckBox jcb3 = new JCheckBox("python");
JCheckBox jcb4 = new JCheckBox("db");
jtf = new JTextField(10);
Container container = getContentPane();
container.setLayout(new FlowLayout());
container.add(jcb1);
container.add(jcb2);
container.add(jcb3);
container.add(jcb4);
container.add(jtf);
// 리스너 등록
jcb1.addItemListener(this);
jcb2.addItemListener(this);
jcb3.addItemListener(this);
jcb4.addItemListener(this);
setTitle("JChecjBox 실습");
setSize(500,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void itemStateChanged(ItemEvent e) {
// System.out.println("이벤트 발생");
// 체크 박스를 선택하면 텍스트 상자에 선택한 내용이 표시된다.
JCheckBox selectCB = (JCheckBox)e.getItem();
// 반환형이 object 이다 = 어떤 컴퍼넌트라도 처리 가능하다.
// 반환형이 obhect 이므로 강제 형변형을 해준다.
jtf.setText(selectCB.getText());
switch(selectCB.getText()){
case "java":
System.out.println("java해보자");
break;
case "r":
System.out.println("r해보자");
break;
case "python":
System.out.println("python해보자");
break;
case "db":
System.out.println("db해보자");
break;
}
}
}
public class JCheckBoxText_ {
public static void main(String[] args) {
new JCheckBoxText();
}
}
ActionListener 와 같은 방식으로 method를 overriding 하여 기능을 추가 합니다.
출력값:
● JRadioButton
: 여러 버튼으로 그룹을 형성하고, 하나만 선택되는 버튼, 다른 버튼이 선택되면 이전에 선택된 버튼은 자동으로 해제됩니다.
체크박스와의 차이점
- 체크 박스는 각 체크박스마다 선택/해제 가능 합니다.
- 라디오 버튼은 그룹에 속한 버튼 중 하나만 선택 상태가 됩나다.
- 이미지를 가진 라디오버튼의 생성 및 다루기는 체크박스와 완전히 동일합니다.
버튼 그룹 객체 생성
ButtonGroup group = new ButtonGroup();
라디오버튼 컴포넌트 생성
JRadioButton apple= new JRadioButton("사과");
JRadioButton pear= new JRadioButton("배");
JRadioButton cherry= new JRadioButton("체리");
라디오 버튼을 버튼 그룹에 삽입
group.add(apple);
group.add(pear);
group.add(cherry);
라디오 버튼을 컨테이너에 삽입
container.add(apple);
container.add(pear);
container.add(cherry);
예시)
class JRadioButtonTest extends JFrame implements ActionListener{
JTextField jtf;
JRadioButtonTest(){
// 버튼 그룹 객체를 생성하여 그룹화할 컴포넌트 추가 (하나만 선택된다)
ButtonGroup bg = new ButtonGroup(); // 버튼을 그룹화
JRadioButton jrb1 = new JRadioButton("승마");
JRadioButton jrb2 = new JRadioButton("골프");
JRadioButton jrb3 = new JRadioButton("스쿠버");
JRadioButton jrb4 = new JRadioButton("글라이딩");
jtf = new JTextField(10);
// JRadioButton은 그룹화 하여 하나만 선택되게 한다.
bg.add(jrb1); bg.add(jrb2); bg.add(jrb3); bg.add(jrb4);
Container container = getContentPane();
container.setLayout(new FlowLayout());
container.add(jrb1);
container.add(jrb2);
container.add(jrb3);
container.add(jrb4);
container.add(jtf);
jrb1.addActionListener(this);
jrb2.addActionListener(this);
jrb3.addActionListener(this);
jrb4.addActionListener(this);
setTitle("JRadioButton 실습");
setSize(350,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
jtf.setText(e.getActionCommand());
}
}
public class JRadioButton_ {
public static void main(String[] args) {
new JRadioButtonTest();
}
}
결과값:
● JTextField
: 한 줄 짜리 텍스트(문자열) 입력 창을 구현한 컴포넌트 입니다.
- 텍스트 입력 도중 키가 입력되면 Action 이벤트 발생합니다.
- 입력 가능한 문자 개수와 입력 창의 크기는 서로 다릅니다.
public class TextFieldEx extends JFrame {
public TextFieldEx() {
setTitle("텍스트필드 만들기 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(new JLabel("이름 "));
c.add(new JTextField(20));
c.add(new JLabel("학과 "));
c.add(new JTextField("컴퓨터공학과 ", 20));
c.add(new JLabel("주소 "));
c.add(new JTextField("서울시 ...", 20));
setSize(300,150);
setVisible(true);
}
public static void main(String [] args) {
new TextFieldEx();
}
}
출력값:
JTextField의 주요 메소드
- 문자열 편집 불가능하게 하기 : JTextField.setEditable(false);
- 입력 창에 문자열 출력 : JTextField.setText("hello");
- 문자열의 폰트 지정 : JTextField.setFont(new Font("고딕체", Font.ITALIC, 20);
● TextArea
: 여러 줄을 입력할 수 있는 텍스트 입력 창입니다.
- JScrollPane 컴포넌트에 삽입하면 스크롤바 지원됩니다.
class JTextFieldTextArea extends JFrame{
JTextField jtf;
JTextArea jta;
JTextFieldTextArea(){
jtf = new JTextField(10);
jta = new JTextArea(7,20);
Container container = getContentPane();
container.setLayout(new FlowLayout());
container.add(jtf);
container.add(jta);
setTitle("텍스트 필드 & 텍스트 Area 실습");
setSize(500,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
public class JTextFieldTextArea_ {
public static void main(String[] args) {
new JTextFieldTextArea();
}
}
jtf = new JTextField(10); 크기가 10인 텍스트 필드 객체 생성(10글자가 들어갈 수 있는 크기) , 한 라인의 입력을 받을 수 있는 컨퍼넌트입니다. 숫자가 입력되기 전에는 아주 작게 보여줍니다.
jta = new JTextArea(7,20); // (7,20) 7행 20열의 텍스트에어리어 생성 , 화면상 7줄이 보입니다.
아쉬운점 : enter를 누르지 않으면 다음 줄로 넘어가지 않습니다.
출력값:
● JComboBox
: 풀다운 형태의 리스트 컴포넌트를 만들어주는 클래스 입니다.
- 항목(list)를 선택하는 이벤트 처리 ItemListener를 이용
- 텍스트 필드와 버튼, 그리고 드롭다운 리스트로 구성
public class ComboBoxEx extends JFrame {
private String [] fruits = {"apple", "banana", "kiwi", "mango", "pear",
"peach", "berry", "strawberry", "blackberry"};
private String [] names = {"kitae", "jaemoon", "hyosoo", "namyun"};
public ComboBoxEx() {
setTitle("콤보박스 만들기 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JComboBox<String> strCombo = new JComboBox<String>(fruits);
c.add(strCombo);
JComboBox<String> nameCombo = new JComboBox<String>();
for(int i=0; i<names.length; i++)
nameCombo.addItem(names[i]);
c.add(nameCombo);
setSize(300,300);
setVisible(true);
}
public static void main(String [] args) {
new ComboBoxEx();
}
}
출력값:
● JList
: 여러 개의 아이템을 리스트 형식으로 보여주고 선택하는 컴포넌트 입니다.
- JComboBox와 기본적으로 같은 기능
- JScrollPane에 Jlist를 삽입하여 스크롤 가능
class JListTest extends JFrame{
String[] sport = {"농구" , "축구" , "배구" , "야구", "테니스", "핸드볼"};
JListTest(){
JList<String> jl = new JList<String> (sport); // 제너릭으로 정의해서 사용.
jl.setVisibleRowCount(3); // 화면에 보여줄 행 수 정의.
JScrollPane jp = new JScrollPane(jl); // 스크롤바 적용
Container container = getContentPane();
container.setLayout(new FlowLayout());
container.add(jp);
// JList가 탑제된 JScrollPane을 저장시켜줘야 정상적으로 동작이 진행된다.
setTitle("리스트 상자 실습");
setSize(200,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
public class JList_ {
public static void main(String[] args) {
new JListTest();
}
}
JList는 하나의 배열로 저장 되는 것이기 때문에 같은 자료형으로 저장해야 합니다. 그래서 제너릭으로 선언해줍니다 .
결과값:
● JTabbedPane
: 그룹 폴더 컴포넌트를 만들어주는 클래스입니다.
class JPanelTest extends JFrame{
JPanelTest(){
Container container = getContentPane();
container.setLayout(new BorderLayout());
// 첫번째 패널 객체 생성 및 컴포넌트 추가
JPanel jp1 = new JPanel();
jp1.setLayout(new GridLayout(5,1));
jp1.add(new JButton("JAVA"));
jp1.add(new JButton("R"));
jp1.add(new JButton("PYTHON"));
jp1.add(new JButton("DB"));
jp1.add(new JButton("WEB"));
// 두번쨰 패널 객체 및 컴포넌트 추가
JPanel jp2 = new JPanel();
jp2.setLayout(new GridLayout(4,1));
jp2.add(new JRadioButton("java")); // JRadioButton 하나만 선택 가능 (ex, 성별)
jp2.add(new JRadioButton("r"));
jp2.add(new JRadioButton("python"));
jp2.add(new JRadioButton("db"));
// 2개의 패널을 J프레임컨테이너에 탑재
container.add(jp1,BorderLayout.WEST);
container.add(jp2,BorderLayout.EAST);
setTitle("패널 컨테이너 실습");
setSize(500,180);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
public class JPanelTest_ {
public static void main(String[] args) {
new JPanelTest();
}
}
출력값:
'빅데이터 > JAVA' 카테고리의 다른 글
[JAVA] JAVA&DATABASE 연결 (0) | 2020.05.27 |
---|---|
[JAVA] 이클립스, DB 연동 환경설정 (0) | 2020.05.26 |
[JAVA] SWING(1) (0) | 2020.05.23 |
[JAVA] 네트워크(NETWORK) (0) | 2020.05.23 |
[JAVA] 스트림(Stream) (0) | 2020.05.20 |