ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바3주차 시험자료
    정리필요2 2008. 9. 1. 00:46

    package p1;

    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.Color;
    import java.awt.geom.Ellipse2D;
    import javax.swing.JComponent;

    public class Circlecomponent extends JComponent{
     
     public Circlecomponent(int x, int y)
     {
      circle = new Ellipse2D.Double(x, y, 100, 100);
     }
     public void paintComponent(Graphics g)
     {
      Graphics2D g2 = (Graphics2D) g;
      g2.setColor(col);
      g2.fill(circle);
      g2.draw(circle);  
     }
     public void setColor(Color c)
     {
      col = c;
      repaint();
     }
     private Ellipse2D.Double circle;
     private Color col = Color.white;
    }

    package p1;

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.Color;

    public class CircleViewer {

     public static void main(String[] args) {
     
      JFrame frame = new JFrame();
      frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
      final Circlecomponent component = new Circlecomponent(FRAME_WIDTH/2-50, FRAME_HEIGHT/2-50);
     
      JButton button1 = new JButton("RED");
      JButton button2 = new JButton("BLUE");
      JButton button3 = new JButton("YELLOW");
     
      class ClickListener implements ActionListener {
       
       public ClickListener(JButton b)
       {
        button = b;
       }
       
       public void actionPerformed(ActionEvent event)
       {
        button = (JButton)event.getSource(); // 리스너가 하나일시 event발생 소스로 버튼을 구분한다.

        if(button.getText().equals("RED"))
        {
         component.setColor(Color.red);
        }
        else if(button.getText().equals("BLUE"))
        {
         component.setColor(Color.blue);
        }
        else if(button.getText().equals("YELLOW"))
        {
         component.setColor(Color.yellow);
        }
       }  
       private JButton button;
      }
     
      JPanel p1 = new JPanel();
     
      button1.setSize(100, 80);
      button2.setSize(100, 80);
      button3.setSize(100, 80);
      p1.add(button1);
      p1.add(button2);
      p1.add(button3);
     
      p1.setSize(300, 80);  
      frame.add(p1);
      p1.setLocation(FRAME_WIDTH/2-150, FRAME_HEIGHT-200);
      frame.add(component);
     
      ActionListener listener1 = new ClickListener(button1);
      listener1 = new ClickListener(button2);
      listener1 = new ClickListener(button3);
      button1.addActionListener(listener1);
      button2.addActionListener(listener1);
      button3.addActionListener(listener1);

      frame.setVisible(true);
     
     }
     private static final int FRAME_WIDTH = 600;
     private static final int FRAME_HEIGHT = 600;

    }

    package p2;

    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.Color;
    import java.awt.geom.Ellipse2D;
    import javax.swing.JComponent;

    public class Circlecomponent extends JComponent{
     
     public Circlecomponent(int x, int y)
     {
      circle = new Ellipse2D.Double(x, y, 100, 100);
     }
     public void paintComponent(Graphics g)
     {
      Graphics2D g2 = (Graphics2D) g;
      g2.setColor(col);
      g2.fill(circle);
      g2.draw(circle);  
     }
     public void setColor(Color c)
     {
      col = c;
      repaint();
     }
     private Ellipse2D.Double circle;
     private Color col = Color.white;
    }

    package p2;

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseEvent;
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.Color;

    public class CircleViewer {

     public static void main(String[] args) {
     
      JFrame frame = new JFrame();
      frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
      final Circlecomponent component = new Circlecomponent(FRAME_WIDTH/2-50, FRAME_HEIGHT/2-50);
     
      JCheckBox check1 = new JCheckBox("RED");
      JCheckBox check2 = new JCheckBox("GREEN");
      JCheckBox check3 = new JCheckBox("BLUE");
     
      class ClickListener implements ActionListener {
       
       public ClickListener(JCheckBox b)
       {
        check = b;
       }
       
       public void actionPerformed(ActionEvent event)
       {
        check = (JCheckBox)event.getSource(); // 리스너가 하나일시 event발생 소스로 버튼을 구분한다.
       
        if(check.getText().equals("RED"))
        {
         if(r==0)
          r = 1;
         else
          r = 0;
         
        }
        else if(check.getText().equals("GREEN"))
        {
         if(g==0)
          g = 1;
         else
          g = 0;
        }
        else if(check.getText().equals("BLUE"))
        {
         if(b==0)
          b = 1;
         else
          b = 0;
        }

        component.setColor(new Color(r, g, b));
       }  
       private float r=0, g=0, b=0;
       private JCheckBox check;
      }
     
      JPanel p1 = new JPanel();
     
      check1.setSize(100, 80);
      check2.setSize(100, 80);
      check3.setSize(100, 80);
      p1.add(check1);
      p1.add(check2);
      p1.add(check3);
     
      p1.setSize(300, 80);  
      frame.add(p1);
      p1.setLocation(FRAME_WIDTH/2-150, FRAME_HEIGHT-200);
      frame.add(component);
     
      ActionListener listener1 = new ClickListener(check1);
      listener1 = new ClickListener(check2);
      listener1 = new ClickListener(check3);
      check1.addActionListener(listener1);
      check2.addActionListener(listener1);
      check3.addActionListener(listener1);

      frame.setVisible(true);
     }
     
     private static final int FRAME_WIDTH = 600;
     private static final int FRAME_HEIGHT = 600;
    }

    package p3;

    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.Color;
    import java.awt.geom.Ellipse2D;
    import javax.swing.JComponent;

    public class Circlecomponent extends JComponent{
     
     public Circlecomponent(int x, int y)
     {
      circle = new Ellipse2D.Double(x, y, 100, 100);
     }
     public void paintComponent(Graphics g)
     {
      Graphics2D g2 = (Graphics2D) g;
      g2.setColor(col);
      g2.fill(circle);
      g2.draw(circle);  
     }
     public void setColor(Color c)
     {
      col = c;
      repaint();
     }
     private Ellipse2D.Double circle;
     private Color col = Color.white;
    }

    package p3;

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseEvent;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.border.*;


    import java.awt.Color;

    public class CircleViewer {

     public static void main(String[] args) {
     
      JFrame frame = new JFrame();
      frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
      final Circlecomponent component = new Circlecomponent(FRAME_WIDTH/2-50, FRAME_HEIGHT/2-50);
     
      final JSlider slider1 = new JSlider(SwingConstants.HORIZONTAL, 0, 255, 10);
      final JSlider slider2 = new JSlider(SwingConstants.HORIZONTAL, 0, 255, 10);
      final JSlider slider3 = new JSlider(SwingConstants.HORIZONTAL, 0, 255, 10);
     
      slider1.setName("RED");
      slider2.setName("GREEN");
      slider3.setName("BLUE");

      class Listener implements ChangeListener {
       
       public Listener(JSlider b){
        slider = b;
       }
       
       public void stateChanged(ChangeEvent e){
       
        slider = (JSlider)e.getSource();

        if(slider.equals(slider1))
        {
         r = slider.getValue();
        }
        if(slider.equals(slider2))
        {
         g = slider.getValue();
        }
        if(slider.equals(slider3))
        {
         b = slider.getValue();
        }
       
        component.setColor(new Color(r, g, b));
       
       }  
       private JSlider slider;
       private int r, g, b;
      }
     
      JPanel p1 = new JPanel();
      JPanel p2 = new JPanel();
      JPanel p3 = new JPanel();
      p1.setBorder(new TitledBorder(slider1.getName()));
      p1.add(slider1);
      p2.setBorder(new TitledBorder(slider2.getName()));
      p2.add(slider2);
      p3.setBorder(new TitledBorder(slider3.getName()));
      p3.add(slider3);
     
      p1.setSize(300, 50);
      p1.setLocation(FRAME_WIDTH/2-150, FRAME_HEIGHT/2+60);
     
      p2.setSize(300, 50);
      p2.setLocation(FRAME_WIDTH/2-150, FRAME_HEIGHT/2+120);
     
      p3.setSize(300, 50);
      p3.setLocation(FRAME_WIDTH/2-150, FRAME_HEIGHT/2+180);
     
      frame.add(p1);
      frame.add(p2);
      frame.add(p3);
      frame.add(component);
     
     
      Listener listener = new Listener(slider1);
      listener = new Listener(slider2);
      listener = new Listener(slider3);
     
      slider1.addChangeListener(listener);
      slider2.addChangeListener(listener);
      slider3.addChangeListener(listener);

      frame.setVisible(true);
     
     }
     
     
     private static final int FRAME_WIDTH = 600;
     private static final int FRAME_HEIGHT = 600;

    }

    package p4;

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

    import javax.swing.*;
    import javax.swing.event.*;

    public class SliderFrame extends JFrame {

     public SliderFrame()
     {
      JPanel colorPanel = new JPanel();
      colorPanel.setLayout(new GridLayout(2, 1));
     
      colorP = new JPanel(); // 현재 그려질 패널
      colorP.setBackground(Color.black);

      colorPanel_1 = new JPanel(); // 윗패널
      colorPanel_1.setBackground(Color.black);
      colorPanel_2 = new JPanel(); // 아랫패널
      colorPanel_2.setBackground(Color.black);
     
      colorPanel.add(colorPanel_1);
      colorPanel.add(colorPanel_2);
     
      colorP = colorPanel_1;
     
      add(colorPanel, BorderLayout.CENTER);
      createControlPanel();
      setSampleColor();
      setSize(FRAME_WIDTH, FRAME_HEIGHT);
     }
     
     public void createControlPanel()
     {
      class MousePressListener implements MouseListener{
       public MousePressListener(){}
       public void mousePressed(MouseEvent event){}
       public void mouseReleased(MouseEvent event){
        colorP = (JPanel)event.getSource();
        nowColor = new Color(colorP.getBackground().getRed(),
          colorP.getBackground().getGreen(),
          colorP.getBackground().getBlue());
       
        redSlider.setValue(nowColor.getRed());
        greenSlider.setValue(nowColor.getGreen());
        blueSlider.setValue(nowColor.getBlue());  
       }
       public void mouseClicked(MouseEvent event){}
       public void mouseEntered(MouseEvent event){}
       public void mouseExited(MouseEvent event){}
      }
     
      class ColorListener implements ChangeListener {
       public void stateChanged(ChangeEvent event) {
        setSampleColor();
       }
      }

      MousePressListener listenerM = new MousePressListener();
      colorPanel_1.addMouseListener(listenerM);
      colorPanel_2.addMouseListener(listenerM);
     
      ChangeListener listener = new ColorListener();
     
      redSlider = new JSlider(0, 255, 0);
      redSlider.addChangeListener(listener);
     
      greenSlider = new JSlider(0, 255, 0);
      greenSlider.addChangeListener(listener);
     
      blueSlider = new JSlider(0, 255, 0);
      blueSlider.addChangeListener(listener);
     
      JPanel controlPanel = new JPanel();
      controlPanel.setLayout(new GridLayout(3, 2));
     
      controlPanel.add(new JLabel("Red"));
      controlPanel.add(redSlider);
     
      controlPanel.add(new JLabel("Green"));
      controlPanel.add(greenSlider);

      controlPanel.add(new JLabel("Blue"));
      controlPanel.add(blueSlider);

      add(controlPanel, BorderLayout.SOUTH);  
     }

     public void setSampleColor()
     {
      int red = redSlider.getValue();
      int green = greenSlider.getValue();
      int blue = blueSlider.getValue();

      colorP.setBackground(new Color(red, green, blue));
      colorP.repaint();
     
     }
     
     private JPanel colorP, colorPanel_1, colorPanel_2;
     
     private Color nowColor;
     private JSlider redSlider;
     private JSlider greenSlider;
     private JSlider blueSlider;
     
     private static final int FRAME_WIDTH = 300;
     private static final int FRAME_HEIGHT = 400;
    }

    package p4;

    import javax.swing.JFrame;

    public class SliderFrameViewer {
     public static void main(String[] args) {
      // TODO Auto-generated method stub
     
      SliderFrame frame = new SliderFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
     }

    }

    package p5;

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

    import javax.swing.*;
    import javax.swing.event.*;

    public class CalComponent extends JFrame {
     public CalComponent()
     {
      calPanel = new JPanel();
      input1 = new JTextField("입력1  ");
      //input1.setSize(200, 80);
      input2 = new JTextField("입력2  ");
      //input2.setSize(200, 80);
      cBox = new JComboBox(op);
      equal = new JLabel("=");
      result = new JTextField("결과   ");
      //result.setSize(200, 80);
     
      calPanel.add(input1);
      calPanel.add(cBox);
      calPanel.add(input2);
      calPanel.add(equal);
      calPanel.add(result);
     
      add(calPanel);
      createControlPanel();
      setSize(FRAME_WIDTH, FRAME_HEIGHT);
     }
     
     public void createControlPanel()
     {

      cBox.addItemListener(new ItemListener() {
       public void itemStateChanged(ItemEvent ev) {
        if(ev.getStateChange() == ItemEvent.SELECTED){    
         JComboBox jbox = (JComboBox)ev.getItemSelectable();
         String str = jbox.getSelectedItem().toString();
         
         double x, y, r;
         x = Double.parseDouble(input1.getText());
         y = Double.parseDouble(input2.getText());
         
         if(str.equals("+")){
          r = x + y;      
          result.setText(""+r+"");
         }else if(str.equals("-")){
          r = x - y;      
          result.setText(""+r+"");
         }else if(str.equals("*")){
          r = x * y;      
          result.setText(""+r+"");
         }else if(str.equals("/")){
          r = x / y;      
          result.setText(""+r+"");
         }
        }
       }
      });  
     }
     
     private JPanel calPanel;
     private JTextField input1;
     private JTextField input2;
     private String op[] = {" ", "+", "-", "*", "/"};
     private JComboBox cBox;
     private JLabel equal;
     private JTextField result;
     
     private static final int FRAME_WIDTH = 900;
     private static final int FRAME_HEIGHT = 100;

    }

    package p5;

    import javax.swing.JFrame;

    public class CalTester {

     /**
      * @param args
      */
     public static void main(String[] args) {
      // TODO Auto-generated method stub
     
      CalComponent frame = new CalComponent();
      frame.setTitle("허접계산기");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
     }

    }

    /** BankAccount.java */
    package p1;

    import java.lang.IllegalArgumentException;

    public class BankAccount {
     public BankAccount() {
      balance = 0;
     }
     public BankAccount(double initialBalance) {
      if(initialBalance < 0) {
       throw new IllegalArgumentException("음수 금액의 계좌 개설은 불가능 합니다.");
      }
      balance = initialBalance;
     }
     public void despoit(double amount) {
      if(amount < 0) {
       throw new IllegalArgumentException("음수 금액의 입금은 불가능 합니다.");
      }
      double newBalnace = balance + amount;
      balance = newBalnace;
     }
     public void withdraw(double amount) {
      if(amount < 0 || amount > balance) {
       throw new IllegalArgumentException("음수 금액과 계좌금액의 한도를 넘은 금액의 출금은 불가능 합니다.");
      }
      double newBalance = balance - amount;
      balance = newBalance;
     }
     public double getBalance() {
      return balance;
     }
     
     private double balance;
    }

    /** BankAccountExceptionTester.java */
    package p1;

    import java.lang.IllegalArgumentException;
    import java.util.Scanner;

    public class BankAccountExceptionTester {

     public static void main(String[] args) {
      // TODO Auto-generated method stub
      Scanner sc = new Scanner(System.in);
      BankAccount ba;
      int coni = 1;
     
      System.out.print("계좌 개설 금액: ");
      double money = sc.nextDouble();
     
      try {
       ba = new BankAccount(money);
      }
      catch(IllegalArgumentException exception) {
       System.out.println("생성자 호출에서 오류가 발생하였습니다.");
       exception.getMessage();
       exception.printStackTrace();
       
       ba = new BankAccount();
      }
     
      while(coni != 0) {
       System.out.print("1.입금 , 2.출금, 0.거래종료: ");
       coni = sc.nextInt();
       
       if(coni != 0) {
        System.out.print("거래 금액: ");
        money = sc.nextInt();
       
        if(coni == 1) {
         try {
          System.out.println(money + "입금.");
          ba.despoit(money);
         }
         catch(IllegalArgumentException exception) {
          System.out.println("deposit 메서드 호출에서 오류가 발생하였습니다.");
          exception.getMessage();
          exception.printStackTrace();
         }
        }
        else if(coni == 2) {
         try {
          System.out.println(money + "출금.");
          ba.withdraw(money);
         }
         catch(IllegalArgumentException exception) {
          System.out.println("withdraw 메서드 호출에서 오류가 발생하였습니다.");
          exception.getMessage();
          exception.printStackTrace();
         }
        }
        else {
         System.out.println("다시 선택하세요.");
        }
       
        System.out.println("계좌잔고: " + ba.getBalance());
       }
      }
     }
    }

    /** BankAccountExceptionTester.java */
    package p1;

    import java.lang.IllegalArgumentException;
    import java.util.Scanner;

    public class BankAccountExceptionTester {

     public static void main(String[] args) {
      // TODO Auto-generated method stub
      Scanner sc = new Scanner(System.in);
      BankAccount ba;
      int coni = 1;
     
      System.out.print("계좌 개설 금액: ");
      double money = sc.nextDouble();
     
      try {
       ba = new BankAccount(money);
      }
      catch(IllegalArgumentException exception) {
       System.out.println("생성자 호출에서 오류가 발생하였습니다.");
       exception.getMessage();
       exception.printStackTrace();
       
       ba = new BankAccount();
      }
     
      while(coni != 0) {
       System.out.print("1.입금 , 2.출금, 0.거래종료: ");
       coni = sc.nextInt();
       
       if(coni != 0) {
        System.out.print("거래 금액: ");
        money = sc.nextInt();
       
        if(coni == 1) {
         try {
          System.out.println(money + "입금.");
          ba.despoit(money);
         }
         catch(IllegalArgumentException exception) {
          System.out.println("deposit 메서드 호출에서 오류가 발생하였습니다.");
          exception.getMessage();
          exception.printStackTrace();
         }
        }
        else if(coni == 2) {
         try {
          System.out.println(money + "출금.");
          ba.withdraw(money);
         }
         catch(IllegalArgumentException exception) {
          System.out.println("withdraw 메서드 호출에서 오류가 발생하였습니다.");
          exception.getMessage();
          exception.printStackTrace();
         }
        }
        else {
         System.out.println("다시 선택하세요.");
        }
       
        System.out.println("계좌잔고: " + ba.getBalance());
       }
      }
     }
    }

    /** BankAccountException.java */
    package p2;

    public class BankAccountException extends Exception {

     public BankAccountException() {
      super();
     }

     public BankAccountException(String msg) {
      super(msg);
     }
    }

    /** BankAccountExceptionTester.java */
    package p2;

    import java.util.Scanner;

    public class BankAccountExceptionTester {

     /**
      * @param args
      */
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      Scanner sc = new Scanner(System.in);
      BankAccount ba;
      int coni = 1;

      System.out.print("계좌 개설 금액: ");
      double money = sc.nextDouble();

      try {
       ba = new BankAccount(money);
      }
      catch(BankAccountException exception) {
       System.out.println("생성자 호출에서 오류가 발생하였습니다.");
       exception.getMessage();
       exception.printStackTrace();

       ba = new BankAccount();
      }

      while(coni != 0) {
       System.out.print("1.입금 , 2.출금, 0.거래종료: ");
       coni = sc.nextInt();

       if(coni != 0) {
        System.out.print("거래 금액: ");
        money = sc.nextInt();

        if(coni == 1) {
         try {
          System.out.println(money + "입금.");
          ba.despoit(money);
         }
         catch(BankAccountException exception) {
          System.out.println("deposit 메서드 호출에서 오류가 발생하였습니다.");
          exception.getMessage();
          exception.printStackTrace();
         }
        }
        else if(coni == 2) {
         try {
          System.out.println(money + "출금.");
          ba.withdraw(money);
         }
         catch(BankAccountException exception) {
          System.out.println("withdraw 메서드 호출에서 오류가 발생하였습니다.");
          exception.getMessage();
          exception.printStackTrace();
         }
        }
        else {
         System.out.println("다시 선택하세요.");
        }

        System.out.println("계좌잔고: " + ba.getBalance());
       }
      }

     }
    }

    /** BadDataException.java */
    package p3;

    public class BadDataException extends Exception {

     public BadDataException() {
      super();
     }

     public BadDataException(String eMessage) {
      super(eMessage);
     }
    }

    /** DataSetReader.java */
    package p3;

    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Scanner;

    public class DataSetReader {

     public double[] readFile(String filename) throws IOException, BadDataException {
      FileReader reader = new FileReader(filename);
      try {
       Scanner in = new Scanner(reader);
       readData(in);
      }
      finally {
       reader.close();
      }
      return data;
     }

     private void readData(Scanner in) throws BadDataException {
      if(!in.hasNextInt()) {
       throw new BadDataException("Length expected");
      }
      int numberOfValues = in.nextInt();
      data = new double[numberOfValues];

      for(int i=0; i<numberOfValues; i++) {
       readValue(in, i);
      }

      if(in.hasNext()) {
       throw new BadDataException("End of file expected");
      }
     }

     private void readValue(Scanner in, int i) throws BadDataException {
      if(!in.hasNextDouble()) {
       throw new BadDataException("Data value expected");
      }
      data[i] = in.nextDouble();
     }

     private double[] data;
    }

    /** DataSetTester.java */
    package p3;

    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Scanner;

    public class DataSetTester {

     public static void main(String[] args) {
      // TODO Auto-generated method stub
      Scanner in = new Scanner(System.in);
      DataSetReader reader = new DataSetReader();

      boolean done = false;
      while(!done) {
       try {
        System.out.println("Please enter the file name: ");
        String filename = in.next();

        double[] data = reader.readFile(filename);
        double sum = 0;
        System.out.println("The sum is " + sum);
        done = true;
       }
       catch(FileNotFoundException exception) {
        System.out.println("File not found.");
       }
       catch(BadDataException exception) {
        System.out.println("Bad data: " + exception.getMessage());
       }
       catch(IOException exception) {
        exception.printStackTrace();
       }
      }
     }

    }

    package p4;

    import javax.swing.JComponent;
    import java.awt.geom.Ellipse2D;
    import java.awt.Rectangle;
    import java.awt.Shape;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Color;

    public class DrawComponent extends JComponent
    {
     private String shape;
     
     public DrawComponent(String sh)
     {
      shape = sh;
     }
     
     public void paintComponent(Graphics g)
     {
      Graphics2D g2 = (Graphics2D) g;
     
      if(shape.equals("원"))
      {
       g2.setColor(Color.RED);
       g2.fill(new Ellipse2D.Double(0,0,getWidth(),getHeight()));
      }
      else
      {
       g2.setColor(Color.BLUE);
       g2.fill(new Rectangle(0,0,getWidth(),getHeight()));
      }
     
     }
    }

    package p4;

    import javax.swing.JFrame;
    import java.io.FileReader;
    import java.util.Scanner;
    import java.io.FileNotFoundException;
    import java.util.NoSuchElementException;

    public class DrawFrame
    {
     public static final int Width = 400;
     public static final int Height = 300;
     
     private JFrame frame;
     private DrawComponent component;
     
     public DrawFrame(String shape)
     {
      frame = new JFrame("Program04!!");
      component = new DrawComponent(shape);
     
      frame.setSize(Width,Height);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
      frame.add(component);
      frame.setVisible(true);
     }
     
     public void draw()
     {
      frame.setVisible(true);
     }
     
     public static void main(String[] args)
     {
      Scanner sc = new Scanner(System.in);
      boolean done = false;
     
      while(!done)
      {
       System.out.println("파일 이름을 입력하세요.");
       String filename = sc.next();
       try
       {
        Scanner fin = new Scanner(new FileReader(filename));  
        String shape = fin.next();
       
        if(shape.equals("원") || shape.equals("사각형"))
        {
         DrawFrame df = new DrawFrame(shape);
         df.draw();
         done = true;
        }
       }
       /*
        * FileReader의 생성자가 던지는 예외
        */
       catch(FileNotFoundException exception)
       {
        System.out.println("파일을 찾을 수 없습니다.");
        exception.printStackTrace();
       }
       /*
        * Scanner의 next()메소드가 던지는 예외
        */
       catch(IllegalStateException exception)
       {
        System.out.println("파일에서 읽을 수 없습니다.");
        exception.printStackTrace();
       }
       /*
        * Scanner의 next()메소드가 던지는 예외
        */
       catch(NoSuchElementException exception)
       {
        System.out.println("스트링 타입의 데이터를 읽을 수 없습니다.");
        exception.printStackTrace();
       }
      }
     }
    }

    package p1;

    import java.io.FileReader;
    import java.io.IOException;

    public class FileCounter {
        public FileCounter()
        {
           chars = 0;
           words = 0;
           lines = 0;
        }

        public void read(FileReader reader) throws IOException
        {
           boolean space = true;
           boolean more = true;
          
           while (more)
           { 
              int ic = reader.read();
              if (ic == -1) more = false;
              else
              { 
                 chars++;
                 char c = (char) ic;
                 if (c == '\n')
                 {
                    lines++;
                    space = true;
                 }
                 else if (c == ' ' || c == '\r')
                    space = true;
                 else
                 { 
                    if (space)
                       words++;   // 공백문자 다음의 비공백 문자를 만날때마다 증가
                    space = false;
                 }
              }
              lines++;
           }
        }

        public int getCharacterCount()
        {
           return chars;
        }
     
        public int getWordCount()
        {
           return words;
        }
     
        public int getLineCount()  
        {
           return lines;
        }   
          
        private int chars;
        private int words;
        private int lines;
    }

    package p1;

    import java.io.FileReader;
    import java.io.IOException;
    import javax.swing.JFileChooser;
    import java.util.Scanner;
    import java.io.File;

    public class ExP16_1 {
     public static void main(String[] args) {
           Scanner in = new Scanner(System.in);
           String input = "";
          
           JFileChooser chooser = new JFileChooser();
           FileReader fin = null;
          
           try
           { 
              boolean done = false;
              while (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
              {
              File selectedFile = chooser.getSelectedFile();
              fin = new FileReader(selectedFile);

                    FileCounter fileCounter = new FileCounter();
                    fileCounter.read(fin);         
                    System.out.println(
                         fileCounter.getCharacterCount() + " chars, "
                         + fileCounter.getWordCount() + " words, "
                         + fileCounter.getLineCount() + " lines");
                    fin.close();
                
              }
           }
           catch (IOException e)
           { 
              e.printStackTrace();
           }
     }
    }

    package p2;

    import java.io.IOException;
    import java.io.FileReader;
    import java.io.FileWriter;

    public class CatFiles {
     public static void main(String[] args) {
           if (args.length < 2)
           { 
              System.out.println("Usage: CatFiles sourcefile1 sourcefile2 . . . targetfile");
              return;
           }

           try
           {
              FileWriter out = new FileWriter(args[args.length - 1]);
              for (int i = 0; i < args.length - 1; i++)
              {
                 FileReader in = new FileReader(args[i]);
                 boolean more = true;
                 while (more)
                 {
                    int ic = in.read();
                    if (ic == -1)
                       more = false;
                    else
                       out.write(ic);
                 }
                 in.close();
              }
              out.close();
           }
           catch (IOException e)
           {
              e.printStackTrace();
           }
      }
    }

    package p3;

    import java.awt.Rectangle;
    import java.io.Serializable;

    public class Squares extends Rectangle implements Serializable{
     public Squares(int x, int y, int w, int h){
      super(x, y, w, h);
     }
    }

    package p3;

    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import javax.swing.JComponent;
    import java.util.ArrayList;

    public class SquareComponent extends JComponent

     public SquareComponent() {
      sList = new ArrayList<Squares>();
     }
       public void paintComponent(Graphics g)
       { 
          super.paintComponent(g);
          Graphics2D g2 = (Graphics2D) g;
          for (Rectangle r : sList)
           g2.draw(r);
       }
       public void makeRectangle(int x, int y)
       {
       sList.add(new Squares(x, y, BOX_WIDTH, BOX_HEIGHT));
          repaint();     
       }
       public ArrayList<Squares> getList(){
        return sList;
       }
       public void setList(ArrayList<Squares> a){
        sList = a;
       }
     
       private ArrayList<Squares> sList;
       private static final int BOX_WIDTH = 20;
       private static final int BOX_HEIGHT = 20;
    }

    package p3;

    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;
    import java.util.ArrayList;

    public class SquareFrame extends JFrame{
     public SquareFrame(){
      squaresDraw();
      chooser = new JFileChooser();
      JMenuBar menuBar = new JMenuBar();
      setJMenuBar(menuBar);
      menuBar.add(createFileMenu());
      setSize(FRAME_WIDTH, FRAME_HEIGHT);
     }
     
     public JMenu createFileMenu(){
      JMenu menu = new JMenu("File");
      menu.add(openFileItem());
      menu.add(saveFileItem());
      menu.add(createFileExitItem());
      return menu;
     }
     
     public JMenuItem createFileExitItem(){
      JMenuItem item = new JMenuItem("Exit");
      class MenuItemListener implements ActionListener{
       public void actionPerformed(ActionEvent event){
        System.exit(0);
       }
      }
      ActionListener listener = new MenuItemListener();
      item.addActionListener(listener);
      return item;
     }
     
     public JMenuItem openFileItem(){    
         JMenuItem item = new JMenuItem("Open");
      class MenuItemListener implements ActionListener{
       public void actionPerformed(ActionEvent event){
        try{
            if(chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
            {
             File selectedFile = chooser.getSelectedFile();
             ObjectInputStream in = new ObjectInputStream(new FileInputStream(selectedFile));
            
             component.setList((ArrayList<Squares>) in.readObject());
             component.repaint();
             in.close();
            }
         }
            catch (Exception e)
            { 
               e.printStackTrace();
            }
       }
      }
      ActionListener listener = new MenuItemListener();
      item.addActionListener(listener);
         return item;
     }
     
     public JMenuItem saveFileItem(){    
         JMenuItem item = new JMenuItem("Save");
      class MenuItemListener implements ActionListener{
       public void actionPerformed(ActionEvent event){
        try{
            if(chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION)
            {
             File selectedFile = chooser.getSelectedFile();
                 
             ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(selectedFile));
             out.writeObject(component.getList());
      
             out.close();
            }
        }
        catch (Exception e){ 
              e.printStackTrace();
        }
       }
      }
      ActionListener listener = new MenuItemListener();
      item.addActionListener(listener);
         return item;
     }
     
     public void squaresDraw(){
         // 그림을 그릴 콤포넌트 올리기
      component = new SquareComponent();
      add(component, BorderLayout.CENTER);
     
         class MousePressListener implements MouseListener
         { 
            public void mousePressed(MouseEvent event)
            { 
               int x = event.getX();
               int y = event.getY();
               component.makeRectangle(x, y);
            }
            public void mouseReleased(MouseEvent event) {}
            public void mouseClicked(MouseEvent event) {}
            public void mouseEntered(MouseEvent event) {}
            public void mouseExited(MouseEvent event) {}
         }

      MouseListener listener = new MousePressListener();
      component.addMouseListener(listener);
     }
     

     private JFileChooser chooser;
        private SquareComponent component;
     private static final int FRAME_WIDTH = 800;
     private static final int FRAME_HEIGHT = 600;
     
    }

    package p3;

    import javax.swing.JFrame;

    public class ST {
     public static void main(String[] args) {
      JFrame frame = new SquareFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
     }
    }

    package p1;

    import java.util.Date;

    public class GreetingR implements Runnable{
     public GreetingR(String a){
      greeting = a;
     }
     public void run(){
      try{
       for(int i=0; i<=REPET; i++){
        Date now = new Date();
        System.out.println(now + " " + greeting);
        Thread.sleep(DELAY);
       }
      }
      catch(InterruptedException exception){
       
      }
     }
     
     private String greeting;
     private static final int REPET = 10;
     private static final int DELAY = 1000;
    }

    package p1;

    import java.util.Date;

    public class GreetingRTester {
     public static void main(String[] args) {
      GreetingR r1 = new GreetingR("안녕");
      GreetingR r2 = new GreetingR("하이");
      GreetingR r3 = new GreetingR("어이");
      Thread t1 = new Thread(r1);
      Thread t2 = new Thread(r2);
      Thread t3 = new Thread(r3);
      t1.start();
      t2.start();
      t3.start();
     }
    }

    package p2;

    public class BankAccount {
     public BankAccount(){
      balance = 0;
     }
     public void deposit(double amount){
      System.out.print("Depositing " + amount);
      double newBalance = balance + amount;
      System.out.println(", new balance is " + newBalance);
      balance = newBalance;
     }
     public void withdraw(double amount){
      System.out.print("Withdrawing " + amount);
      double newBalance = balance - amount;
      System.out.println(", new balance is " + newBalance);
      balance = newBalance;
     }
     public double getBalance(){
      return balance;
     }
     private double balance;
    }

    package p2;

    public class DepositRunnable implements Runnable{
     public DepositRunnable(BankAccount anAccount, double anAmount, int aCount){
      account = anAccount;
      amount = anAmount;
      count = aCount;
     }
     public void run(){
      try{
       for(int i=1; i<=count; i++){
        account.deposit(amount);
        Thread.sleep(DELAY);
       }
      }
      catch(InterruptedException exception){}
     }
     private static final int DELAY = 1;
     private static BankAccount account;
     private double amount;
     private int count;
    }

    package p2;

    public class WithdrawRunnable implements Runnable{
     public WithdrawRunnable(BankAccount anAccount, double anAmount, int aCount){
      account = anAccount;
      amount = anAmount;
      count = aCount;
     }
     public void run(){
      try{
       for(int i=1; i<=count; i++){
        account.withdraw(amount);
        Thread.sleep(DELAY);
       }
      }
      catch(InterruptedException exception) {}
     }
     private static final int DELAY = 1;
     private BankAccount account;
     private double amount;
     private int count;
    }

    package p2;

    public class BankAccountThreadTester {
     public static void main(String[] args) {
      BankAccount account = new BankAccount();
      final double AMOUNT = 100;
      final int REPET = 1000;
     
      DepositRunnable d = new DepositRunnable(account, AMOUNT, REPET);
      WithdrawRunnable w = new WithdrawRunnable(account, AMOUNT, REPET);
     
      Thread t1 = new Thread(d);
      Thread t2 = new Thread(w);
     
      t1.start();
      t2.start();
     }
    }

    package p3;
    public class RunThreads implements Runnable {
        public void run() {
           for (int i = 0; i < 25; i ++) {
              String threadName = Thread.currentThread().getName();
              System.out.println(threadName + " is running");
           }
        }
    }

    package p3;

    public class RunThreadsTester {
       public static void main(String[] args) {
          RunThreads runner = new RunThreads();
          Thread alpha = new Thread(runner);
          Thread beta = new Thread(runner);
          alpha.setName("Alpha thread");
          beta.setName("Beta thread");
          alpha.start();
          beta.start();
       }
    }

    package p4;

    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;

    public class BankAccount {
     public BankAccount(){
      balance = 0;
      balanceChangeLock = new ReentrantLock();
      sufiicientFundsCondition = balanceChangeLock.newCondition();
     }
     public void deposit(double amount){
      balanceChangeLock.lock();
      try{
       System.out.print("Depositing " + amount);
       double newBalance = balance + amount;
       System.out.println(", new balance is " + newBalance);
             String threadName = Thread.currentThread().getName();
             System.out.println(threadName + " is running");
       balance = newBalance;
       sufiicientFundsCondition.signalAll();
      }
      finally{
       balanceChangeLock.unlock();
      }

     }
     public void withdraw(double amount) throws InterruptedException{
      balanceChangeLock.lock();
      try{
       while(balance < amount)
        sufiicientFundsCondition.await();
       System.out.print("Withdrawing " + amount);
       double newBalance = balance - amount;
       System.out.println(", new balance is " + newBalance);
             String threadName = Thread.currentThread().getName();
             System.out.println(threadName + " is running");
       balance = newBalance;
      }
      finally{
       balanceChangeLock.unlock();
      }
     }
     public double getBalance(){
      return balance;
     }
     private double balance;
     private Lock balanceChangeLock;
     private Condition sufiicientFundsCondition;
    }

    package p4;

    public class DepositRunnable implements Runnable{
     public DepositRunnable(BankAccount anAccount, double anAmount, int aCount){
      account = anAccount;
      amount = anAmount;
      count = aCount;
     }
     public void run(){
      try{
       for(int i=1; i<=count; i++){
        account.deposit(amount);
        Thread.sleep(DELAY);
       }
      }
      catch(InterruptedException exception){}
     }
     private static final int DELAY = 1;
     private static BankAccount account;
     private double amount;
     private int count;
    }

    package p4;

    public class WithdrawRunnable implements Runnable{
     public WithdrawRunnable(BankAccount anAccount, double anAmount, int aCount){
      account = anAccount;
      amount = anAmount;
      count = aCount;
     }
     public void run(){
      try{
       for(int i=1; i<=count; i++){
        account.withdraw(amount);
        Thread.sleep(DELAY);
       }
      }
      catch(InterruptedException exception) {}
     }
     private static final int DELAY = 1;
     private BankAccount account;
     private double amount;
     private int count;
    }

    package p4;

    public class BankAccountThreadTester {
     public static void main(String[] args) {
      BankAccount account = new BankAccount();
      final double AMOUNT = 100;
      final int REPET = 1000;
     
      DepositRunnable d1 = new DepositRunnable(account, AMOUNT, REPET);
      WithdrawRunnable w1 = new WithdrawRunnable(account, AMOUNT, REPET);
      DepositRunnable d2 = new DepositRunnable(account, AMOUNT, REPET);
      WithdrawRunnable w2 = new WithdrawRunnable(account, AMOUNT, REPET);
     
      Thread t1 = new Thread(d1);
      Thread t2 = new Thread(w1);
      Thread t3 = new Thread(d2);
      Thread t4 = new Thread(w2);
     
      t1.start();
      t2.start();
      t3.start();
      t4.start();
     }

    }

    package p5;

    import java.awt.Graphics2D;
    import java.awt.Color;
    import java.awt.geom.Ellipse2D;
    import javax.swing.JPanel;
    import java.util.Random;

    public class Ball1
    {
     public Ball1(JPanel aPanel)
     {
      panel = aPanel;
      generator = new Random();
      dx = 0; // 공의 x 방향 이동 속력 (sleep 시간 당 픽셀)
      dy = generator.nextInt(MAX_DY) + 1; // y 방향 이동 속력
      color = Color.RED;
      yTop = 0;  // 공의 출발 위치 y 좌표
      xLeft = generator.nextInt(panel.getWidth() - DIAMETER);  // 공의 출발 위치 x 좌표
     }
     
     public void move()
     {
      // 공 이동
      xLeft += dx;
      yTop += dy;
     
      // 만약 벽에 닿았거나 지나쳤으면 반사시킴
      if (xLeft <= 0)  // 왼쪽 벽에 닿은 경우
      {
       dx = -1 * dx;
       xLeft = -xLeft;
      }
      if (xLeft + DIAMETER >= panel.getWidth())  // 오른쪽 벽에 닿은 경우
      {
       dx = -1 * dx;
       xLeft = 2 * (panel.getWidth() - DIAMETER) - xLeft;
      }
     
      if (yTop <= 0) // 위 벽에 닿은 경우
      {
       dy = -1 * dy;
       yTop = -yTop;
      }
      if (yTop + DIAMETER >= panel.getHeight()) //아래 벽에 닿은 경우
      {
       dy = -1 * dy;
       yTop = 2 * (panel.getHeight() - DIAMETER) - yTop;
      }
     
     }
     
     public void draw(Graphics2D g2)
     {
      Ellipse2D.Double ball
      = new Ellipse2D.Double(xLeft, yTop, DIAMETER, DIAMETER);
      g2.setColor(color);
      g2.draw(ball);
     }
     
     public void animate() throws InterruptedException
     {
      while (true)
      {
       move();
       panel.repaint();  // 패널을 다시 그림 (공 전체가 다시 그려짐)
       Thread.sleep(DELAY);
      }  // sleep 시간마다 쓰레드 수 만큼 그림이 새로 그려짐
     } 
     
     public static final int DIAMETER = 20; // 공 직경
     public static final int MAX_DX = 10;   // x 방향 최대 속력
     public static final int MAX_DY = 10;   // y 방향 최대 속력
     public static final int DELAY = 50;    // sleep 주기
     
     private JPanel panel;
     private int dx;  // x 방향 속도, DELAY당 이동 거리
     private int dy;  // y 방향 속도, DELAY당 이동 거리
     private Color color;
     private Random generator;
     private int xLeft;  // 공의 위치
     private int yTop;   // 공의 위치
    }

    package p5;

    import javax.swing.JPanel;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.util.ArrayList;

    public class BallPanel1 extends JPanel
    {
     public BallPanel1()
     {
      setSize(500, 300);
      balls = new ArrayList<Ball1>();
     }
     
     public void paintComponent(Graphics g)
     { 
      super.paintComponent(g);
      Graphics2D g2 = (Graphics2D) g;
      for (Ball1 ball : balls)
       ball.draw(g2);
     }
     
     public void addBall(Ball1 ball)
     {
      balls.add(ball);  // arraylist에 ball을 넣음
      class AnimationRunnable implements Runnable
      {
       public AnimationRunnable(Ball1 ball)
       {
        this.ball = ball;
       }
       
       public void run()
       {
        try
        {
         ball.animate();
        }
        catch (InterruptedException exception)
        {  // Interrupt가  걸리면 run 메소드가 종료되고 쓰레드도 종료
        }
       }
       private Ball1 ball;
      }
     
      // Ball 하나 하나마다 애니메이션을 위한 쓰레드를 실행
      Runnable r = new AnimationRunnable(ball);
      Thread t = new Thread(r);
      t.start();  // 각 쓰레드는 자신이 맡은 공에 animnate를 호출
         // animate 메소드는 무한 루프를 도는 메소드임
     }
     
     private ArrayList<Ball1> balls;
    }

    package p5;

    import javax.swing.JFrame;

    public class BallViewer1
    {
       public static void main(String[] args)
       {
          JFrame frame = new JFrame();

          final int FRAME_WIDTH = 500;
          final int FRAME_HEIGHT = 300;

          frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

          BallPanel1 panel = new BallPanel1();
          frame.add(panel);
          panel.addBall(new Ball1(panel));
          panel.addBall(new Ball1(panel));
          panel.addBall(new Ball1(panel));

          frame.setVisible(true);
       }
    }

    package p6;

    import java.awt.Graphics2D;
    import java.awt.Color;
    import java.awt.geom.Ellipse2D;
    import javax.swing.JComponent;
    import java.util.Random;

    public class Ball
    {

       public Ball(JComponent aComponent)
       {
          component = aComponent;
          generator = new Random();
          dx = generator.nextInt(MAX_DX) + 1;
          dy = generator.nextInt(MAX_DY) + 1;
          color = randomColor();
          yTop = generator.nextInt(component.getHeight() - DIAMETER);
          xLeft = generator.nextInt(component.getWidth() - DIAMETER);
       }
      
       private Color randomColor()
       {
          int c = generator.nextInt(9);
          switch(c)
          {
             case 0: return Color.BLACK;
             case 1: return Color.BLUE;
             case 2: return Color.CYAN;
             case 3: return Color.GREEN;
             case 4: return Color.MAGENTA;
             case 5: return Color.ORANGE;
             case 6: return Color.PINK;
             case 7: return Color.RED;
             case 8: return Color.YELLOW;
          }
          return Color.RED;
       }

       /**
          Moves the ball.
       */
       public void move()
       {
          xLeft += dx;
          yTop += dy;
          if (xLeft <= 0)
          {
           dx = -1 * dx;
           xLeft = -xLeft;
          }
          if (xLeft + DIAMETER >= component.getWidth())
          {
           dx = -1 * dx;
           xLeft = 2 * (component.getWidth() - DIAMETER) - xLeft;
          }

          if (yTop <= 0)
          {
           dy = -1 * dy;
           yTop = -yTop;
          }
          if (yTop + DIAMETER >= component.getHeight())
          {
           dy = -1 * dy;
           yTop = 2 * (component.getHeight() - DIAMETER) - yTop;
          }

       }

       /**
          Draws the ball.
          @param g2 the graphics context
       */
       public void draw(Graphics2D g2)
       {
          Ellipse2D.Double ball
                = new Ellipse2D.Double(xLeft, yTop, DIAMETER, DIAMETER);
          g2.setColor(color);
          g2.draw(ball);
       }
      
       public void animate() throws InterruptedException
       {
          while (true)
          {
             move();
             component.repaint();
             Thread.sleep(DELAY);
          }
       }
      
       public static final int DIAMETER = 20;
       public static final int MAX_DX = 10;
       public static final int MAX_DY = 10;
       public static final int DELAY = 50;
      
       private JComponent component;
       private int dx;  // x 방향 속도, DELAY당 이동 거리
       private int dy;  // y 방향 속도, DELAY당 이동 거리
       private Color color;
       private Random generator;
       private int xLeft;
       private int yTop;
    }

    package p6;

    import javax.swing.JComponent;
    import java.util.ArrayList;
    import java.awt.Graphics;
    import java.awt.Graphics2D;

    public class BallComponent extends JComponent

       public BallComponent()
       {
          balls = new ArrayList<Ball>();
       }
      
       public void paintComponent(Graphics g)
       { 
          Graphics2D g2 = (Graphics2D) g;
          for (Ball ball : balls)
             ball.draw(g2);
       }
      
       public void addBall(Ball ball)
       {
          balls.add(ball);
          class AnimationRunnable implements Runnable
          {
             public AnimationRunnable(Ball ball)
             {
                this.ball = ball;
             }

             public void run()
             {
                try
                {
                   ball.animate();
                }
                catch (InterruptedException exception)
                {
                }
             }
             private Ball ball;
          }

          // Ball 하나 하나마다 애니메이션을 위한 쓰레드를 실행
          Runnable r = new AnimationRunnable(ball);
          Thread t = new Thread(r);
          t.start();
       }
      
       private ArrayList<Ball> balls;
    }

    package p6;

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JComponent;
    import javax.swing.JButton;
    import javax.swing.JPanel;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.util.ArrayList;
    import java.awt.BorderLayout;

    public class BallPanel extends JPanel
    {
       public BallPanel()
       {
          ballComponent = new BallComponent();
          setLayout(new BorderLayout());
          add(ballComponent, BorderLayout.CENTER);
          createButton();
       }
       private void createButton()
       {
          class ButtonListener implements ActionListener
          {
             public ButtonListener(JComponent aComponent)
             {
                component = aComponent;
             }
            
             public void actionPerformed(ActionEvent event)
             {
                // 버튼이 눌릴 때마다 Ball 객체를 하나 구성하여 ballComponent에 추가함
                ballComponent.addBall(new Ball(component));
             }
            
             JComponent component;
          }

          JButton button = new JButton("Add ball");
          ActionListener listener = new ButtonListener(ballComponent);
          button.addActionListener(listener);
          add(button, BorderLayout.SOUTH);
       }
      
       private BallComponent ballComponent;
    }

    package p6;

    import javax.swing.JFrame;

    public class BallViewer
    {
       public static void main(String[] args)
       {
          JFrame frame = new JFrame();

          final int FRAME_WIDTH = 500;
          final int FRAME_HEIGHT = 300;

          frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

          BallPanel panel = new BallPanel();
          frame.add(panel);

          frame.setVisible(true);
       }
    }

     
Designed by Tistory.