관리 메뉴

nkdk의 세상

자바 Language 17일째 스윙에 대하여... 본문

My Programing/JAVA

자바 Language 17일째 스윙에 대하여...

nkdk 2008. 3. 8. 01:13
package Swing;
import java.awt.*; // < - awt 를 호출한다.
import java.awt.event.*; // 이벤트를 만든다.
import javax.swing.*; // <- 스윙을 추가한다.
import javax.swing.event.*; // <- 스윙에 관련된 이벤트를 만든다.

// 아래 쪽에 JFrame 을 상속 받는다.(버튼을 사용하기 위해 액션 리스너를 부른다.)
public class SwingTest extends JFrame implements ActionListener{
JButton btnClick; // 버튼을 만든다.
int count;
JLabel lblDisp; // 카운트 된 것을 화면에 뿌려 지기 위해 만들어 주었음
public SwingTest() {
btnClick=new JButton("클릭(C)");
btnClick.setMnemonic(KeyEvent.VK_C); // <-B라는 버튼에 대해서 Mme키를 주었다. B라는 것이 표시
btnClick.addActionListener(this);

JPanel pn=new JPanel(); // 패널을 하나 만든다.
pn.setBorder(BorderFactory.createEmptyBorder(30,30,10,30)); // pn에 보더를 준다.
pn.setLayout(new GridLayout(2,1)); // <<-- 2행 1열 그리드 레이 아웃을 만든다.
pn.add(btnClick); // 첫번째에 이것을 넣는다.
lblDisp=new JLabel("버튼 클릭 횟수 : "+ count);
pn.add(lblDisp);
this.getContentPane().add(pn, BorderLayout.CENTER); // 이것을 ContentPane에다가 얹어 놓는다.

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

// swing에서의 또 다른 종료 방법

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

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

public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(btnClick)) {
count++;
lblDisp.setText("버튼 클릭 횟수 : "+ count);
}
}
}


package Swing;
import javax.swing.*;
import java.awt.*;

public class ShowProgress extends JPanel{
JProgressBar progBar;
JLabel lbl;
public ShowProgress() { // 패널 상속이기 때문에 얼마든지 add 될 수 있다.
setLayout(new BorderLayout());
progBar = new JProgressBar();
progBar.setMinimum(0);
progBar.setMaximum(100);
progBar.setValue(0);
lbl=new JLabel("");
add(progBar, "Center");
add(lbl,"South");
}

public void go() {
try{
for(int i=0;i<=100;i++) {
progBar.setValue(i);
Thread.sleep(30); // 데몬 스레드 임
lbl.setText(i+"%가 진행 중");
}
}catch (Exception e) {
lbl.setText("진행이 중지");
}
}

public static void main(String[] args) {


}

}


package Swing;

import java.awt.*; // < - awt 를 호출한다.
import java.awt.event.*; // 이벤트를 만든다.
import javax.swing.*; // <- 스윙을 추가한다.
import javax.swing.event.*; // <- 스윙에 관련된 이벤트를 만든다.
import javax.swing.border.*;

// 패널에 넣고 프레임에 맨 나중에 넣는 방식을 사용한다. 패널은 기본적으로 플로우 레이 아
// 아래의 사용 방법을 권장한다.

public class SwingTest2 extends JPanel{
BevelBorder border;
EtchedBorder eborder;
TitledBorder tborder;
JLabel label;
JPanel pn1, pn2, pn3;
JButton btn;
AbstractButton button; // JToggleButtle 지정한다.

public SwingTest2() {
this.setLayout(new GridLayout(3,4,10,5)); // 3행 4열 10너비 5너비 정도 띄어 준다.
pn1=new JPanel();
label=new JLabel("보더 없음", JLabel.CENTER);
pn1.add(label);

label=new JLabel("bevel border", JLabel.CENTER);
border=new BevelBorder(BevelBorder.RAISED);;
label.setBorder(border);
pn1.add(label);

label=new JLabel("etched border", JLabel.CENTER);
eborder=new EtchedBorder(BevelBorder.RAISED);
label.setBorder(eborder);
pn1.add(label);

label=new JLabel("titled border", JLabel.CENTER);
tborder=new TitledBorder("제목");
tborder.setTitlePosition(TitledBorder.ABOVE_TOP); // // 위쪽에 제목이 생긴다.
tborder.setTitleJustification(TitledBorder.CENTER); // 정렬 방식을 위해 넣는다.
label.setBorder(eborder); // awt 에는 이런 것이 없다.
pn1.add(label);

this.add(pn1); // JPanel 에다가 add 한 것이다.

pn2=new JPanel();
btn=new JButton("배");
pn2.add(btn);
btn=new JButton("사과");
pn2.add(btn);
btn=new JButton("딸기");
pn2.add(btn);
btn=new JButton("포도");
pn2.add(btn);
this.add(pn2);
btn.setToolTipText("풍선도움말"); // 풍선 도움말을 나오게 할 때 사용한다.

// 이미지 버튼 사용 하기
pn3=new JPanel();
// 이미지 아이콘 클라스를 먼저 이용해야 한다.
ImageIcon btnImage=new ImageIcon("D:/javasou/javas/basic/gui/duke/FRAME1.GIF");
ImageIcon pressImage=new ImageIcon("D:/javasou/javas/basic/gui/duke/FRAME3.GIF");
ImageIcon selfImage=new ImageIcon("D:/javasou/javas/basic/gui/duke/FRAME5.GIF");
ImageIcon disableImage=new ImageIcon("D:/javasou/javas/basic/gui/duke/FRAME7.GIF");
ImageIcon rolloverImage=new ImageIcon("D:/javasou/javas/basic/gui/duke/FRAME9.GIF");
ImageIcon selrollImage=new ImageIcon("D:/javasou/javas/basic/gui/duke/FRAME1.GIF");

button=new JButton(); // jbutton 을 설정해줌
button.setIcon(btnImage);
button.setPressedIcon(pressImage);
pn3.add(button);

button=new JButton(); // jbutton 을 설정해줌
button.setIcon(btnImage);
button.setDisabledIcon(disableImage);
button.setEnabled(false); // true 와 false 일 때의 상태는 서로 다르다.
pn3.add(button);

button=new JToggleButton(); // jbutton 을 설정해줌
button.setIcon(btnImage);
button.setSelectedIcon(selfImage); // 선택 했을 때의 그림
button.setRolloverIcon(rolloverImage); // 롤오버 했을때 그림
button.setRolloverSelectedIcon(selrollImage); // 선택된 아이콘에 대한 이미
pn3.add(button);

this.add(pn3);

}

public Dimension getPreferredSize() {
return new Dimension(500,400);
}

public static void main(String[] args) {
JFrame frame=new JFrame("스윙 연습"); // 포함 관계로 하려 한다.
SwingTest2 sw=new SwingTest2();
frame.getContentPane().add(sw,"Center");
// 크기를 잡아서 보이게 해 주어야 한다.
frame.setSize(sw.getPreferredSize());
frame.setLocation(200,200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 기본적인 종료 방
// 이것이 일반인들이 권장하는 방법이다.
}

}


package Swing;
import javax.swing.*;

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

import javax.swing.event.*;

public class SwingTest3 extends JPanel implements ChangeListener, ActionListener{
JButton btn1, btn2; // 툴바용
JComboBox combo; // 툴바용
JTabbedPane pane; // 탭
ShowProgress sp; // 프로그래스를 추가 한다.

public SwingTest3() {
this.setLayout(new BorderLayout());

// 여기서 부터 툴바에 대한 내용이 나온다. 뺏다 꼇다 할 수 있다.

JToolBar bar=new JToolBar();
JPanel pn=new JPanel();
pn.setLayout(new GridLayout(1,3));

btn1=new JButton();
ImageIcon img1=new ImageIcon("D:/javasou/javas/basic/gui/duke/FRAME2.GIF");
btn1.setIcon(img1);
bar.add(btn1);

combo=new JComboBox();
combo.addItem("One");
combo.addItem("Two");
bar.add(combo);

bar.addSeparator(); // 경계선 나
btn2=new JButton();
ImageIcon img2=new ImageIcon("D:/javasou/javas/basic/gui/duke/FRAME2.GIF");
btn2.setIcon(img2);
btn2.addActionListener(this);
bar.add(btn2);




pn.add(bar);
this.add("North", pn);

// 다양한 툴바를 뿌리고 싶을 때는 탭 을 사용한다.

pane=new JTabbedPane();
JPanel tabpn=new JPanel();
tabpn.add(new JLabel("첫번째 탭"));
pane.addTab("첫번째", tabpn);

tabpn=new JPanel();
tabpn.add(new JLabel("두번째 탭"));
sp=new ShowProgress(); // 프로그레스 바를 만든다(진행이 어느 정도 되었는지 확인)
tabpn.add(sp); // 패널 속에 담아 버린다
pane.addTab("두번째", tabpn);

tabpn=new JPanel();
tabpn.add(new JLabel("세번째 탭"));
pane.addTab("세번째", tabpn);

pane.setSelectedIndex(0);
pane.requestFocus(); // 첫번째 탭을 선택해 놓는다. 선택 안 해 놓으면 앞에 글자가 안 보임

pane.addChangeListener(this); // 탭을 누르면 반응 한다.
this.add("Center", pane);
}

public static void main(String[] args) {
JFrame frame=new JFrame("스윙 연습3"); // 포함 관계로 하려 한다.
SwingTest3 sw=new SwingTest3();
frame.getContentPane().add(sw,"Center");
// 크기를 잡아서 보이게 해 주어야 한다.
frame.setSize(sw.getPreferredSize());
frame.setLocation(200,200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 기본적인 종료 방
// 이것이 일반인들이 권장하는 방법이다.
}

public void stateChanged(ChangeEvent e) {
int index=pane.getSelectedIndex();
System.out.println(pane.getTitleAt(index));
}

public Dimension getPreferredSize(){
return new Dimension(500,400);
}

public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(btn2)) sp.go();
}
}

에 내용이 되겠네요.