java

쉽지만 어려운 #Java #자바 #성공적 6.Swing(GUI) 2부

sieunju 2016. 5. 27. 00:33
반응형

안녕하세요 j.sieun 입니다. 


원래는 6월 중순까지 쉴려고 하다가 잠깐 시간이 있어서 포스팅 하겠습니다 ~


저번시간에 GUI에 대해 조금 배우셨는데요. 


이번에는 여러 메소드에 대해 배워보도록 하겠습니다. 


가장 기본적으로는


JPanel panel = new JPanel();

JLabel label = new JLabel();

JTextField TF = new JTextField();

JButton button = new JButton();

JButton[] button = new JButton [ ];

여기서 좀 추가하자면 같은 형식으로 selectbox scrollbox 등등..

GUI를 꾸밀수 있는 여러가지 메소드가 있습니다. 


간단하게 저것들을 사용한 소스를 보도록 하겠습니다. 


import java.awt.Color;

import java.awt.Container;

import java.awt.Dimension;

import java.awt.FlowLayout;

import java.awt.GridLayout;

import java.awt.Toolkit;


import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.SwingConstants;



public class GUIClass extends JFrame {

JButton[] button = new JButton [5];

JButton button1 = new JButton();

JPanel Panel = new JPanel();

JPanel buttonPanel = new JPanel();

JLabel label = new JLabel();

JTextField TF = new JTextField();

public GUIClass(){

super("Hello Java");

for(int i = 0; i< 5; i++)

{

button[i] = new JButton("::"+i+"번째 버튼입니다.");

button[i].setBackground(Color.black);

button[i].setForeground(Color.white);

}

buttonPanel = new JPanel(new GridLayout(3,3));

for(int i = 0; i<5; i++)

{

buttonPanel.add(button[i]);

}

getContentPane().setBackground(Color.white);

}

Container container = getContentPane();

public void init()

{

button1 = new JButton("아래버튼입니다.");

TF = new JTextField(15);

Panel = new JPanel(new FlowLayout());

Panel.add(TF);

Panel.add(button1);

Toolkit kit = getToolkit();

Dimension dmen = kit.getScreenSize();

setSize(500,300);

JLabel label = new JLabel("Hello GUI", SwingConstants.CENTER);

container.add(Panel,"South");

container.add(buttonPanel,"Center");

container.add(label,"North");

setLocation((int)((dmen.width - getSize().width)/2), (int)((dmen.height - getSize().height))/2);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setVisible(true);

}

public static void main(String[] args) {

GUIClass test = new GUIClass();

test.init();

}

}

결과 화면입니다.


그렇다면 여기서 버튼들과 텍스트 필드, 라벨 값들을 내가 마음대로 바꾸고싶을때 쓰이는 메소드가 여러개가 있는데 

저는 그중에 

addActionListener(this); 

이걸 사용합니다. this 값 말고 다른 것을 추가할수있습니다. this값을 넣었을경우 


맨위에 public class GUIClass extends ... implements ActionListener {

이것을 적으셔야 하고, 

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

}

이 함수를 만들어야 합니다. .

/*

참!! 추가적으로 implements 이거와 extends 이게 무슨뜻인지 궁금해 하실텐데요. 

쉽게말해서 extends ....  뒤에 ..... 이걸 상속한다 즉, class 와 상속한다 포함한다. 라는 뜻입니다. 

implements  ... , .... , .... 뒤에 ... 이걸 구현할것이다. 즉, 어떤 경우때 구현할것이다. 라는 뜻입니다. 

extends 는 무조건 필수적인 개념이지만 implements 는 경우에 따라서 하는것이기 때문에 개념이 반대개념이라고 생각하시면

되겠습니다. 

*/

제가 ::1번째 버튼입니다. 이것을 누를떄 텍스트 필드에 값을 집어 넣고 싶다 하면

button[1].addActionListener(this);

TF.addActionListener(this);

public void init() 안에 

이것들을 추가하시면 됩니다.


그후.

actionPerformed() 라는 메소드 안에
Object o = e.getSource();
Random random = new Random();
if(o.equals(button[1]))
{
TF.setText("랜덤값 :"+(random.nextInt(6)+1));
}
이런식으로 1버튼을 클릭할시 텍스트필드에 값이 랜덤값으로 변하도록 설정해보았습니다. 
나중에는 점점 복잡한 문제를 풀어나갈시에는 switch 문이 좋습니다. :D
 

이런식으로 구성이 됩니다. 한가지 더 설명해 드리자면 

버튼을 한번만 클릭하고 싶을떄에는 버튼을 클릭후에 .setEnabled(false); 을사용하시면 

버튼이 비활성화 됩니다. 당연히 활성하는 방법은 false 대신 true 값을 집어넣으시면 됩니다.



솔직히 GUI부분은 워낙에 메소드가 많은 부분이라 하나하나 설명해 나가면 한도 끝도 없기 때문에 

많이 만들어보고 연구하다보면 충분히 잘할것으로 생각이 됩니다. 


※궁금하신거 댓글달아주시길 바랍니다. ㅎㅎ


퍼가시는건 상관 없는데 말은 하고 퍼가주시길 바랍니다.^^※





반응형