/* Title : 대화상자 File Name : DialogDemo.java Main File : DialogDemo.java Programmer : 김경호 Contact : cbr600f3@hanmail.net Date : 2001-05-23 Update : Note : The JFC Swing Tutorial (java.sun.com) 참조 ● 대화상자 JDialog 프레임보다는 제한적인 기능을 가진 윈도우 JOptionPane - 단순하고 표준적인 대화상자 ProgressMonitor - 진행상태를 보여주고자 할때 JColorChooser - 색상선택상자 JFileChooser - 파일 선택상자 Toolkit.getPrintJob() - 인쇄대화상자(JDK 2 Java Printing API 사용) 모든 대화상자는 하나의 프레임에 종속된다. 그 프레임이 소멸되면 그에 종속적인 대화상자도 사라지고 부모프레임이 아이콘화되면 그에 종속된 대화상자들도 화면에서 사라진다. 프레임이 원래 크기로 돌아오면 그에 종속된 대화상자들도 다시 화면에 나타난다. ■ Modal 과 Modeless JOptionPane 이 제공하는 대화상자는 모달이다. 모달로 뛰운 대화상자가 화면에 표시되어 있으면 그 프로그램의 다른 윈도우들은 사용자의 입력을 받지 못한다. Modeless 대화상자를 만들려면 JDilog 클래스를 사용해야한다. 모달이 아닌 대화상자를 만들려면 JOptionPane 의 인스턴스를 직접 생성한 다음, 그것을 JDialog 의 인스턴스에 추가해야 한다. 그런다음 JDialog 의 setVisible(true) 를 호출한다. JOptionPane. showMessageDialog - 하나짜리 간단한 메시지 표시 showOptionDialog - 커스텀화된 대화상자를 표시 나머지 2개는 잘 사용안함 showConfirmDialog - 사용자에게 먼가를 확인받기 위해 사용 YES / NO 로케일에 따라 다름. 한국 예 / 아니오 이 메세지는 변경안된다. showInputDialog - 사용자로 부터 문자열을 입력받는 모달 대화상자. 텍스트필드나 수정할수 없는 콤보박스로 사용. 이 4개중 하나다 ■ showMessageDialog JOptionPane.showMessageDialog(frame, "입력완료", "제목", JOptionPane.PLAIN_MESSAGE) showMessageDialog(부모콤포넌트, 메시지, 제목, 메시지종류, 대화상자아이콘) ■ showOptionDialog Object[] options = {"변경확인","변경취소","기본값입력"}; int n = JOptionPane.showOptionDialog(frame, "변경완료,\n적용하시겠습니까?", "제목", JOptionPane.YES_NO_CANCEL_OPTION, JOption.QUESTION_MESSAGE, null, option, option[2]); showOptionDialog(부모컴포넌트, 메시지, 제목, 선택종류, 메시지종류, 아이콘, 선택항목들, 대화상자의기본선택값) ○ 첫번째 인자는 Component parentComponent 는 부모컴포넌트를 지정하는 것으로 반드시 프레임이나 프레임안의 컴포넌트 아니면 null 이어야 한다. 프레임을 지정하면 프레임의 중앙에 대화상자가 나타나고 프레임의 행동에 의존한다. null 일때는 외양에 따라 적절한 화면위치에 설정된다. 대화상자는 표시되어 있는 어떤 프레임에도 의존하지 않는다. ○ 두번째 인자는 역시 필수인자로 대화상자의 메인영역에 지정되는 문자열. 줄바꿈 시는 \n 을 사용하고 " 문자 사용시는 \" 사용한다 ○ int OptionType 대화상자 아래쪽에 나타나는 버튼들의 집합을 지정하는 인자. DEFAULT_OPTION YES_NO_OPTION YES_NO_CANCEL_OPTION OK_CANCEL_OPTION ○ int MessageType 대화상자에 표시할 아이콘을 설정한다 PLAIN_MESSAGE - 아무설정없음. ERROR_MESSAGE INFORMATION_MESSAGE WARNING_MESSAGE QUESTION_MESSAGE ○ Object[] options 대화상자 아래쪽에 나타나는 옵션버튼들의 문자열을 지정. ○ Object initialValue 선택될 기본값을 지정한다. ■ 대화상자로 부터 사용자입력내용을 얻기 showMessageDialog showOptionDialog showConfirmDialog 메서드는 사용자의 선택 정수값을 돌려준다. 해당 상수값은 YES_OPTION NO_OPTION CANCEL_OPTION OK_OPTION CLOSED_OPTION CLOSED_OPTION 은 사용자가 대화상자를 눌렀다는 것이 아니고 대화상자의 윈도우의 닫기버튼을 클릭해서 대화상자를 닫았다는것을 뜻함. 이외의 값들은 모든 사용자가 버튼을 눌렀다는 것을 의미한다. 표준대화상자의 버튼들이 표시하는 문자열을 변경했더라도 반환값은 항상 미리 정해진 정수값들 중 하나이다.
Swing_Dialog_대화상자만들기
JDialog 사용예제
다이얼로그를 생성시 Modal 옵션을 주고 생성을 하면 됩니다.
예제)
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class DLG extends JDialog {
private JTextField jtf = null;
private String result = "";
public DLG(Frame owner, boolean modal) {
super(owner, modal);
final JDialog dlg = this;
jtf = new JTextField();
jtf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent ke) {
if(ke.getKeyCode() == 10) {
result = jtf.getText();
dlg.setVisible(false);
}
}
});
getContentPane().add(jtf);
setSize(130, 60);
}
public String open() {
setVisible(true);
return result;
}
}
public class MainFrame extends JFrame {
private JButton btnInput = null;
public MainFrame() {
super("Test Main");
final Frame mainFrame = this;
btnInput = new JButton("INPUT");
btnInput.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
String s = new DLG(mainFrame, true).open();
System.out.println(s);
}
});
getContentPane().add(btnInput);
setSize(200, 200);
setVisible(true);
}
public static void main(String[] args) {
new MainFrame();
}
}
Interface(인터페이스)
인터페이스란
- 표준명세서의 역활
- 상수와 추상메소드만 존재(abstract는 생략가능)
- interface를 implements 한 클래스는 반드시 추상메소드를 Override(재구현)해주어야 한다.
- Override(재구현) 할때 반드시 public를 붙여야 한다.
- 다중상속이 가능
- 상속과 같이 쓰일때는 extends, implements 순서로 쓴다.
extends(상속)와 interface(인터페이스) 사용 차이점
1. class B extends A{} //참 : 클래스끼리는 extends가 가능하다
2. class B implements InterA{} //참 : 인터페이스는 클래스에 implements가 가능하다
3. class B implements A{} //거짓 : 클래스끼리는 implements 할 수 없다
4. class B extends InterA{} //거짓 : 인터페이스는 클래스에 extends 할 수 없다
5. interface InterB extends A{} //거짓 : 클래스는 인터페이스에 extends 할 수 없다
6. interface InterB implements InterA{} //거짓 : 인터페이스끼리는 implements 할 수 없다
7. interface InterB implements A{} //거짓 : 클래스는 인터페이스에 implements 할 수 없다
8. interface InterB extends InterA{} //참 : 인터페이스끼리는 extends가 가능하다
WindowListener
윈도우창의 닫기, 큰화면, 작은화면, 내리기 등을 담당한다.
사용예시
public void windowActivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowClosing(WindowEvent e) {
System.out.println("윈도우 종료..."); //윈도우창 X버튼 클릭할 때
System.exit(0);
}
public void windowDeactivated(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
MouseListener & MouseMotionListener
자바 API의 java.awt.event.MouseListener
java.awt.event.MouseMotionListener에 위치하는 인터페이스이다.
윈도우창 생성시 마우스가 담당하는 기본적인 기능을 담당한다.
사용예시
public void mouseClicked(MouseEvent e) {
System.out.println("마우스 클릭"); //윈도우창안을 클릭할 때
}
public void mouseEntered(MouseEvent e) {
System.out.println("마우스 인"); //윈도우창 안으로 마우스 포인트가 들어올 때
}
public void mouseExited(MouseEvent e) {
System.out.println("마우스 아웃"); //윈도우창 밖으로 마우스 포인트가 나갈 때
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
//MouseMotionListener Override
public void mouseDragged(MouseEvent e) {
System.out.println("마우스 드레그"); //윈도우창 안을 마우스로 드레그 할 때
}
public void mouseMoved(MouseEvent e) {}
public static void main(String[] args){
new WindowTest().init();
}
ActionListener
NumberFormat
원하는 패턴으로 출력하는데 사용한다.
다음은 5백만원을 입력하여 환율 1195원이라는 가정하에 "$#,###,00 형태로 출력하는 예제이다
import java.text.DecimalFormat;
class Money{
public String toDoller(int a){
NumberFormat nf = new DecimalFormat("$#,###.00");
return nf.format(a/1195.0);
}
public static void main(String[] args){
System.out.println("5,000,000원 = "+new Money().toDoller(5000000));
}
}
NumberFormat에 DecimalFormat을 사용한다.
("#,###,00")으로 입력하면 소수점까지 고정으로 표현하여 준다.
소수점이 있으면 표기해주고 없으면 안해주게 하고 싶으면 ("#,###,##")으로 하면된다.
출력값
InstanceOf
: casting(형변환)이 되는지 안되는지를 판별
: 객체에 원하는 클래스타입이 메모리 할당되었는지 안되었는지를 확인
class BB extends AA{}
class InstanceOf{
public static void main(String[] args) {
AA aa = new AA();
BB bb = new BB();
AA aa2 = new BB();
AA aa3 = aa;
if(aa instanceof AA) //aa객체속에는 AA클래스가이 생성되어 있다.
System.out.println("1. TRUE"); //참값이 나온다.
else
System.out.println("1. FALSE");
AA aa4 = bb;
if(bb instanceof AA) //bb객체속에는 AA클래스가 생성되어 있다.
System.out.println("2. TRUE"); //참값이 나온다.
else
System.out.println("2. FALSE");
// BB bb2 = (BB)aa; //형변환해도 안된다.
if(aa instanceof BB)
System.out.println("3. TRUE");
else
System.out.println("3. FALSE"); //거짓값이 나온다.
BB bb3 = (BB)aa2; //형변환하면 된다.
if(aa2 instanceof BB)
System.out.println("4. TRUE"); //참값이 나온다.
else
System.out.println("4. FALSE");
}
}
추상클래스(abstract)
- 메소드에 body가 없는 메소드를 추상메소드라고 한다.
- 추상메소드가 있는 클래스는 반드시 추상클래스이어야 한다.
- 추상메소드가 없는 추상클래스를 의미상의 추상클래스라고 한다.
=> 자신의 메모리 생성을 할 수 있다.
생성을 하면서 메소드를 구현하지 않아도 구현부를 가져야 한다.
의미상의 추상클래스의 메소드는 모두 빈body로 되어 있다.
- 추상메소드가 있는 추상클래스는 자신의 메모리 생성을 할 수 없다
=> 생성하려면 Sub Class를 이용하거나 메소드를 이용해야한다.
- 추상메소드는 반드시 Sub Class에서 Override 꼭 해 주어야 한다.
Override를 안하면 Sub Class 마저도 abstract 가 되어야 한다.
추상메소드의 이점
추상메소드를 쓰는 가장 큰 이유는 반복 사용되는 메소드를 추상화하여 오버라이드 시켜 사용할 수 있는 이점이 있다.
추상메소드는 반드시 오버라이드를 시켜줘야 하기 때문에 혹시나 실수로 메소드명을 잘못입력하더라도 쉽게 찾을 수
있고 무엇보다 추상메소드는 body({}이부분)이 없기 때문에 쓸데 없는 메모리를 잡지 않는다.
Object
- Java의 최상위 클래스
- Java의 모든 클래스는 Object로 부터 상속받는다
- extends Object라고 직접 쓰지 않아도 된다
- Object에서는 == , equals() 가 모두 참조값(reference) 만으로 비교한다.
단, String만이 equals()가 내용을 비교한다
String의 경우 다음과 같을 때,
String b = a;
String c = new String("hello");
a에는 hello값을 임의의 100이란 공간에 저장 //100은 제가 임의로 정한 번지수...
b에는 a가 저장된 공간 값이 들어간다.
c에는 hello값을 임의의 200란 공간에 저장한다. //200은 제가 임의로 정한 번지수...
따라서 a.equal(c)는 참이다. a==b는 저장된 번지가 같으므로 참
하지만 a==c는 거짓이 된다.
다음으로 Object가 다음과 같을때,
Object b = a;
Object c = new Object ();
a에는 100이란 공간이 할당된다 //100은 제가 임의로 정한 번지수...
b에는 a의 저장된 공간의 값이 들어간다.
c에는 200이란 공간이 할당된다 //200은 제가 임의로 정한 번지수...
따라서 a==b는 저장공간의 값이 같으므로 참, a==c는 저장공간이 다르므로 거짓
a.equals(c)는 String의 경우 안의 값이 비교되지만 object의 경우 ==와 같은 연산이므로 거짓이 된다.
SW
- Swing_Dialog_대화상자만들기 2012.02.22
- JDialog 사용예제 2012.02.22
- Interface(인터페이스) 2011.09.28
- WindowListener 2011.09.28
- MouseListener & MouseMotionListener 2011.09.28
- ActionListener 2011.09.28
- NumberFormat 2011.09.28
- InstanceOf 2011.09.27
- 추상클래스(abstract) 2011.09.26
- Object 2011.09.26