본문 바로가기

개발/JAVA

Java GUI 다시 공부



GUI란?

Graphical User Interface (사용자 그래픽 인터페이스)

GUI Programming: 

한 윈도우를 바탕으로 Frame, Label, Button 등을 위에 붙여 올리면서, 시각적인 요소를 프로그래밍 하는 것


AWT

Abstract Window Toolkit

OS에서 제공하는 UI 컴포넌트를 이용하는 자바 라이브러리 (운영체제에 따라서 모양이 조금씩 다르다.)


Swing

AWT의 다음 주자로써 모든 OS상에서 동일한 UI를 갖도록,

운영체제가 제공하는 네이티브 UI 컴포넌트를 사용하지 말자는 것, 

Swing 자신만의 UI(Look and Feel)를 갖도록 하자는 중심 아이디어로 시작 되었다.


JavaFX

멀티 스레딩과 서버와의 통신 기능은 자바 표준 API를 사용하면서 JavaFX에서 제공하는 풍부한 UI 기능을 활용할 수 있다

UI 구성이 더 간편하고 고수준의 그래픽 작업을 수행할 수 있다.

단점: 현재 주류 기술이 아니기 때문에 오픈 프로젝트와 같은 자료가 많지 않다.

또한 타 플랫폼 대비 퍼포먼스가 떨어지고 플랫폼의 안정성이 아직 완전히 정착되지 못했다.


(출처: 

JavaFX 관련 - http://helloit.tistory.com/129

이것이 자바다 책)


Swing 이용한 GUI Programming

(JFrame 상속받아서 진행)

계산기...... (미완성)

package milcalculator;



import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Font;

import java.awt.GridBagLayout;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.InputEvent;


import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

import javax.swing.KeyStroke;


class CalculatorInheFrame extends JFrame implements ActionListener{

JPanel jpButton, jpResult; // 패널 초기화

JLabel jlbResult1, jlbResult2; // 레이블 초기화

JButton[] jbButton = null; // 버튼배열 초기화

String[] numStr = { "←", "CE", "C", "÷",

"7", "8", "9", "*",

"4", "5", "6", "-",

"1", "2", "3", "+",

"0", "00", ".", "=" };


// 생성자로써 프레임을 만듦

public CalculatorInheFrame() {

super("밀2호: 계산기");

// setTitle("밀2호: 계산기")와 같음!

getContentPane().setLayout(new BorderLayout(20,20));

// 전체 레이아웃을 BorderLayout으로! 

// ● 레이블 시작

jpResult = new JPanel(new GridLayout(2, 1, 5, 5));

// jpResult 패널에 GridLayout 적용 ( 2x1 크기!)

jpResult.setBackground(new Color(230,230,230));

jlbResult1 = new JLabel("", JLabel.RIGHT); // 오른쪽 정렬

jlbResult2 = new JLabel("0", JLabel.RIGHT); // 기본값 0으로 줌

jlbResult2.setFont(new Font("나눔바른고딕", Font.BOLD, 42));

jpResult.add(jlbResult1);

jpResult.add(jlbResult2);

// ● 버튼 시작

jpButton = new JPanel(new GridLayout(5, 4, 5, 5));

// jpButton패널에 GridLayout 적용 ( 5x4 크기, 간격은 가로세로 2씩)

jpButton.setBackground(new Color(230,230,230));

jbButton = new JButton[numStr.length];

// jbButton의 값들 적용

for (int i=0; i<numStr.length; i++) {

jbButton[i] = new JButton(numStr[i]);

jbButton[i].setBackground(new Color(250,250,250));

jbButton[i].setBorderPainted(false);

jbButton[i].setFont(new Font("나눔바른고딕", Font.BOLD, 25));

jpButton.add(jbButton[i]);

jbButton[i].addActionListener(this);

}

getContentPane().add("North", jpResult);

getContentPane().add("Center", jpButton);

// setBounds(500, 400, 400, 500);

setSize(400, 500);

getContentPane().setBackground(new Color(230,230,230));

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setResizable(false);

setVisible(true);

// setVisible을 안하면 창 자체가 아예 안 뜸

}


// 버튼 이벤트

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

}

}


public class CalculatorInhe {

public static void main(String[] args) {

new CalculatorInheFrame();

}

}

(위 코드의 참고처: http://seinarin.tistory.com/59?category=523859)



 setSize(): 컴포넌트 위치 지정

 setLocation(): 컴포넌트 크기 지정

 setBounds(): 컴포넌트 위치+크기 지정

 setPreffersize(): 컴포넌트 최적 크기 지정

 ▶Layout이 따로 적용된 부분에서는 setPreffersize()만 사용 가능. (레이아웃 매니저가 배치와 크기를 알아서 한다고 함.)

    Layout이 적용 안된 곳에서는 쓰면 아무 효과 없음. (setLocation() + setPreffersize() 하면 크기가 0이라 보이지 않는다고 함.)


(출처: http://blog.naver.com/PostView.nhn?blogId=skykingkjs&logNo=150171253952)



* Layout

1. GridLayout

 바둑판 처럼 모든 컴포넌트를 똑같이 행/열로 나누어 배치 시킴.

 ▶GridBagLayout 참고: http://javafreak.tistory.com/214


2. FlowLayout

 왼쪽에서 오른쪽으로 컴포넌트를 차례차례 배치 시킴. 한 줄이 꽉 차면 줄바꿈해서 배치.




반응형

'개발 > JAVA' 카테고리의 다른 글

Spring MySQL DataSource 부분 정리  (0) 2018.08.08
밀2호:계산기 ver.2  (0) 2018.07.24
프로젝트명: 밀 1호  (0) 2018.05.03
버전 관리  (0) 2018.04.23
프로퍼티 개념 챙기기  (0) 2018.02.28