JAVA 기본 윈도우창과 새창뛰우기
관련링크
본문
//개념잡기////////////////////////////////
메인메소드에서 생성자메소드 호출
생성자 메서드에서 프레임클래스를 상속받음 이때 액션리스너를 임플리먼트 해야 버튼을 이벤트를 사용할 수 있다.
extends 부모로부터 상속받음
implements 인터페이스를 구현준비
즉 Frame을 상속받고 ActionListener 인터페이스를 구현준비 한다.
//생성자 메소드
super(); 는 현재 자식클래스가 자신을 생성할때 부모 클래스의 생성자를 불러서 한번 초기화 해주고나서 자신을 초기화하는 것입니당.
즉 Frame을 한번 초기화 해주고 자신도 초기화 한다.
setSize(500, 500); 이렇게 크기만 지정해주면 프레임은 뜬다.
여기에
Panel 또는 Button 등을 프레임(자신에다가) 붙이이면 되는데 add.(만든버튼); this가 생략되어짐 즉 this.add(만든버튼)
붙이는 레이아웃을 설정해야 하고 안하면
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Member_psn extends Frame {
public Member_psn() {
Panel pan1 = new Panel(new FlowLayout());
pan1.setBackground(Color.red);
pan1.setSize(400, 800);
Panel pan2 = new Panel(new FlowLayout());
pan2.setBackground(Color.gray);
pan2.setSize(800, 800);
add(pan1);
add(pan2);
// 타이틀바 창닫기버튼 실행
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
Member_psn d = new Member_psn();// 생성자 메소드 호출
d.setSize(1200, 800);
d.setVisible(true);
}
}
만든 버튼에는 리스너 인터페이스만 붙여놓고
별도에 메서드에서 해당 버튼이벤트를 감시 하면된다.
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.util.*;
public class Window extends Frame implements ActionListener {
Button open;
Dimension dm;
SubFrame sf;
public Window() {
super("::Window:");
// 프래임 재설정... 프레임의 사이즈 정보를 담은 DImension을 얻기 위해서
setSize(500, 500);
// 레이아웃 해제
// 좌표를 잡아 컴포넌트를 붙이거나,
// 컴포넌트 사이즈를 주고 싶다면 레이아웃을 해제하고 사용.
setLayout(null);
dm = getSize();
// 버튼 생성..
open = new Button("Open");
add(open);
// 버튼 사이즈
open.setSize(100, 100);
// 버튼의 사이즈 정보를 가짐.
Dimension bdm = open.getSize();
int centerX = dm.width / 2 - bdm.width / 2;
int centerY = (dm.height - bdm.height) / 2;
// 버튼 위치
open.setLocation(centerX, centerY);
// 리스너 부착.. 위에 implements했으니 this
open.addActionListener(this);
// Sub객체 딱 한번만 생성하기 위해서~
sf = new SubFrame();
// SubClass 리스너 부착
sf.close.addActionListener(this);
//타이틀바 창닫기버튼 실행
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
} // 생성자 ----------------------------------------
//새창만들기
public void actionPerformed(ActionEvent e) {
// 1>SubFrame 객체를 생성하여 사이즈 정해주고 보여준다.
Object obj = e.getSource();
if (obj == open) {
sf.setSize(400, 200);
sf.setLocation(dm.width, 0);
sf.setVisible(true);
// r,g,b 값을 랜덤하게 주자...0~255
// Math.random()*j범위+시작숫자
// 컬러 객체의 RGB값을 받아서 값을 준당;;
int r = (int) (Math.random() * 256);
int g = (int) (Math.random() * 256);
// Random 메소드를 사용해 보자..
Random rd = new Random();
int b = rd.nextInt(256) + 0;
sf.can.setBackground(new Color(r, g, b));
} else if (obj == sf.close) {
// 1. System.exit(0); 프로세스가 다 죽어..
// 2. setVisible 서브프래임 보이지 않게 하는 효과
// sf.setVisible(false);
sf.dispose(); // frame 객체의 자원을 해제시킨다.
}
}
//기본창 뛰우기////////////////////////
public static void main(String[] args) {
Window d = new Window();//생성자 메소드 호출
d.setSize(1000, 500);
d.setVisible(true);
//d.dm = d.getSize(); System.out.println("d.dm.width = "+d.dm.width); //창의크기
}
} ///////////////////////////////////////////////////////////////
///// 메인 프레임에서 띄어줄 서브 프레임 클래스 ///////////////////
class SubFrame extends Frame {
Canvas can;
Button close;
int r = 100, g = 100, b = 100;
public SubFrame() {
super("::SubFrame::");
can = new Canvas();
add(can, "Center");
can.setBackground(new Color(r, g, b));
close = new Button("CLOSE");
add(close, "South");
} // 생성자 ------------------------------
} ////////////////////////////////////////////////////////////////