본문 바로가기

JAVA 공책/수업 메모

Swing

Swing(javax.swing)

14.Swing.pptx



=>AWT는 운영체제의 자원을 가지고 GUI 프로그램을 하지만 Swing은 운영체제와 상관없이 JVM자원을 가지고 GUI 프로그램을 합니다.

=>운영체제 종류에 상관없이 모두 동일한 UI를 갖습니다.

=>더블 버퍼링을 이용하기 때문에 출력 속도도 AWT에 비해서 빠릅니다.

=>frame과 panel 쓰는 방법은 AWT와 같다.

1. JFrame

->윈도우에 해당하는 클래스

2. JPanel

->여러 개의 컴포넌트들을 묶어서 배치하기 위한 컨테이너

3.JScrollPane

->화면 출력 영역보다 더 큰 컴포넌트를 스크롤 바와 함께 출력하는 컨테이너

->하나의 컴포넌트만 배치할 수 있습니다.(JPanel과의 차이점)




4.보더와 툴팁을 추가할 수 있습니다.

border:경계선 - setBorder

tooltip:마우스를 올려 놓았을 때 보여지는 텍스트 - setTooltipText

5.JLabel

=>레이블

=>레이블에 이미지를 출력할 수 잇습니다

=>이미지 아이콘 만들기

new ImageIcon("이미지 파일의 경로")

패턴을 가진 무언가를 반복해서 보여주고 할 때는 배열이나 리스트를 생각할 수 있어야 합니다.

이미지를 바꿔가면서 보여주고 싶을 때도 마찬가지 입니다.


6. 버튼

1)JButton

->클릭해서 작업을 수행하도록 하기 위한 컴포넌트(이미지 가능)

2) JToggleButton

->눌러진 상태와 누를 수 있는 상태 2가지를 가진 버튼(이미지 가능)

3) JRadioButton

->여러 개 중에서 필수적으로 하나만 선택하는 경우에 사용하는 버튼

->ButtonGroup으로 묶어 주어야 하나의 그룹이 됩니다.

->라디오 버튼을 배치할 때 유의할 점은 그룹 내의 버튼 중에 하나는 선택된 상태로 시작하도록 해주어야 합니다.

->최근의 웹에서는 라디오 버튼 대신에 이미지를 묶어서 보여주는 경우가 많습니다.

4)JCheckBox

->여러 개 중에서 0개 이상을 서택할 수 있도록 할 때 사용하는 버튼

만약 새로운 버전이 나왔다면 뉴피쳐라고 해서 바뀐 부분만 메일로 보내주는 사이트가 있다. 가입해두면 좋다.

7. 텍스트 입력 컴포넌트

1)JTextField

->한줄의 문자열을 입력받기 위한 컴포넌트

2)JPasswordField

->한 줄의 문자열을 입력받는데 EchoChar를 설정해서 입력한 문자열이 아니라 EchoChar가 보이도록 하는 컴포넌트

->getPassword()를 호출하면 입력된 문자들을 Char[]로 리턴합니다.

->비밀번호는 문자 단위로 유효성 검사를 하는 경우가 많기 때문입니다.

3)JTextArea

->여러 줄의 문자열을 입력받기 위한 컴포넌트



8.toString() - 중요

->인스턴스를 문자열로 만들어서 리턴하는 메소드

->재정의 되어 있지 않으면 클래스이름과 해시코드를 리턴합니다.

->인스턴스를 출력하는 메소드에 대입하면 toString()의 결과가 출력됩니다.

->모든 언어에서 어떤 객체를 넣었는데 문자열로 변환이 된다면 toString()이 작용한 것입니다.

9.JComboBox

->여러 개의 항목 중에서 하나의 항목을 선택하기 위한 컴포넌트

->선택 항목이 여러 개 일 때는 라디오 버튼을 사용하지 않고 JComboBox를 이용하도록 하는 것이 좋습니다.

->iOS는 피커를 이용합니다.(근본적으로 아이폰에는 콤보박스가 없고 피커라는 것을 이용합니다.)

->항목을 설정할 때 String을 매개변수로 받는 것이 아니고 Object를 매개변수로 받는데, 그 이유는 화면에 출력할 때 toString()의 결과를 출력하기 때문입니다.




package swing;
import java.awt.Color;
import java.util.ArrayList;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
//윈도우 클래스
public class Windo_one extends JFrame {
     public Windo_one() {
          // 위치, 크기 설정
          setBounds(200, 200, 600, 600);
          // 제목 설정
          setTitle("Swing one Project");
          // 종료 버튼 이벤트 처리
          setDefaultCloseOperation(EXIT_ON_CLOSE);
          // 패널 생성
          JPanel panel = new JPanel();
          ImageIcon icon = new ImageIcon("C:\\Users\\503-26\\Downloads\\1.jpg");
          JLabel label = new JLabel(icon);
          JLabel label0 = new JLabel("    ");
          JLabel label1 = new JLabel("액션토끼 졸귀");
          JLabel label2 = new JLabel();
          label2.setIcon(icon);
          label.setToolTipText("얍~! *");
          /*
           * TitledBorder border = new TitledBorder("경계선"); label.setBorder(border);
           */
          EtchedBorder border = new EtchedBorder(Color.RED, Color.pink);
          label.setBorder(border);
          panel.add(label2);
          
          
          JButton btn = new JButton("Button");
          panel.add(btn);
          
          panel.add(label);
          panel.add(label0);
          panel.add(label1);
          
          
          
          // 패널 프레임에 부착
          add(panel);
          // 화면 출력
          setVisible(true);
          
            //그림 파일 이름을 배열로 만들기. 배열은 만들면 크기 변경이 안 됩니다.
          String [] images = { "1.jpg",
            "2.jpg", "3.jpg", "4.png","5.gif","6.gif","7.gif" };
          
          // 리스트는 만들어도 크기 변경이 가능합니
          ArrayList<String> list = new ArrayList<String>();
          list.add("1.jpg");
          list.add("2.jpg");
          list.add("3.jpg");
          list.add("4.png");
          list.add("5.gif");
          list.add("6.gif");
          list.add("7.gif");
          // 이미지가 변경되는 동안에도 다른 작업을 할 수 있도록 해야 하므로 이미지 변경은 스레드로 생성
          Thread th = new Thread() {
              public void run() {
                   int idx = 0;
                   while (true) {
                        try {
                             Thread.sleep(1000);
                             
                             ImageIcon icon = new ImageIcon("C:\\Users\\503-26\\Downloads\\"+list.get(idx%list.size())); //images[idx%images.length]
                             label.setIcon(icon);
                             idx = idx + 1;
                        } catch (InterruptedException e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                        }
                   }
              }
          };
          th.start();
     }