안녕, 세상!

6. 윈도우 프로그래밍 본문

It공부/Java

6. 윈도우 프로그래밍

dev_Lumin 2020. 7. 12. 06:30

(1) 자바의 윈도우 프로그래밍

GUI(Graphic User Interface)

 - 이미지 혹은 그래픽을 이용하여 메뉴 등을 포함하는 화면을 구성하고 입력 도구(키보드, 마우스)를 이용하여 사용자가 입출력을 편리하게 작성하는 사용자 인터페이스를 말합니다.

 

이러한 GUI를 이용한 프로그래밍을 윈도우 프로그래밍이라고 하며 자바에서는 윈도우즈 환경에서 윈도우 프로그래밍을 할 수 있도록 GUI 환경을 제공하고 있습니다.

 

 

① 자바의 윈도우 프로그래밍 관련 패키지

자바를 이용하여 윈도우 프로그래밍을 하기 위해서는 윈도우를 구성하는 버튼이나 프레임, 라벨 등의 컴포넌트를 사용할 수 있어야 합니다.

다음 패키지들마다 제공되는 컴포넌트가 있으며 import 명령을 이용하여 사용할 수 있습니다.

 

(1) AWT 패키지  (Abstract Windows Toolkit) 

AWT 패키지는 자바가 처음 등장했을 때 함께 배포된 패키지로 많은 GUI 컴포넌트를 제공하고 있습니다.

AWT의 컴포넌트들은 운영체제(OS)의 도움을 받아 화면에 출력 되는데, 운영체제의 리소스를 많이 소모하여 운영체제에 부담을 많이 주게 됩니다.

그리하여 최근에는 AWT 패키지를 이용한 윈도우 프로그래밍은 많이 이뤄지고 있지 않습니다.

 

(2) Swing 패키지 

Swing 패키지는 AWT 기술을 기반으로 작성된 라이브러리로서 AWT와는 달리 순수하게 자바 언어로 작성되었습니다.

또한 운영체제의 도움을 받지 않고 구현되기 때문에 운영체제와는 관계없이 항상 동일하게 작동하며 동일한 모양으로 그려집니다.

Swing 패키지는 모든 AWT 컴포넌트와 100% 호환되는 컴포넌트로 재 작성되었습니다.

Swing 컴포넌트의 이름은 AWT 컴포넌트와 구분하기 위해서 클래스 이름 앞에 모두 'J'를 붙였습니다. 

또한 새롭게 개발되어 제공되는 Swing 컴포넌트에는 AWT에 없는 고급 Swing 컴포넌트들이 제공됩니다.

보다 화려하며 다양한 모양의 GUI 응용 프로그램을 쉽게 개발할 수 있습니다.

따라서 최근에는 거의 대부분의 GUI 응용 프로그램이 Swing 기반으로 작성됩니다.

 

 

 

 

② 자바의 GUI 패키지

다음은 GUI 패키지 계층 구조입니다.

자바 GUI 계층 구조

자바의 모든 컴포넌트들은 Component 클래스를 반드시 상속받아야 합니다.

AWT 컴포넌트는 Component를 직접 상속받는 것들과 Container를 상속받는 것들이 있습니다.

Swing 컴포넌트는 JApplet, JFrame, JDialog를 제외한 모든 컴포넌트들은 JComponenet를 상속받습니다.

 

여기서 컨테이너란 다른 컴포넌트를 포함할 수 있는 특별한 GUI 컴포넌트를 말합니다.

컨테이너가 되기 위해서는 java.awt.Container를 상속 받아야 합니다.

그림과 같이 컨테이너 클래스는 컴포넌트를 상속받기 때문에 컨테이너는 그 자신 또한 컴포넌트이기도 합니다.

 

컴포넌트는 컨테이너와는 달리 다른 컴포넌트를 포함할 수 없으며, 임의의 컨테이너에 포함되어야 비로소 화면에 출력될 수 있습니다.

컨테이너와 컴포넌트를 합친 모든 Swing 컴포넌트들은 javax.swing.JComponent를 상속받으며, AWT 컴포넌트들은 모두 java.awt.Component를 상속 받습니다.

 

 

 

 

 

(2) Swing 윈도우 프로그래밍

 

Swing 사용을 위한 import 문

Swing 패키지를 이용하여 프로그래밍 하기 위해서는 Swing 컴포넌트의 클래스 파일들이 존재하는 경로를 반드시 import 해야합니다.

 

import javax.swing.* 

 

이 이외의 대부분의 윈도우 프로그래밍에서는 이벤트 처리와 이미지나 도형 등을 직접 그리는 부분이 동반되는데, 이러한 경우에도 필요한 패키지를 import 하는 문장이 필요합니다.

 

import java.awt.*;                 // 그래픽 처리를 위한 클래스

import java.awt.event.*          // AWT 이벤트 사용을 위한 클래스

import javax.swing.*              // Swing 컴포넌트 클래스

import javax.swing.event.*;      // Swing 이벤트 사용을 위한 클래스

 

 

프레임(JFrame)

윈도우 형태의 프로그램을 작성할 때 각 컴포넌트를 담을 수 있는 프레임이 가장 먼저 필요합니다.

프레임은 최상위 컨테이너로 프레임이 있어야 윈도우 형태로 화면에 출력이 가능하며, 프레임 내부에 부착된 컴포넌트들이 화면에 출력됩니다.

 

컴포넌트들은 프레임 없이는 독립적으로 화면에 출력될 수 없으며, 프레임이 닫히면 프레임 내의 모든 컴포넌트들도 없어지며 프레임과 함께 화면에서 사라집니다.

 

Swing 패키지에서 프레임의 기능을 수행하는 클래스는 JFrame 클래스이고 이 클래스를 이용하여 윈도우를 생성하는 방법은 크게 2가지가 있습니다.

 

JFrame 클래스를 객체로 생성하는 방법, JFrame 클래스를 상속받는 방법입니다.

둘 다 많이 사용되지만, 주로 후자가 더 많이 사용됩니다.

 

다음은 객체로 생성하는 방법과 상속받는 방법의 예시입니다.

1
2
3
4
5
6
7
8
9
10
11
12
// JFrame 클래스의 객체 생성
import javax.swing.*;
public class framesample {
    public static void main(String[] args) {
        JFrame f = new JFrame();
        
        f.setTitle("윈도우 프로그래밍");  //타이틀 이름 지정
        f.setSize(600,400);   // 가로,세로 픽셀
        f.setVisible(true);   // 프레임 표시
    }
}
 
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
// JFrame 클래스를 상속 받는 방법
import javax.swing.*;
public class framesample extends JFrame {
    framesample(){  //생성자
        setTitle("윈도우 프로그래밍");
        setSize(600,400);
        setVisible(true);
    }
    public static void main(String[] args) {
        framesample f = new framesample();
    }
}
 
cs

setTitle() - (프레임의) 타이틀을 설정하는 메소드

 

setSize(가로, 세로) - (프레임의) 가로, 세로 크기를 지정하는 메소드

 

setVisible() - 화면에 프레임 표시 유/무의 메소드, true면 표시 false면 표시x

 

 

 

 

③ Swing 컴포넌트

Swing 패키지에 있는 컴포넌트 역시 클래스로 제공되며, 해당 컴포넌트를 객체로 생성하고. 이 객체를 프레임에 추가하면 화면에 출력됩니다.

 

1. JLabel 컴포넌트

라벨은 프레임에 각 요소에 대해 설명해주는 이름표와 같은 역할을 하는 컴포넌트입니다.

화면에는 글자 형태로 나타납니다.

JLabel 클래스를 사용해서 구현할 수 있습니다.

 

JLabel 객체명 = new JLabel("라벨글씨");

 

다음은 JLabel 컴포넌트를 사용한 예시입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import javax.swing.*;
import java.awt.*;
public class Labelsample extends JFrame{
    private JLabel lb1, lb2;
    public Labelsample(){
        setLayout(new FlowLayout()); // 컴포넌트 배치
        lb1=new JLabel("이름:      ");
        lb2=new JLabel("전화번호:      ");
        
        add(lb1);
        add(lb2);    // 프레임에 추가
        setTitle("라벨예제");
        setSize(250,100);
        setVisible(true);
    }
    public static void main (String[] args) {
        Labelsample l = new Labelsample();
    }
}
cs

 

add() - 컴포넌트를 화면에 출력시키기 위해 프레임에 추가하는 메소드

 

setLayout() -

 

 

 

2. JButton 컴포넌트

프레임에 클릭할 수 있는 버튼의 역할을 수행하는 컴포넌트로 Swing 컴포넌트는 JButton 클래스에서 제공합니다.

 

JButton 객체명 = new JButton("버튼글씨");

 

다음은 JButton 클래스를 이용한 예제입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import javax.swing.*;
import java.awt.*;
public class buttonsample extends JFrame {
    private JButton bt1, bt2;
    public buttonsample() {
        setTitle("버튼 색상예제");
        setLayout(new FlowLayout());
        bt1=new JButton("저장");
        bt2=new JButton("출력");
        
        bt1.setBackground(Color.red);
        bt1.setForeground(Color.blue);
        bt2.setBackground(Color.green);
        bt2.setForeground(Color.yellow);
        //버튼의 배경색과 글씨색 설정
        
        add(bt1);
        add(bt2);
        setSize(350,100);
        setVisible(true);
    }
    
    public static void main(String[] args) {
        buttonsample bt = new buttonsample();
    }
}
 
cs

 

객체.setBackground(Color.색상);  -  객체의 배경색상 지정

 

객체.setForeground(Color.색상);  -  객체의 글자색 지정

 

 

 

 

3. JPanel 컴포넌트

판넬은 다른 컴포넌트를 포함할 수 있는 컴포넌트로 주로 버튼이나 라벨 같은 컴포넌트를 배치한 후, 해당 판넬을 프레임에 배치하는 방식으로 사용됩니다.

Swing 컴포넌트에서는 JPanel 클래스에서 제공합니다.

 

JPanel 객체 = new JPanel(Layout y);       // 인수로 layout 옵션을 지정할 수 있음

 

판넬은 반드시 프레임에 포함되어야 하며, 하나의 윈도우에 여러 개의 판넬을 구성할 수 있습니다.

다음은 JPanel을 사용해서 판넬을 구성한 예시입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import javax.swing.*;
import java.awt.*;
public class panelsample extends JFrame {
    public panelsample() {
        JPanel pn1 = new JPanel();
        JPanel pn2 = new JPanel();
        
        setLayout(null);
        
        pn1.setSize(350,100);  //판넬 크기설정
        pn1.setBackground(Color.red);
        pn1.setLocation(0,0); // 레이아웃을 null로 설정해서 직접 픽셀단위 위치설정
        
        pn2.setSize(350,100);
        pn2.setBackground(Color.blue);
        pn2.setLocation(0,100); //pn1 판넬과 안겹치게 하기위해 y축은 100으로 설정
        
        add(pn1);
        add(pn2);
        
        setTitle("판넬예제");
        setSize(350,300);
        setVisible(true);
    }
    public static void main(String[] args) {
        panelsample pn = new panelsample();
    }
}
cs

 

객체.setSize()  - 프레임 뿐만 아니라 판넬의 크기도 설정 가능한 메소드

 

객체.SetLocation(x축, y축)  -  위치를 픽셀단위로 x, y 축을 설정하는 메소드

 

 

 

 

 

④ 배치 관리자

배치 관리자는 각종 컴포넌트들을 배치하는 방법을 제공해주는 것으로 화면에 버튼이나 판넬 등의 컴포넌트를 화면에 어떻게 출력할지를 결정하는 방법입니다.

 

배치 관리자는 AWT 패키지에서 제공되는 기능이므로 java.awt 패키지를 import 해야 합니다.

배치 관리자는 FlowLayout, BorderLayout, GridLayout 등이 있으며,

배치 관리자를 사용하지 않으면 위의 예시처럼 SetLocation()을 이용해서 픽셀 단위로 지정하여 배치할 수도 있습니다.

 

setLayout(LayoutManager);

 

 

1. FlowLayout

FlowLayout 배치 관리자는 컨테이너 공간 내에 컴포넌트를 추가하면 왼쪽에서 오른쪽으로, 위에서 아래의 순서대로 추가됩니다.

우선 맨 위에서 부터 왼쪽에서 오른쪽 방향으로 순서대로 컴포넌트를 추가하고, 오른쪽 공간이 부족하면 아래로 내려가서 왼쪽에서 오른쪽 방향으로 컴포넌트를 채워 넣습니다.

 

FlowLayout(align, hGap, vGap)

 

// align : FlowLayout.LEFT, FlowLayoutRIGHT, FlowLayoutCENTER 중 한 개 지정 (디폴트는 CENTER)

// hGap: 컴포넌트 사이의 수평 간격을 픽셀 단위로 지정 (디폴트는 5픽셀)

// vGap: 컴포넌트 사이의 수직 간격을 픽셀 단위로 지정 (디폴트는 5픽셀)

 

다음은 FlowLayout을 이용한 버튼의 예시입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import javax.swing.*;
import java.awt.*;
public class flowsample extends JFrame {
    private JButton bt1,bt2,bt3,bt4,bt5;
    public flowsample() {
        setTitle("flow예제");
        setLayout(new FlowLayout(FlowLayout.CENTER,40,40));
        
        bt1=new JButton("코");
        bt2=new JButton("로");
        bt3=new JButton("나");
        bt4=new JButton("조");
        bt5=new JButton("심");
        add(bt1);
        add(bt2);
        add(bt3);
        add(bt4);
        add(bt5);
        setSize(300,200);
        setVisible(true);
    }
    public static void main(String[] args) {
        flowsample f = new flowsample();
    }
}
cs

 

프레임에 사용자가 마우스를 이용하여 윈도우 크기를 변경하게 되면 컴포넌트의 배치가 다음과 같이 변경됩니다.

즉, 크기에 따라서 컴포넌트가 배치 방법으로 재배치 됩니다.

FlowLayout.LEFT와 FlowLayout.RIGHT로 설정하면 다음과 같이 나옵니다.

FlowLayout.LEFT
FlowLayout.RIGHT

 

 

 

 

2. BorderLayout

BorderLayout 관리자는 컨테이너 공간을 동, 서, 남, 북, 가운데의 5개 구역으로 구분하여 배치합니다.

기본적으로 컴포넌트 간의 간격이 없이 배치가 됩니다.

따라서 컴포넌트의 형태가 배치 방향에 따라 변경될 수도 있습니다.

 

BorderLayout(int hGap, int vGap);

 

// hGap : (디폴트는 0픽셀)

// vGap : (디폴트는 0픽셀)

 

add("East", 컴포넌트명);

add("West", 컴포넌트명);

add("South", 컴포넌트명); 

add("North", 컴포넌트명);

add("Center", 컴포넌트명);

 

 

다음은 BorderLayout을 이용한 예시입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import javax.swing.*;
import java.awt.*;
public class bordersample extends JFrame {
    private JButton bt1,bt2,bt3,bt4,bt5;
    public bordersample() {
        setTitle("border예시");
        setLayout(new BorderLayout());
        
        bt1= new JButton("동");
        bt2= new JButton("서");
        bt3= new JButton("남");
        bt4= new JButton("북");
        bt5= new JButton("중앙");
        
        add("East",bt1);
        add("West",bt2);
        add("South",bt3);
        add("North",bt4);
        add("Center",bt5);
        
        setSize(400,200);
        setVisible(true);
    }
    public static void main(String[] args) {
        bordersample b = new bordersample();
    }
}
cs

 

 

 

 

3. GridLayout 

GridLayout 관리자는 컨테이너 공간을 동일한 사각형 격자(그리드)로 분할하고 각 셀에 컴포넌트를 하나씩 배치하는 형태로 배치합니다. 

격자의 구성은 행(row)의 수와 열(col)의 수를 지정할 수 있으며, 행과 열이 정해지면 컴포넌트를 add() 메소드를 이용하여 추가하면 왼쪽에서 오른쪽으로, 위에서 아래방향으로 순서대로 추가됩니다.

 

GridLayout(int rows, int cols, int hGap, int vGap);

 

// rows : 격자의 행 수 (디폴트는 1)

// cols : 격자의 열 수 (디폴트는 1)

// hGap : 컴포넌트 사이의 수평 간격을 픽셀 단위로 지정 (디폴트는 0픽셀)

// vGap : 컴포넌트 사이의 수직 간격을 픽셀 단위로 지정 (디폴트는 0픽셀)

 

다음은 GridLayout을 이용한 예시입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import javax.swing.*;
import java.awt.*;
public class gridsample extends JFrame {
    private JButton bt1, bt2, bt3, bt4, bt5, bt6;
    private JButton bt7, bt8, bt9, bt10, bt11, bt12;
    public gridsample() {
        setTitle("border예제");
        setLayout(new GridLayout(4,3));
        
        bt1=new JButton("1");
        bt2=new JButton("2");
        bt3=new JButton("3");
        bt4=new JButton("4");
        bt5=new JButton("5");
        bt6=new JButton("6");
        bt7=new JButton("7");
        bt8=new JButton("8");
        bt9=new JButton("9");
        bt10=new JButton("*");
        bt11=new JButton("0");
        bt12=new JButton("#");
        
        add(bt1);
        add(bt2);
        add(bt3);
        add(bt4);
        add(bt5);
        add(bt6);
        add(bt7);
        add(bt8);
        add(bt9);
        add(bt10);
        add(bt11);
        add(bt12);
        
        setSize(100,200);
        setVisible(true);
    }
    public static void main (String args[]) {
        gridsample g = new gridsample();
    }
}
 
cs

 

 

 

4. 배치 관리자를 사용하지 않는 배치 방법

원하는 위치에 컴포넌트를 배치하거나, 윈도우의 크기나 모양이 바뀌어도 컴포넌트의 위치를 고정하고자 하는 경우에 배치 관리자를 사용하지 않고 컴포너트 절대 위치를 지정할 수도 있습니다.

 

setLayout (null);    // 배치 관리자를 사용하지 않음을 선언

 

Component.setSize (int width, int height);    // 가로, 세로의 크기를 픽셀로 지정

 

Componenet.setLocation ( int x, int y);    // 프레임에서의 x, y 위치를 픽셀로 지정

 

Component.setBounds (int x, int y, int width, int height);     //컴포넌트의 위치와 크기를 동시에 지정

 

 

배치관리자를 사용하지 않는 경우에는 반드시 setSize() 와 setLocation()을 둘 다 설정해야 원하는 설정을 할 수 있습니다.

setSize()만 설정하게 되면 위치는 (0, 0) 위치에 컨포넌트가 출력되지만, setLocation()만 설정하게 되면 크기를 설정 안했으므로 컨포넌트가 윈도우에 출력되지 않습니다. 

 

 

 

 

(3) 기타 컴포넌트

JTextField 컴포넌트

텍스트필드는 사용자로부터 정보를 입력받을 수 있는 칸을 제공해주는 컴포넌트로 한 줄의 정보를 입력받을 수 있습니다.

 

JTestField 객체 = new JTextField(String text, int col);

 

// text : 표시하고자 하는 문자열을 텍스트필드에 문자열이 표시된 상태로 생성함 (디폴트는 공백)

// col : 문자의 개수를 설정해서 크기를 설정함.

 

 

JTextArea 컴포넌트

텍스트에어리어는 여러 줄의 정보를 입력할 수 있는 칸을 제공해줍니다.

 

JTextArea 객체 = new JTextArea(String text, int rows, int cols);

 

// text : 초기에 TextArea 에 표시할 문자열

// rows : TextArea의 열(줄)의 수

// cols : TextArea의 행의 수

 

다음은 JTextfield 와 JTextArea를 사용한 예시입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import javax.swing.*;
import java.awt.*;
public class textsample extends JFrame{
    JTextField tf1, tf2;
    JTextArea ta;
    JLabel lb1, lb2, lb3;
    JPanel pn1, pn2, pn3;
    public textsample() {
        setTitle("text예제");
        setLayout(new BorderLayout());
        
        tf1 = new JTextField(8);
        tf2 = new JTextField(20);
        ta = new JTextArea(8,30);
        
        lb1= new JLabel("작성자: ");
        lb2= new JLabel("제목: ");
        lb3= new JLabel("내용: ");
        pn1= new JPanel();
        pn2= new JPanel();
        pn3= new JPanel();
        
        pn1.add(lb1);
        pn1.add(tf1);
        pn2.add(lb2);
        pn2.add(tf2);
        pn3.add(lb3);
        pn3.add(ta);
        
        add("North",pn1);
        add("Center",pn2);
        add("South",pn3);
        
        setSize(500,250);
        setVisible(true);
    }
    public static void main(String args[]) {
        textsample t = new textsample();
    }
}
cs

페널에 레이블과 텍스트필드,에어리어를 넣고 페널을 프레임에 설정한 위치에 맞게 넣었습니다.

 

 

 

 

JCheckBox 컴포넌트

체크박스는 여러 개의 항목 중 중복해서 선택할 수 있도록 해주는 기능을 제공합니다.

체크박스는 네모 모양의 클릭할 수 있는 체크박스가 나오며 선택사항의 항목을 text로 설정할 수 있습니다.

 

JCheckBox 객체 = new JCheckBox(String text, boolean selected);

 

// text : 체크박스에 표시할 문자열

// selected : true 이면 초기에 선택 상태로 생성함

 

 

 

JRadioButton 컴포넌트

라디오 버튼은 체크박스와는 달리 오직 하나의 항목만 선택할 수 있습니다.

Swing 컴포넌트에서는 JRadioButton 클래스에서 제공되며 동그라미 모양의 클릭할 수 있는 라디오버튼이 나타납니다.

 

 

ButtonGroup 그룹객체 = new ButtonGroup();      // 라디오버튼 그룹 생성

 

JRadioButton 버튼객체1 = new JRadioButton(String text, boolean selected);

JRadioButton 버튼객체2 = new JRadioButton(String text, boolean selected);

 

// text : 라디오버튼에 표시할 문자열

// selected : true 이면 초기에 선택 상태로 생성

 

그룹객체.add(버튼객체1);     // 라디오버튼 그룹에 추가

 

 

다음은 체크박스와 라디오버튼을 사용한 예시입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import javax.swing.*;
import java.awt.*;
public class boxradiosample extends JFrame {
    JCheckBox cb1, cb2, cb3, cb4;
    JRadioButton rb1, rb2;
    JLabel lb1, lb2;
    JPanel pn1, pn2;
    public boxradiosample(){
        setTitle("체크박스,라디오버튼예제");
        setSize(500,100);
        setLayout(new BorderLayout());
        
        lb1= new JLabel("탕수육: ");
        lb2= new JLabel("선호메뉴: ");
        
        ButtonGroup grp = new ButtonGroup();
        rb1= new JRadioButton("찍먹",true);
        rb2= new JRadioButton("부먹");
        grp.add(rb1);
        grp.add(rb2);
        
        cb1= new JCheckBox("짜장면");
        cb2= new JCheckBox("짬뽕");
        cb3= new JCheckBox("유산슬");
        cb4= new JCheckBox("깐풍새우");
        
        pn1= new JPanel();
        pn2= new JPanel();
        
        pn1.add(lb1);   // 탕수육
        pn1.add(rb1);   // 찍먹
        pn1.add(rb2);   // 부먹
        pn2.add(lb2);   // 선호메뉴
        pn2.add(cb1);   // 짜장면
        pn2.add(cb2);   // 짬뽕
        pn2.add(cb3);   // 유산슬
        pn2.add(cb4);   // 깐풍새우
        
        add("North",pn1);
        add("South",pn2);
        setVisible(true); //setVisible(true)는 꼭 마지막에 해야 됩니다.
    }
    public static void main (String args[]) {
        boxradiosample br= new boxradiosample();
    }
}
cs

17번째 줄에 true 라고 설정을해서 "찍먹" radiobutton 초기 실행에 체크가 되어있습니다.

checkbox로 만든 "선호메뉴" 항목들은 중복선택이 위와같이 가능합니다.

 

 

 

 

JList 컴포넌트

리스트는 여러 개의 항목 중에서 선택할 수 있도록 해주는 기능을 제공하며 펼침 목록 형태로 제공됩니다.

항목의 선택은 중복선택을 하도록 할 수 있고, 단일 항목만 선택하도록 설정할 수도 있습니다.

 

String [ ] DataList = { "항목1", "항목2", ... };

JList 객체 = new JList(String [ ] DataList);

 

// DataList : 항목들의 이름이 저장되어 있는 배열 이름

 

다음은 JList를 사용한 예시입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import javax.swing.*;
import java.awt.*;
public class listsample extends JFrame{
    JLabel lb;
    JList l;
    String [] fruits = {"사과""파인애플""바나나""수박""딸기"};
    public listsample() {
        setTitle("리스트예제");
        setLayout(new FlowLayout());
        
        lb= new JLabel("과일");
        l = new JList(fruits);
        
        add(lb);
        add(l);
        setSize(300,200);
        setVisible(true);
    }
    public static void main (String args[]) {
        listsample ls= new listsample();
    }
}
 
cs

 

 

 

 

JComboBox 컴포넌트

콤보박스는 드롭다운 리스트로 구성되어 여러 개의 항목 중에서 선택할 수 있도록 하는 기능을 제공합니다.

리스트와 다른 점은 버튼을 클릭하면 항목이 보여준다는 점입니다.

 

String [ ] DataList = { "항목1", "항목2", ... };

JComboBox 객체 = new JComboBox(String [ ] DataList);

 

// DataList : 항목들의 이름이 저장되어 있는 배열 이름

 

다음은 JComboBox를 이용한 예시입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import javax.swing.*;
import java.awt.*;
public class comboboxsample extends JFrame{
    JLabel lb1;
    JComboBox cb1;
    String [] meal = {"피자","치킨","햄버거","스파게티","삼겹살","갈비"};
    public comboboxsample() {
        lb1 = new JLabel("식사: ");
        cb1 = new JComboBox(meal);
        add(lb1);
        add(cb1);
        setTitle("콤보박스예제");
        setSize(300,200);
        setLayout(new FlowLayout());
        setVisible(true);
    }
    public static void main(String args[]) {
        comboboxsample cbs = new comboboxsample();
    }
}
 
cs

 

'It공부 > Java' 카테고리의 다른 글

7. 이벤트 프로그래밍 (2)  (0) 2020.07.14
7. 이벤트 프로그래밍 (1)  (0) 2020.07.13
5. 클래스 상속  (0) 2020.07.11
4. 클래스와 객체  (0) 2020.07.10
3. 자바 문법 기초2  (0) 2020.07.09
Comments