객체지향프로그래밍 그래픽사용자인터페이스 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr
예제 1. 프레임생성 (1) import javax.swing.*; public class FrameTest { public static void main(string[] args) { JFrame f = new JFrame("Frame Test"); JFrame 의객체생성 f.setsize(300, 200); f.setdefaultcloseoperation(jframe.exit_on_close); f.setvisible(true); 2
예제 2. 프레임생성 (2) import javax.swing.*; public class MyFrame extends JFrame { Jframe 을상속하여 MyFrame 을정의 public MyFrame() { setsize(300, 200); setdefaultcloseoperation(jframe.exit_on_close); settitle("myframe"); setvisible(true); public class MyFrameTest { public static void main(string[] args) { MyFrame f = new MyFrame(); MyFrame 의객체생성 3
예제 3. 프레임생성 (3) Jframe 을상속하여서 MyFrame 을정의 import javax.swing.*; public class MyFrame extends JFrame { public MyFrame() { setsize(300, 200); setdefaultcloseoperation(jframe.exit_on_close); settitle("myframe"); setvisible(true); public static void main(string[] args) { MyFrame f = new MyFrame(); main() 이 MyFrame 안으로이동 4
예제 4. 컴포넌트생성과추가 import javax.swing.*; import java.awt.flowlayout; public class MyFrame extends JFrame { public MyFrame() { setsize(300, 200); setdefaultcloseoperation(jframe.exit_on_close); settitle("myframe"); 배치관리자설정! 컴포넌트생성및추가 setlayout(new FlowLayout()); JButton button = new JButton(" 버튼 "); this.add(button); setvisible(true); public class MyFrameTest { public static void main(string[] args) { MyFrame f = new MyFrame(); 5
예제 5. 온도변환기 이제까지학습한내용을바탕으로화씨온도를섭씨온도로변환해주는애 플리케이션을작성하여보자. 6
예제 5. 온도변환기 // 소스를입력하고 Ctrl+Shift+O를눌러서필요한파일을포함한다. public class Mylab { public static void main(string[] args) { JFrame f = new JFrame(); JPanel panel = new JPanel(); f.add(panel); JLabel label1 = new JLabel(" 화씨온도 "); JLabel label2 = new JLabel(" 섭씨온도 "); JTextField field1 = new JTextField(15); JTextField field2 = new JTextField(15); JButton button = new JButton(" 변환 "); 7
예제 5. 온도변환기 panel.add(label1); panel.add(field1); panel.add(label2); panel.add(field2); panel.add(button); f.setsize(300, 150); f.setdefaultcloseoperation(jframe.exit_on_close); f.settitle(" 온도변환기 "); f.setvisible(true); 8
예제 6. 피자주문화면제작 패널안에다른패널이포함될수있다. 이것을이용하여서다음그림처럼 프로그램의화면을디자인하라. 9
예제 6. 피자주문화면제작 10
예제 6. 피자주문화면제작 // 소스만입력하고 Ctrl+Shift+O 를누른다. public class MyFrame extends JFrame { public MyFrame() { setsize(600, 150); setdefaultcloseoperation(jframe.exit_on_close); settitle("myframe"); JPanel panel = new JPanel(); JPanel panela = new JPanel(); JPanel panelb = new JPanel(); JLabel label1 = new JLabel(" 자바피자에오신것을환영합니다. 피자의종류를선택하시오."); panela.add(label1); 11
예제 6. 피자주문화면제작 JButton button1 = new JButton(" 콤보피자 "); JButton button2 = new JButton(" 포테이토피자 "); JButton button3 = new JButton(" 불고기피자 "); panelb.add(button1); panelb.add(button2); panelb.add(button3); JLabel label2 = new JLabel(" 개수 "); JTextField field1 = new JTextField(10); panelb.add(label2); panelb.add(field1); panel.add(panela); panel.add(panelb); add(panel); setvisible(true); 12
예제 6. 피자주문화면제작 public class MyFrameTest { public static void main(string[] args) { MyFrame f = new MyFrame(); 13
예제 7. FlowLayout import java.awt.*; import javax.swing.*; class MyFrame extends JFrame { public MyFrame() { settitle("flowlayouttest"); setdefaultcloseoperation(jframe.exit_on_close); JPanel panel; // 패널을생성하고배치관리자를 FlowLayout 으로설정 panel = new JPanel(); panel.setlayout(new FlowLayout(FlowLayout.CENTER)); // 패널에버튼을생성하여추가 panel.add(new JButton("Button1")); panel.add(new JButton("Button2")); panel.add(new JButton("Button3")); panel.add(new JButton("B4")); panel.add(new JButton("Long Button5")); add(panel); pack(); setvisible(true); 14
예제 8. BorderLayout 예제 import java.awt.*; import javax.swing.*; class MyFrame extends JFrame { public MyFrame() { settitle("borderlayouttest"); setdefaultcloseoperation(jframe.exit_on_close); // 프레임은디폴트로 BorderLayout 이므로사실은불필요 setlayout(new BorderLayout()); // 버튼을추가한다. add(new JButton("Center"), BorderLayout.CENTER); add(new JButton("Line Start"), BorderLayout.LINE_START); add(new JButton("Line End"), BorderLayout.LINE_END); add(new JButton("Page Start"), BorderLayout.PAGE_START); add(new JButton("Page End"), BorderLayout.PAGE_END); pack(); setvisible(true); 15
예제 9. GridLayout import java.awt.*; import javax.swing.*; class MyFrame extends JFrame { public MyFrame() { settitle("gridlayouttest"); setdefaultcloseoperation(jframe.exit_on_close); setlayout(new GridLayout(0, 3));// 3 개의열과필요한만큼의행 add(new JButton("Button1")); add(new JButton("Button2")); add(new JButton("Button3")); add(new JButton("B4")); add(new JButton("Long Button5")); pack(); setvisible(true); 16
예제 9. 절대위치 import java.awt.*; import java.awt.event.*; import javax.swing.*; class MyFrame extends JFrame { JButton b1; private JButton b2, b3; public MyFrame() { settitle("absolute Position Test"); setdefaultcloseoperation(jframe.exit_on_close); setsize(300, 200); JPanel p = new JPanel(); p.setlayout(null); b1 = new JButton("Button #1"); p.add(b1); b2 = new JButton("Button #2"); p.add(b2); b3 = new JButton("Button #3"); p.add(b3); 17
예제 9. 절대위치 b1.setbounds(20, 5, 95, 30); b2.setbounds(55, 45, 105, 70); b3.setbounds(180, 15, 105, 90); add(p); setvisible(true); public class AbsoluteTest { public static void main(string args[]) { MyFrame f=new MyFrame(); 18
예제 10. 계산기 간단한계산기를작성하여보자. 계산기능은나중에추가하기로하자. 여기 서는다음과같은외관만구현하면된다.GridLayout 을사용하여보자. 19
예제 10. 계산기 // 소스만입력하고 Ctrl+Shift+O 를누른다. public class Calculator extends JFrame { private JPanel panel; private JTextField tfield; private JButton[] buttons; private String[] labels = { "Backspace", "", "", "CE", "C", "7", "8", "9", "/", "sqrt", "4", "5", "6", "x", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=", ; 20
예제 10. 계산기 public Calculator() { tfield = new JTextField(35); panel = new JPanel(); tfield.settext("0."); tfield.setenabled(false); panel.setlayout(new GridLayout(0, 5, 3, 3)); buttons = new JButton[25]; int index = 0; for (int rows = 0; rows < 5; rows++) { for (int cols = 0; cols < 5; cols++) { buttons[index] = new JButton(labels[index]); if( cols >= 3 ) buttons[index].setforeground(color.red); else buttons[index].setforeground(color.blue); buttons[index].setbackground(color.yellow); panel.add(buttons[index]); index++; 21
예제 10. 계산기 add(tfield, BorderLayout.NORTH); add(panel, BorderLayout.CENTER); setvisible(true); pack(); public static void main(string args[]) { Calculator s = new Calculator(); 22
예제 11. 불규칙한레이블 다음과같이난수를발생하여서레이블을불규칙하게배치하여보자. 23
예제 11. 불규칙한레이블 public class MyFrame extends JFrame { JPanel p = new JPanel(); JLabel[] labels = new JLabel[30]; public MyFrame() { p.setlayout(null); p.setbackground(color.yellow); for (int i = 0; i < 30; i++) { labels[i] = new JLabel("" + i); int x = (int) (500 * Math.random()); int y = (int) (200 * Math.random()); labels[i].setforeground(color.magenta); labels[i].setlocation(x, y); labels[i].setsize(20, 20); p.add(labels[i]); setsize(500, 300); add(p); setvisible(true); // 프레임을화면에표시한다. 24
예제 11. 불규칙한레이블 public class MyFrameTest { public static void main(string args[]) { MyFrame f = new MyFrame(); 25