아무거나

JAVA 그래픽 본문

Java & Kotlin/Java

JAVA 그래픽

전봉근 2019. 8. 16. 23:57
반응형

[JAVA 그래픽]

JAVA GUI(Graphic User Interface)란

아이콘처럼 사용자가 사용하기 편리하게 그래픽 요소를 가미하여 컴퓨터를 사용하기 쉽게 만들어 놓은 것입니다.

반대의 개념으로 CUI(Character User Interface)가 있다.(ex-dos)

 

1. AWT 컴포넌트

-> AWT는 JAVA에서 그래픽 요소를 만들기 위한 컴포넌트들 이다. 예를 들어 버튼, 체크박스 등 입니다.

container { 버튼, 텍스트필드, 체크박스, container {버튼, 텍스트필드....} }

 

2. Button 컴포넌트

ex) [MainClass.java]

public class MainClass {
    public static void main(String[] ages) {
        MakeBtn btn = new MakeBtn();
        btn.pack();
        btn.setSize(new Dimension(200, 200)); // size설정 Dimension (가로,세로)
        btn.setVisible(true);

        try {
        	Thread.sleep(2000);
        } catch (Exception e) {}

        btn.setVisible(false);
        btn.dispose();

        try {
        	Thread.sleep(2000);
        } catch (Exception e) {}
        
        System.exit(0);
    }
}

 

 

[MakeBtn.java]

import java.awt.*;

public class MakeBtn extends Frame {
    public MakeBtn() {
        Button btn = new Button("Button");
        add(btn);
    }
}

 

 

* pack() : 컴포넌트의 사이즈를 정함

setSize() : 컴포넌트 사이즈를 개발자가 정함

setVisible(true) : 화면에 출력

dispose() : 자원 해제

System.exit() : 애플리케이션 종료

 

 

3. Frame, Panel, List, Components, Event 처리

-> 큼지막하게 Frame이 있고 그 위에 List, Panel있고 Panel안에 Component들이 있다.

 

ex) [MainClass.java]

import java.awt.*;

public class MainClass {
    public static void main(String[] args) {
        MakeFrame makeFrame = new MakeFrame();
        makeFrame.setSize(new Dimension(500, 500));
        makeFrame.setVisible(true);
    }
}

 

 

[MakeFrame.java]

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

// ActionListener 구현하면 actionPerformed메소드를 오버라이드 해줘야 된다.
// actionPerformed는 어떤 버튼이나 어떤 이벤트가 발생했을때 그 이벤트가 매개변수로 들어오면서 자동으로 호출된다.
public class MakeFrame extends Frame implements ActionListener {
    private List list; // 아래 흰 화면
    private Panel panel; // 텍스트 박스 및 버튼등을 감싸고 있는걸 패널
    private TextField textField;
    private Button okBtn;
    private Button exitBtn;

    public MakeFrame() {
        list = new List();
        panel = new Panel();
        textField = new TextField();
        okBtn = new Button("OK");
        exitBtn = new Button("EXIT");


        setLayout(new BorderLayout()); // Frame에 있는 method
        add(panel, BorderLayout.NORTH);
        add(list, BorderLayout.CENTER);

        panel.add(new Label("write")); // 패널에 적용
        panel.add(textField);
        panel.add(okBtn);
        panel.add(exitBtn);


        // 아래 두개의 this는 actionPerformed을 호출한다.
        okBtn.addActionListener(this);
        exitBtn.addActionListener(this);

        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                setVisible(false);
                dispose();
                System.exit(0);
            }
        });
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == okBtn) {
        	list.add(textField.getText());
        } else if(e.getSource() == exitBtn) {
            setVisible(false);
            dispose();
            System.exit(0);
        }
    }
}

 

 

 

4. Swing 컴포넌트

-> Swing은 AWT보다 진보된 기능이라고 생각 하면 된다.

진보됐다는 것은 AWT보다 나중에 만들어져, 복잡하고 화려한 컴포넌트를 제공 한다.

(실무에서 많이 쓰이진 않는다.. 안드로이드를 하게되면 swing와 비슷한 구조를 보게 된다.)

 

ex) [MainClass.java]

public class MainClass {
    public static void main(String[] args) {
        MakeComp makeComp = new MakeComp();
        makeComp.pack();
        makeComp.setVisible(true);
    }
}

 

 

[MakeComp.java]

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


// swing은 모든 class가 J로 시작한다 그래서 JFrame를 상속받았다.
public class MakeComp extends JFrame implements ActionListener {

    JPanel jPanel;
    JLabel jLabel;
    JButton jButton;
    JButton jButtonExit;
    JTextField jTextField;
    JComboBox jComboBox;
    JCheckBox jCheckBox;
    String[] items = {"A", "B", "C"};
    JLabel jLabelBlank;


    public MakeComp() {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jPanel = (JPanel)getContentPane();
        jPanel.setLayout(new FlowLayout());
        jLabel = new JLabel("Label");
        jButton = new JButton("Button");
        jTextField = new JTextField(20);
        jComboBox = new JComboBox(items);
        jCheckBox = new JCheckBox("CheckBox");
        jLabelBlank = new JLabel();
        jButtonExit = new JButton("Exit");

        jPanel.add(jLabel);
        jPanel.add(jButton);
        jPanel.add(jTextField);
        jPanel.add(jComboBox);
        jPanel.add(jCheckBox);
        jPanel.add(jLabelBlank);
        jPanel.add(jButtonExit);


        jLabel.setPreferredSize(new Dimension(50, 50));
        jButton.setPreferredSize(new Dimension(100, 50));
        jTextField.setPreferredSize(new Dimension(300, 50));
        jComboBox.setPreferredSize(new Dimension(50,50));
        jCheckBox.setPreferredSize(new Dimension(100,50));
        jLabelBlank.setPreferredSize(new Dimension(200,50));
        jButtonExit.setPreferredSize(new Dimension(100,50));

        jButton.addActionListener(this);
        jButtonExit.addActionListener(this);
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == jButton) {
        	jLabelBlank.setText(jTextField.getText());
        } else if(e.getSource() == jButtonExit) {
            setVisible(false);
            dispose();
            System.exit(0);
        }
    }
}

 

반응형

'Java & Kotlin > Java' 카테고리의 다른 글

iterator vs foreach  (0) 2019.08.17
JAVA 네트워크  (0) 2019.08.17
스레드(Thread)  (0) 2019.08.16
입출력(I/O)  (0) 2019.08.16
JAVA Collections  (0) 2019.08.16
Comments