본문 바로가기
개발 관련/JAVA 수업

swing mvc 구조 - awt - 15일차

by 달달한 강냉이 2011. 9. 28.

javax.swing = 가장 기초적인것을 말할할때 뒤에 x가 붙는다.

Swing의 특징 및 AWT와의 차이점에 대해 배운다.
Swing의 MVC 구조를 배운다.  //MVC각각역할을 만들어놓고 그 역할들이 처리하도록 만드는것이 mvc다. 2개월차에 연습하게된다?
Swing에서 제공하는 Component에 대해 배운다.

웹프로그래머는 awt부터 swing은 별로 필요가 없을것이다.
Java랭귀지는 프로그래밍 우선이기 때문에

 

Java에의 JFC(Java Foundation Class)는 GUI Programming에 필요한 각종 Toolkit(API)을 모아놓은 것으로 현재는 GUI의 기능들을 구현할 수 있는 Swing, 2D, Drag&Drop 등을 지원한다.
Swing을 사용하는 방법은 AWT와 거의 유사하나 AWT보다는 많은 Component 및 기능을 지원하고 있다.
Swing은 AWT와 달리 Java Programming으로 자체적인 제작된 Component이므로 Platform에 관계없이 모양이 동일하게 사용할 수 있다.


awt=운영체제를 따라가지만 swing은 어떤 플랫폼에서든지 똑같다.

Look & Feel
Swing에서 가장 획기적으로 바뀐 것 중에 하나가 Component의 화려함이다.
이러한 외관(Look & Feel)을 Program을 실행하는 도중에 여러가지 형태로 바꾸어 사용할 수 있는 기능을 제공한다.
Swing은 순수한 Java로만 만들어졌기 때문에 어떤 Platform에서라도 동일한 Look & Feel을 유지할 수가 있다.

 

경량의 Component
AWT에서 제공하는 Component들은 JVM이 기반으로 설치되어있는 Native Platform에 의존하여 그 Component들을 그대로 가져다 사용하는 중량의 Component들이다.
Swing은 순수 Java로 구현되어 있는 Component들이기 때문에 어떤 Platform을 사용하더라도 거기에 의존하지않고 독립적으로 사용할 수 있는 경량의 Component이다. //자체적으로 가지고 있는것을 그대로 쓴다?


DubleBuffering지원 더블버퍼링-awt는 지원하지 않는다. 스윙은 자체적으로 지원
DoubleBufferring기능은 Graphic의 성능을 향상시키기 위해 도입된 방식으로 AWT에서는 User에 의해 직접 구현해야 되지만 Swing에서는 자체적으로 DoubleBufferring 기능을 제공한다.

모든 보이는것은 뷰가 담당. 컨트롤러는 중간 역할. 클릭같은 중간제어자 역활, 모델은 일을 처리


Border(Border) 지원 =테두리 지원  시스템등록정보 장치관리자에 보이는 그런테두리

Swing Component는 javax.swing.JComponent class로부터 상속받은 Sub class들이다.

Component들은 경계선(Border)이 존재하지 않지만 Swing부터는 이 경계선을 어떻게 보여줄지를 결정할 수 있다.

 


JFrame class
Swing의 JFrame은 AWT의 Frame과 달리 좀 복잡한 구조로 되어있다.
Frame자체로 구성되어 있는 것이 아니라 그 안에 4개의 pane(객층)이 층으로 구성되어 있다.  다음 그림은 JFrame의 내부 구조다.


JRootPane 제이루트 페인은 거의 건들지 안흔다 : 실질적인 Window 기능을 수행하는 경량의 Container다.  이러한 구조를 사용하는 것은 모든 Window들의 동작이나 사용 방법등이 같아지고 다른 Component들과 잘 조화가 될 수 있도록 도와주기 때문.  JRootPane은 GlassPane과 layeredPane으로 구성되어 있고, layeredPane은 JMenuBar와 contentPane을 포함한다. 


layeredPane : Root pane에 대해 Layer를 할 수 있도록 여러 층의 Panel을 포함 할 수 있는 Panel로 여러 Component들을 서로 Overlap(Component위에 다른 Component를 붙이는 작업) 할 수 있도록 한다.  윗부분은 JMenuBar와 아래부분은 contentPane으로 이루어져 있다.


contentPane 컨텐츠 패인만 기억해도된다.: 일반적인 Component들을 가질 수 있는 Panel이다.  Frame Object의 getContentPane() method를 이용해서 얻을 수 있다.
?
glassPane 글래스 패인 투명한 패인 이벤트를 적용할때 쓰인다.: 기본적으로 숨겨진 상태로 되어 있으며, 다른 Panel 위에 존재하는 Panel이다.  주로 Mouse Event를 처리하기 위해 가장 먼저 Root pane에 추가된다.
?
JMenuBar 메뉴바를 붙인다.: Window의 Menu를 제공하는 역할로 생략이 가능한 선택항목이다.  JMenu, JmenuItem 등을 이용해서 Menu를 구성하여 setJMenuBar() method을 이용해서 등록할 수 있다.


주요메서드
getContentPane( )

setJMenuBar(JMenuBar menubar)

setDefaultCloseOperation(int operation)
적당한 상수만 줘도 창닫기가 가능하다.

 

JEditorPane
여러 가지 형태의 format의 문서를 처리할 수 있도록 설계된 Component이다.
현재 사용할 수 있는 Text 포맷은 일반 TEXT, HTML, RTF이다. 

 

JTextPane (텍스트 에리어는 부분편집이 안되는데 이거는 위드와같은 기능을 부여가가능하다.)
Style이 가미된 Text를 보여주거나 편집할 수 있도록 제공하여 Word Processor의 형태의 Program을 제작 가능한 Component이다.
여기에는 다양한 Font, color, size, 기울임, 정렬 등과 같은 서식을 사용할 수 있다.


JScrollPan(스윙은 스코롤바는 자동생성이 안된다. 스코롤바가 생겨야 될때 만들어줘야된다.)


JTabbedPane 제이탭패널(탭관련 기능을 만들려고 할떄 쓰인다.)


JSplitPane (제이 스트립 패인은 화면을 가지고 작업을 하고 싶을때는(분할등) 이것이 쓰인다.

JDesktopPane (제이 데스크탑 패인 전체 틀창을말하고)


JInternalFrame(인터널 패인 내부창들을 말한다 NDI-하나의 프로그램에 여러창을 켜놓고 작업이 가능하다.)

JOptionPane (옵션 패인 누르면 뜨는 여러다얄로그를 말한다. 프로그램만들때 뜨는 창

JFileChooser(제이파일츄저)

JColorChooser  : 칼라를 선택할수 있는 창이 튀어나올수 있도록해주는것을 말한다.
(제이칼라츄저)


------------------------------------
------------------------------------

//창닫기 예제.

[JFrameEx.java]

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JFrameEx extends JFrame{ //제이 프레임 상속
public JFrameEx(){

super("JFrame 테스트");

JButton bt1=new JButton("Hello Swing North");
JButton bt2=new JButton("Hello Swing Center");
Container cp=getContentPane();

cp.add("North",bt1);
add(bt2);
setSize(200,200);
setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args){
new JFrameEx();
}
}


------------------------------------
------------------------------------

 

//넣을떄 틀부터 만들어놔라. 생성자. 메인메소드. 그러면 오타가 날확률이 적고 눈에 잘보인다.
//인터넷창을 보여주는 예제다. 분석이 안되는건 정확히 안나온다. html만 분석하게 만든 브라우저창예제

[JEditorPaneEx.java]

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.event.*;
import javax.swing.border.*;

import java.net.*; //네트웍과 io 네트웍 불러오는거
import java.io.*; //io


public class JEditorPaneEx extends JFrame
{

JTextField tfLocation; //제이 텍스트 필드 객체 생성
JEditorPane epBrowse; //ㅈㅔ이 에디터 패인 객체생성


public JEditorPaneEx() //생성자
{


super("JEditorPane 브라우저");
Container cp=getContentPane();
JPanel lp=new JPanel(new BorderLayout());
tfLocation=new JTextField();

lp.add(new Label("URL : "), BorderLayout.WEST);//메뉴이름 같은거 레이블
lp.add(tfLocation,BorderLayout.CENTER);
cp.add(lp,BorderLayout.NORTH);


epBrowse = new JEditorPane(); //
epBrowse.setEditable(false); //수정못하게 false
JScrollPane sp=new JScrollPane(epBrowse); //  내가만든 에디터패인은 스코롤바를 붙이겠다. 내가 열심히 만들어놓은 거에다가 스코롤바를 붙임

cp.add(sp,BorderLayout.CENTER);

tfLocation.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){ //이벤트 발생시

try{ //이벤트 발동조건
URL url=new URL(e.getActionCommand());
epBrowse.setPage(url); //보여주는 페이지를url연결 시킨다.
}catch(IOException ie) {
System.err.println("IOException Error");
}
}
});
epBrowse.addHyperlinkListener(new URLListener()); //웹에서 눌러주면 다른 다른데로 넘어가는것이 하이퍼링크. 그 이벤트로 연결
}
public static void main(String[] args)
{
JEditorPaneEx f=new JEditorPaneEx();
f.setSize(800,600);
f.setVisible(true);
}
class URLListener implements HyperlinkListener //하이퍼링크를 연동
{
public void hyperlinkUpdate(HyperlinkEvent e) //hyperlinkUpdate()메소드
{
if(e.getEventType()==HyperlinkEvent.EventType.ACTIVATED)
{
JEditorPane pane=(JEditorPane)e.getSource();
if(e instanceof HTMLFrameHyperlinkEvent)
{
HTMLFrameHyperlinkEvent evt=(HTMLFrameHyperlinkEvent)e;
HTMLDocument doc=(HTMLDocument)pane.getDocument();
doc.processHTMLFrameHyperlinkEvent(evt);
}
else
{
try
{
tfLocation.setText(e.getURL().toExternalForm());
pane.setPage(e.getURL());
}catch(IOException ex)
{
System.err.println("IOException Error");
}
}
}
}
}
}

 

------------------------------------
------------------------------------


//글씨의 스타일을 잡을수 있는 예제 텍스트 패인 스타일정해주는 방법을 집어넣은 예제 안해도 상관은없다. 어렵고 헷갈리게 만드는 예문중에 하나다.
//이건 생성자 내부정도만 하고 스타일잡고 텍스트 변경하는 부분의 내용들이 일차적으로 빼고 진행해봐라

[JTextPaneEx.java]

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.text.*; // 스윙의 텍스트를 갖다쓰는 예제


public class JTextPaneEx extends JFrame{
public JTextPaneEx(){
JTextPane textPane = createTextPane(); //메소드가 리턴해주는 것으로 객체를 생성
JScrollPane sp = new JScrollPane(textPane); //스크롤바가 붙게끔. 작게해야 보인다. 이예제는
sp.setPreferredSize(new Dimension(250, 250)); //디멘전 250,250 크기
add(sp); //에드 메소드로 프레임에 붙여준
pack(); //프레임에 붙여준 컴퍼넌트 크기에 맞추겠다. 는것이 팩이라는 메소드

setLocation(300,200);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private JTextPane createTextPane() {
String newline="\n";
String[] initString =
{ "이것은 일반체 입니다. "+newline,
"이것은 이탤릭체 입니다."+newline,
"이것은 볼드체 입니다."+newline,
" " + newline ,
" " + newline
};
String[] initStyles =
{ "regular", "italic", "bold",
"button","icon"
};
JTextPane textPane = new JTextPane();
StyledDocument sdoc = textPane.getStyledDocument();
addStylesToDocument(sdoc);
try {
for (int i=0; i < initString.length; i++) {
sdoc.insertString(sdoc.getLength(), initString[i],
sdoc.getStyle(initStyles[i]));
}
} catch (Exception ble) {
ble.printStackTrace();
}
return textPane;
}
protected void addStylesToDocument(StyledDocument sdoc) {
//Initialize some styles.
Style style = StyleContext.getDefaultStyleContext().
getStyle(StyleContext.DEFAULT_STYLE);
Style regular = sdoc.addStyle("regular", style);
StyleConstants.setFontFamily(style, "SansSerif");
Style s = sdoc.addStyle("italic", regular);
StyleConstants.setItalic(s, true);
s = sdoc.addStyle("bold", regular);
StyleConstants.setBold(s, true);
s = sdoc.addStyle("icon", regular);
StyleConstants.setAlignment(s, StyleConstants.ALIGN_CENTER);
ImageIcon pigIcon = new ImageIcon("images/Pig.gif");
if (pigIcon != null) {
StyleConstants.setIcon(s, pigIcon);
}
s = sdoc.addStyle("button", regular);
StyleConstants.setAlignment(s, StyleConstants.ALIGN_CENTER);
ImageIcon soundIcon = new ImageIcon("images/sound.gif");
JButton button = new JButton();
if (soundIcon != null) {
button.setIcon(soundIcon);
} else {
button.setText("BEEP");
}
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
Toolkit.getDefaultToolkit().beep();
}
});
StyleConstants.setComponent(s, button);
}
public static void main(String[] args) {
new JTextPaneEx();
}
}
------------------------------------
------------------------------------
바생성하고 왼쪽 두개 오른 쪽 하나 창.

[JSplitPaneEx.java]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JSplitPaneEx extends JFrame{
JSplitPane splitPane,splitPane1;

public JSplitPaneEx() {

super("SplitPaneEx 테스트"); //타이틀설정

//스크롤바를 붙은 두개 생성

JTextArea jta1 = new JTextArea(20,10); //20줄 행해수 , 한줄에 10자 입력
JScrollPane jta1ScrollPane = new JScrollPane(jta1); //스크롤패인에다가 텍스트 에리어를 집어넣었다. 텍스트 에리어가 스크롤바가 없어서 붙여줌

JTextArea jta2 = new JTextArea(20,10);
JScrollPane jta2ScrollPane = new JScrollPane(jta2); //이것도 스크롤바를 에리어에 붙여줌

splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
jta1ScrollPane, jta2);  // VERTICAL_SPLIT,화면을 가로로 쪼갠거. 처럼 화면 분활을 만들어준다. 버티칼


JTextArea jta3 = new JTextArea(20,10);
JScrollPane jta3ScrollPane = new JScrollPane(jta3);

splitPane1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,//스크롤패인 객체를 생성해서 HORIZONTAL_SPLIT 홀리젠텔은 화면을 세로로 쪼갠거

splitPane, jta3ScrollPane);


splitPane.setOneTouchExpandable(true); //setOneTouchExpandable원터치 익스 팬터블은 바를 움직일수 있게 해주는거
splitPane.setDividerLocation(100); //setDividerLocation(100) 디아인더 로케이션은 바의 위치를 100
splitPane.setPreferredSize(new Dimension(200, 200)); //위치
splitPane1.setPreferredSize(new Dimension(400, 200)); //위치


add(splitPane1);
pack();
setVisible(true);
}
public static void main(String s[]) {
new JSplitPaneEx();
}
}


------------------------------------
------------------------------------
//탭을 보여주는 예제

[JTabbedPaneEx.java]

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JTabbedPaneEx extends JFrame{

ImageIcon icon1, icon2, icon3, tabicon; //이미지위치??
JButton b1, b2, b3;
JTabbedPane jp; // 탭에 관련

public JTabbedPaneEx(){

super("JTabbedPane 테스트");

//쭉 이미지 설정
icon1=new ImageIcon("/images/image3.gif");
icon2=new ImageIcon("/images/image2.gif");
tabicon=new ImageIcon("../../images/image1.gif");
b1=new JButton("사진1",icon1); //버튼에다가 이지미 삽입, 아이콘 객체로 넣어줌
b2=new JButton("사진2",icon2);
jp=new JTabbedPane();

jp.addTab("탭1",new ImageIcon(""),b1); //탭1에 이미지 아이콘에 아무것도 없다. d1이라는 버튼을 집어넣는다. d1을 누르면 탭이 보여지는 내용
jp.addTab("탭2",new JPanel().add(new JTextArea(7,20))); //패널에다가 텍스트 에리어를 추가한다.
jp.addTab("탭3",tabicon, b2,"탭사진도 추가 했습니다"); //매개변수가 4개 텍 아이콘도 집어넣고 버튼도 넣고 탭사진도 추가했습니다. 마우스를 탭에 갖다 댔을경우 부가적인 설명이 나오게끔. 요게 위에것보다 가장완성형

 

add(jp);

setBounds(300,300,300,300);
setVisible(true);
}

public static void main(String[] args){
new JTabbedPaneEx();
}
}
//메소드를 모르면 jp.찍으면 jp에대한 메소드가 들이 나온다. 거기서 맞는걸로 넣어주면된다.

------------------------------------
------------------------------------
//내용이 기나 이클립스에서 실제로 메소드나 생성자가 사용되는것을 보면 몇되지 않는다.
//창이 내부에서 생성 클로즈 누르면 창이 닫히는
//이런건 생성자 내부 메소드 내부 다 지우고 그리고 나서 해봐라 첫줄 부터 코딩 보는건 꺼꾸로 보는거다. 소스는 아래에서부터...
//100줄이어도 뽑아내면 메소드 다섯개다. 처리가 어떻게 되는지보다 클래스가 뭐가 들어갔고 이런것이 중요하다.

[DesktopDemo.java]

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
//데스크탑 패인은 전체를 이루는 패인


public class DesktopDemo extends JFrame implements ActionListener { //JFrame상속  ActionListener  를 구현
// components
JDesktopPane desktop = new JDesktopPane();
// menuitem
JMenuItem openItem = new JMenuItem("Open"); //메뉴 아이템을 세개 생성
JMenuItem closeItem = new JMenuItem("Close");
JMenuItem exitItem = new JMenuItem("Exit");

// file chooser
JFileChooser chooser = new JFileChooser();
// Constructor
public DesktopDemo() {
super("DesktopDemo");
buildGUI(); // buildGUI();빌드 쥐유아이가 처리
}
// build gui

void buildGUI() {
getContentPane().add(desktop, BorderLayout.CENTER); //컨테이너에다가 제에 데스크탑 패인 객체를 붙여줌
JMenuBar menubar = new JMenuBar(); // 메뉴바를 만든다.
setJMenuBar(menubar); //메뉴바를 프레임에 붙여줌
JMenu fileMenu = new JMenu("File"); //

menubar.add(fileMenu);
fileMenu.add(openItem);
fileMenu.add(closeItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);

openItem.addActionListener(this); // 각각에 메뉴에 대해서 이벤트를 넣어줌
closeItem.addActionListener(this);
exitItem.addActionListener(this);
}

// open frame
public void openFrame() {
String path = "";
String name = "";

int returnVal = chooser.showOpenDialog(this); //내가 작업하고 클래스의 주인이다.this

if(returnVal == JFileChooser.APPROVE_OPTION) {// APPROVE_OPTION 새창이 떴을때 열기 취소 버튼이 있는데 열기 버튼을 눌렀다는 뜻이된다.

path = chooser.getSelectedFile().getPath(); //선택한 파일을 가지고 와서 변수에 저장하십시오.
name = chooser.getSelectedFile().getName();
}
else {
return; //예스가 아니라 패스를 할경우 아무것도 리턴안한다.
}


JInternalFrame frame = new JInternalFrame(name, true, true, true, true ); //이터널 패인 생성, 매개변수 다섯개나 들어감, 다 트루를 줬기 때문에 다가지고 있는 JInternalFrame를생성
JLabel imageLabel = new JLabel(new ImageIcon(path));
frame.getContentPane().setBackground(Color.white); //
frame.getContentPane().add(imageLabel);
frame.setSize(200, 200);

desktop.add(frame); //위에 만든 데스크 탑에다가 프레임을 붙여줌
frame.setVisible(true);
}

// close frame
public void closeFrame() {
JInternalFrame frame = desktop.getSelectedFrame();
if(frame == null) { return; }
frame.setVisible(false);
frame.dispose();
}

// action performed
public void actionPerformed(ActionEvent e) { //액션 포포드라는 메소드 생성

Object obj = e.getSource(); // getSource메소드에서 객체를 얻어내 openFrame();, closeFrame, dispose 셋중에 해당되는거가 오면 실행
if(obj == openItem) {
openFrame();
}
else if(obj == closeItem) {
closeFrame();
}
else if(obj == exitItem) {
setVisible(false);
dispose();
System.exit(0);
}
}
// main
public static void main(String[] args) {
DesktopDemo demo = new DesktopDemo();
demo.setSize(400,500);
demo.setVisible(true);
}
}
------------------------------------
------------------------------------
/////
//창이 내부에서 생성 되는 예제

//위의 내용과 비슷하나 이내용 더 많은 것을 포함하고 있음. 그러나 설명안들어감.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class JInternalFrameEx extends JFrame implements ActionListener {

JDesktopPane desktop = new JDesktopPane();
JMenuItem openItem = new JMenuItem("New");
JMenuItem closeItem = new JMenuItem("Close");
JMenuItem exitItem = new JMenuItem("Exit");

int cnt=1;


public JInternalFrameEx() {

super("JInternalFrame 테스트");

buildGUI();
setBounds(300,200,500,400);
setVisible(true);
}
void buildGUI() {
add(desktop, BorderLayout.CENTER);
JMenuBar menubar = new JMenuBar();
setJMenuBar(menubar);
JMenu fileMenu = new JMenu("File");


menubar.add(fileMenu);
fileMenu.add(openItem);
fileMenu.add(closeItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
openItem.addActionListener(this);
closeItem.addActionListener(this);
exitItem.addActionListener(this);
}


public void openFrame() {
JInternalFrame frame = new JInternalFrame("새문서"+cnt, true, true, true, true); // 이부분이 또 짤려 있음
JLabel imageLabel = new JLabel("새문서");
frame.getContentPane().setBackground(Color.white);
frame.getContentPane().add(imageLabel);
if(cnt==1)
frame.setSize(200,200);
else
frame.setBounds((cnt-1)*20, (cnt-1)*20, 200, 200);
cnt++;
desktop.add(frame);
frame.setVisible(true);
}


public void closeFrame() {
JInternalFrame frame = desktop.getSelectedFrame();
if(frame == null) { return; }
frame.setVisible(false);
frame.dispose();
}


public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
if(obj == openItem) {
openFrame();
}
else if(obj == closeItem) {
closeFrame();
}
else if(obj == exitItem) {
setVisible(false);
dispose();
System.exit(0);
}
}


public static void main(String[] args){
new JInternalFrameEx();
}
}

------------------------------------
------------------------------------

 

//메세지 박스 입력했는데 입력을 안했을때도 띄워 주는등 그런  활용도에 쓰인다.

[JOptionPaneEx.java]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JOptionPaneEx extends JFrame implements ActionListener{

JButton b1, b2, b3, b4;

String[] str={"로그인", "회원가입"}; //배열생성

public JOptionPaneEx(){
super("JOptionPane 테스트");

setLayout(new FlowLayout()); //버튼 4개를 플로우 레이어

b1=new JButton("MessageDialog");
b2=new JButton("ConfirmDialog");
b3=new JButton("InputDialog");
b4=new JButton("OptionDialog");

add(b1);
add(b2);
add(b3);
add(b4);

pack(); //창크기 팩 호출 컴퍼넌트에 맞춰주소
setLocation(300,300);
setVisible(true);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
if (e.getSource()==b1){
 JOptionPane.showMessageDialog(this,"메세지다이얼로그박스","메세지",JOptionPane.INFORMATION_MESSAGE);// showMessageDialog조건을 채워야한다? (this이것에 주인은 누구냐.
  }
  else if(e.getSource()==b2){
   JOptionPane.showConfirmDialog(this,"확인다이얼로그박스","확인",JOptionPane.YES_NO_CANCEL_OPTION);
  }
  else if(e.getSource()==b3){
   JOptionPane.showInputDialog(this,"입력다이얼로그박스","입력",JOptionPane.YES_NO_OPTION);
  }
  else if(e.getSource()==b4){
   JOptionPane.showOptionDialog(this,"옵션다이얼로그박스","옵션",JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, str, str[0] );  //메소드에 들어가는 매개변수에 따라서 결과값이 틀리다
  }
 }
 
 public static void main(String[] args){
  new JOptionPaneEx();
 }
}

------------------------------------
------------------------------------
//파일 오픈하고 세이브를 하면 출력창에 어떤건지 이름을 나타내는 예제


[JFileChooserEx.java]
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class JFileChooserEx extends JPanel implements ActionListener { //패널을 상속받고 버튼에 대한 이벤트 액션을 구현

JButton openButton, saveButton;
JTextArea log;
JFileChooser fc; //파일추져를 객체로 생성

public JFileChooserEx(){
JFrame.setDefaultLookAndFeelDecorated(true); // tDefaultLookAndFee 기본적인 모양에 (맨위 상단 크게 작게 꺼지기)
JDialog.setDefaultLookAndFeelDecorated(true); //

JFrame frame = new JFrame("FileChooser 테스트");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout()); //패널에 레이아웃을 보더레이아웃
log = new JTextArea(5,20);
log.setMargin(new Insets(5,5,5,5));  //셋마진(여백)에는 인세스(동서남북)를 넣어준다.  5,5,5,5
JScrollPane logScrollPane = new JScrollPane(log); //객체생성
fc = new JFileChooser(); //FC에다가 스크롤바 생성
openButton = new JButton("Open");
saveButton = new JButton("Save");
JPanel buttonPanel = new JPanel(); //패널을 하나 만들고 버튼을 붙여주고
buttonPanel.add(openButton);
buttonPanel.add(saveButton);
add(buttonPanel, BorderLayout.NORTH);
add(logScrollPane, BorderLayout.CENTER);
frame.add(this); //패널을 상속받아 디스를 붙여줌
frame.pack();
frame.setLocation(300,300);
frame.setVisible(true);
openButton.addActionListener(this); //추후에 버튼 두개에대한 이벤트 에드 액션 연결
saveButton.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
if (e.getSource() == openButton) { //오픈버튼을 클릭하면
int returnVal = fc.showOpenDialog(this); //오픈다얄로그를 띄우면 // 오픈하는 작업을 할때는 오픈 다얄로그(열기 누르면 나오는창)
if (returnVal == JFileChooser.APPROVE_OPTION){ //APPROVE_OPTION)열기버튼 을 누르면 열린다.
File file=fc.getSelectedFile();// SelectedFile(선택한건ㅅ에 대한 파일을 가져오고
log.setText(file.getName()+"\n");// setText(file.getName()+"\ 그것을 텍스트로 가져온다.(파일을 가져오는게 아니라 파일이름만 가져온다.
}
}else if (e.getSource() == saveButton){// saveButto세이브 버튼을 누르면
int returnVal = fc.showSaveDialog(this); //저장한 다얄로그 갖다가. 저장할떄는 쇼세이브 다얄로그(저장하면 나오는창. 다만드는게 아니라 메소드만 호출하면 그창이 나온다.)
if (returnVal == JFileChooser.APPROVE_OPTION){
File file=fc.getSelectedFile();
log.setText(file.getName()+"\n"); //저장한 파일명만 나온다.
}
}
}
public static void main(String[] args) {
new JFileChooserEx();
}
}


------------------------------------
------------------------------------

//색상하고 연결하여 색상열면 색깔이 나타는 예제

[JColorChooserEx.java]


import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class JColorChooserEx extends JFrame implements ActionListener{

JMenuBar mb =new JMenuBar();
JMenu mnuselect = new JMenu("선택");
JMenuItem mnucolor=new JMenuItem("색샹");
JLabel l=new JLabel("출력창");
JTextArea ta=new JTextArea();

public JColorChooserEx(){
super("JColorChooser 테스트");
mnuselect.add(mnucolor);
mb.add(mnuselect);
setJMenuBar(mb);
add("North",l);
add("Center",ta);
setBounds(300, 300, 300, 200);
setVisible(true);

mnucolor.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==mnucolor){
JColorChooser chooser = new JColorChooser();
Color col=chooser.showDialog(this,"색상을 고르세요",Color.blue);// (this,"색상을 고르세요",Color.blue)(매개변수 디스는 이창의 주인, 창의 타이틀, 창을 띄웠을때 기본 선택되는 색상 블루)
l.setText("선택한 색상은"+col);
ta.setBackground(col);
}
}
public static void main(String[] args){
new JColorChooserEx();
}
}

//위의 세개의 예제는 만들어져있는 창을 가지고 호출 하는 예문이다.

댓글