티스토리 뷰

GUI를 위해 설치 진행

 

 

 

Help > Install new Software 클릭 

 

브라우저에 입력

 

다운로드 아래에서 밑줄 친 버전 클릭

 

 

URL을 복사하기 

 

 

Add 하고 

name : Window Builder 

Location : 아까 복사한 URL 복붙 

 

 

두 개 선택하고 next 

 

 

여기도 next

 

 

 

라이센스 동의 허용하고 Finish

 

 


 

 

 

new > others 

 

Window 입력하고 Application Window 누르고 Next

 

Package , name 입력하고 Finish

 

 

Design 에서 기능을 구현해서 Source에서 코드를 수정해도 된다! 

 

 


 

 

GUI02

 

내용을 입력하면
입력한 내용으로 출력된다

 

Design 요소 : 

 

getContentPane() 클릭 > Layout > absolute 변경

 

팔레트

 

"오늘은 월요일 입니다. "  => JLabel 선택

Design 에서 내용을 바꿀 수 있음

 

 

Variable > 변수명

font > 폰트 / 글자 크기 변경

horizon... > 왼오/중앙 정렬 방식 

text > JLabel 내부 텍스트 변경가능 

 

Source에서 내용

 

 

이렇게 변경하면 

 

Source도 알아서 바뀐다!

Source에서 삭제하면 당연히 Design에서도 지워짐

 

 

package edu.java.gui02;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.SwingConstants;
import javax.swing.JButton;

public class GuiMain02 {

	private JFrame frame;
	private JTextField textInput;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					GuiMain02 window = new GuiMain02();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public GuiMain02() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 505);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);
		JLabel lblOutput = new JLabel("오늘은 월요일입니다.");
		lblOutput.setHorizontalAlignment(SwingConstants.CENTER);
		lblOutput.setFont(new Font("맑은 고딕", Font.BOLD, 18));
		lblOutput.setForeground(Color.GRAY);
		lblOutput.setBounds(25, 10, 397, 49);
		frame.getContentPane().add(lblOutput);
		
		// 이벤트 리스너에서 접근하는 변수들은 
		// 멤버 변수로 선언하는 것이 좋음
		textInput = new JTextField();
		textInput.setBounds(25, 69, 381, 75);
		textInput.setFont(new Font ("맑은 고딕", Font.PLAIN, 24));
		frame.getContentPane().add(textInput);
		textInput.setColumns(10);
		
		JButton btnInput = new JButton("입력");
		btnInput.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// 버튼을 클릭하면
				// JTestFiled 에 입력된 내용을 읽어서 
				//JLabel 에 출력(쓰기)
				String msg = textInput.getText();
				System.out.println(msg);
				lblOutput.setText(msg);
			}
		}); //마우스를 클릭하면
		
		btnInput.setBounds(12, 154, 410, 86);
		frame.getContentPane().add(btnInput);
		btnInput.setFont(new Font("굴림",Font.PLAIN, 18));
		frame.getContentPane().add(btnInput);
		
		System.out.println("initialize 메소드 호출 끝");
		
	}
}

 

 

중간에 이벤트 리스너에서 접근하는 변수를 멤버변수로 선언하는 이유를 더 설명하면

 

1. 변수의 범위와 생명주기 - 

지역변수는 메서드 내에서만 사용되고 메서드가 종료되면 사라지지만,

멤버 변수는 객체의 생명주기 동안 유지되기 때문에 

 

2. 데이터 공유와 상태 유지 -

멤버변수는 클래스 내의 여러 메서드에서 공유되므로 데이터를 공유하고 상태를 유지할 수 있어서 

 

3. 가독성 -

이벤트 리스너 외부에서도 접근 가능한 변수를 멤버 변수로 선언하면 코드의 가독성이 향상되어서 

 

등의 이유가 있다

 

 

또한 

 

 

코드 구현에 신경쓸 포인트 :

textInput에 text를 쓰고 btnInput(버튼)을 입력하면 

그때, text를 읽어서 

lblOutput에 출력해야한다. 

 

 

직접 코드를 입력할 수도 있지만 design을 사용한다면

 

버튼 생성 > 우클릭 > Add event handler > mouse > mouseClicked 

 

이렇게 알아서 생성해줌

 


 

파일을 열때도 조금 다름 

Open with > Window Builder editor 

이렇게 열기

 

 

 

GUI03

/

이름 , 전화번호 , 이메일을 입력하고 

입력한 각각의 JTextField를 

버튼을 누르면

읽어서 

JTextField에 나타내기 

또 scroll을 만들어서 입력한 전체 내용을 볼 수 있게 할 것 (JTextArea)

 

 

 

 

 

전체코드 

 

package edu.java.gui03;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class GuiMain03 {

	private JFrame frame;
	private JTextField txtName;
	private JTextField txtPhone;
	private JTextField txtEmail;
	private JButton btnInsert;
	private JTextField txtOutput;
	private JTextArea textArea;

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					GuiMain03 window = new GuiMain03();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public GuiMain03() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 500, 650);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null); // Absolute layout
		
		int lblWidth = 245; // 레이블 넓이
		int lblHeight = 76; // 레이블 높이
		Font lblFont = new Font("굴림", Font.BOLD, 48);
		
		JLabel lblName = new JLabel("이름");
		lblName.setHorizontalAlignment(SwingConstants.CENTER);
		lblName.setBackground(Color.PINK);
		lblName.setOpaque(true); // 배경색 설정을 위한 세팅
		lblName.setBounds(12, 10, lblWidth, lblHeight);
		lblName.setFont(lblFont);
		frame.getContentPane().add(lblName);
		
		JLabel lblPhone = new JLabel("전화번호");
		lblPhone.setOpaque(true);
		lblPhone.setHorizontalAlignment(SwingConstants.CENTER);
		lblPhone.setFont(lblFont);
		lblPhone.setBackground(Color.ORANGE);
		lblPhone.setBounds(12, 96, lblWidth, lblHeight);
		frame.getContentPane().add(lblPhone);
		
		JLabel lblEmail = new JLabel("이메일");
		lblEmail.setOpaque(true);
		lblEmail.setHorizontalAlignment(SwingConstants.CENTER);
		lblEmail.setFont(lblFont);
		lblEmail.setBackground(new Color(30, 144, 255));
		lblEmail.setBounds(12, 182, lblWidth, lblHeight);
		frame.getContentPane().add(lblEmail);
		
		int txtWidth = 203;
		int txtHeight = 76;
		Font txtFont = new Font("굴림", Font.PLAIN, 30);
		
		txtName = new JTextField();
		txtName.setBounds(269, 10, txtWidth, txtHeight);
		txtName.setFont(txtFont);
		frame.getContentPane().add(txtName);
		txtName.setColumns(10);
		
		txtPhone = new JTextField();
		txtPhone.setFont(txtFont);
		txtPhone.setColumns(10);
		txtPhone.setBounds(269, 96, txtWidth, txtHeight);
		frame.getContentPane().add(txtPhone);
		
		txtEmail = new JTextField();
		txtEmail.setFont(txtFont);
		txtEmail.setColumns(10);
		txtEmail.setBounds(269, 182, txtWidth, txtHeight);
		frame.getContentPane().add(txtEmail);
		
		btnInsert = new JButton("정보 출력");
		btnInsert.setFont(txtFont);
		btnInsert.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String name = txtName.getText();
				String phone = txtPhone.getText();
				String email = txtEmail.getText();
				
				String msg = "이름 : " + name + "\n"
							+ "전화번호 : " + phone + "\n"
							+ "이메일 : " + email + "\n";
				txtOutput.setText(msg);
//				textArea.setText(msg);
				textArea.append(msg); // 문자열을 연결해서 출력
				
			}
		});
		btnInsert.setBounds(12, 268, 460, 76);
		frame.getContentPane().add(btnInsert);
		txtOutput = new JTextField();
		txtOutput.setFont(txtFont);
		txtOutput.setBounds(12, 354, 460, 76);
		frame.getContentPane().add(txtOutput);
		txtOutput.setColumns(10);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(12, 440, 460, 161);
		frame.getContentPane().add(scrollPane);
		
		textArea = new JTextArea();
		scrollPane.setViewportView(textArea);
		
	}
} // end GuiMain03

 

 

 

 

 

GUI 04

 

 

 

 

1. num1 , num2 로 JLabel(textNumber1,2) 에 입력된 값을 getText()로 읽어옴 

2. 문자열은 사칙연산 할 수 없으므로, 문자열을 숫자로 변환한다.

3. 더한 값을 담을 변수 result  를 선언하고 값을 담고 줄 바꿈(\n) 도 해준다.

4. textArea 에 결과를 출력한다. 

 

Button btnPlus = new JButton("+");
      btnPlus.addMouseListener(new MouseAdapter() {
      	@Override
      	public void mouseClicked(MouseEvent e) {
      		System.out.println("btnPlus : mouseClicked()");
      		String num1 = textNumber1.getText();
      		String num2 = textNumber2.getText();
      		
      		// 문자열을 숫자로 변환 
      		double x = Double.parseDouble(num1);
      		double y = Double.parseDouble(num2);
      		
      		String result = x + " + " + y + " = " + (x + y) + "\n"; 
      		textArea.append(result);
      	}
      });

 

 

- 도 마찬가지, /도 마찬가지임

 

 

 

 

 

GUI05

 

 

하나는 기본 선택지로 체크 되어있어야한다

 

 

1. Design 으로 간다. (Open with > Window Builder) 

2. getContentPane() > Layout > (absolute)로 변경

3. Palette > Components > JRadioButton 선택

4. 하나가 기본 선택지로 체크되어있으려면, 두 개의 라디오 버튼 선택해서 Button Group 하기 

 

라디오 버튼 생성할 때 기본 Source
거절을 선택하면 거절을 출력하고 , 동의를 선택하면 동의로 출력된다

 

 

1. Design > 라디오 버튼 > 우클릭 > Add event handler > action > actionPerformed

 

적용 source

 

JRadioButton rdbtnAgree = new JRadioButton("동의");
		rdbtnAgree.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				textArea.setText(rdbtnAgree.getText());
			}
		});
		
		rdbtnAgree.setSelected(true);
		buttonGroup.add(rdbtnAgree);
		rdbtnAgree.setBounds(8, 6, 121, 23);
		frame.getContentPane().add(rdbtnAgree);

 

위의 코드에서는

rdbtnAgree 라디오 버튼이 선택되었을 때, textArea의 텍스트를 rdbtnAgree 버튼의 텍스트로 설정하고 있다.

즉, "동의" 라디오 버튼이 선택되었을 때 textArea에 "동의"라는 텍스트가 표시된다.

 

거절도 마찬가지라서 생략 

 

 

 

 

 

GUI06

 

 

"확인" 버튼을 누르면
선택한 성별이 표시된다.

 

 

 

 

그룹화해서 라디오버튼의 기본값이 설정되었음

 

 

JButton btnCheck = new JButton("확인");
      btnCheck.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            // 남자 선택인 경우 -> 확인버튼 클릭 -> textArea에 "성별 : 남자" 출력
            // 여자 선택인 경우 -> 확인버튼 클릭 -> textArea에 "성별 : 여자" 출력
        	if(rdbtnMale.isSelected()) {
        		textArea.setText("성별 : 남자");        		
        	}else {
        		textArea.setText("성별 : 여자");        		
        	}
         }
      });
      btnCheck.setBounds(8, 30, 97, 23);
      frame.getContentPane().add(btnCheck);

 

 

 

 

 

 

GUI07

 

 

1번부터 n번까지 숫자를 넘겨서 볼 수 있고, 랜덤 뽑기도 가능함

 

 

1. 배열 선언 

2. 인덱스 선언

private static final String[] STRINGS = {
		"1. ",
		"2. ",
		"3. ",
		"4. ",
		"5. ",
		"6. ",
		"7. ",
		"8. ",
		"9. ",
		"10. ",
		"11. ",
		"12. ",
		"13. ",
		"14. ",
		"15. ",
		"16. ",
		"17. ",
		"18. ",
		"19. "
	};
	
	private int index = 0;

 

 

 

 "이전" 버튼을 눌렀을 때 만약 1보다 작은 값은 에러가 나기 때문에 

if 문을 사용하여 index > 0 인 경우에는 감소를 ,

1 이하로 바뀌면 마지막 n번째값(STRINGS.length - 1) 으로 

바뀌도록 만든다

JButton btnPriv = new JButton("이전");
		btnPriv.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(index > 0) {
				index--;
				}else {
					index = STRINGS.length - 1;
				}
				lblOutput.setText(STRINGS[index]);
			}
				
		});
		
		btnPriv.setBounds(12, 175, 202, 164);
		frame.getContentPane().add(btnPriv);

 

 

 

"다음" 버튼을 눌렀을 때, 마지막번호 이하면 증가를 

마지막 n번 번호를 넘어갔을 땐, index 값이 0으로 바뀌도록 해준다. 

 

 

JButton btnNext = new JButton("다음");
		btnNext.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(index < STRINGS.length - 1) {
					index++;					
				}else {
					index = 0;
				}
				lblOutput.setText(STRINGS[index]);
			}
		});
		
		btnNext.setBounds(226, 175, 196, 164);
		frame.getContentPane().add(btnNext);

 

 

 

"Random" 버튼을 눌렀을 때,

Math.random() 메소드를 사용하여 0부터 1 사이의 난수를 생성한다.

이후에 이 값을 19배하여 0부터 18 사이의 정수로 변환한 후,

이 값에 해당하는 STRINGS 배열의 요소를 lblOutput에 표시한다.

 

JButton btnNewButton = new JButton("Random");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				double rX = Math.random();
				int x = (int) (19 * rX);
				lblOutput.setText(STRINGS[x]);
			}
		});
		btnNewButton.setBounds(174, 143, 97, 23);
		frame.getContentPane().add(btnNewButton);

 

 

 

 

 

 

GUI08

 

 

배열에 이미지를 넣은 것, 기능은 7번과 같다

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함