package ss;

import javax.sound.midi.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;

public class MiniMusicPlayer3{
 static JFrame f = new JFrame("My First Music Video");
 static MyDrawPanel ml;
 public static void main(String[] args){
  MiniMusicPlayer3 mini = new MiniMusicPlayer3();
  mini.go();
 }
 public void setUpGui(){
  ml = new MyDrawPanel();
  f.setContentPane(ml);
  f.setBounds(30,30,300,300);
  f.setVisible(true);
 }
 public void go(){
  setUpGui();
  try{
   Sequencer sequencer = MidiSystem.getSequencer();
   sequencer.open();
   sequencer.addControllerEventListener(ml,new int[] {127});
   Sequence seq = new Sequence(Sequence.PPQ,4);
   Track track = seq.createTrack();
   
   int r = 0;
   for(int i=0;i<60;i+=4){
    r = (int)((Math.random()*50)+1);
    track.add(makeEvent(144,1,r,100,i));
    track.add(makeEvent(176,1,127,0,i));
    track.add(makeEvent(128,1,r,100,i+2));
   }
   sequencer.setSequence(seq);
   sequencer.start();
   sequencer.setTempoInBPM(120);
   
  }catch(Exception ex){ex.printStackTrace();}
 }
 public MidiEvent makeEvent(int comd, int chan, int one, int two, int tick){
  MidiEvent event = null;
  try{
   ShortMessage a = new ShortMessage();
   a.setMessage(comd,chan,one,two);
   event = new MidiEvent(a,tick);
  }catch(Exception ex){ex.printStackTrace();}
  return event;
 }
 class MyDrawPanel extends JPanel implements ControllerEventListener{
  boolean msg = false;
  public void controlChange(ShortMessage event){
   msg = true;
   repaint();
  }
  public void paintComponent(Graphics g){
   if(msg){
    Graphics2D g2 = (Graphics2D) g;
    int r = (int)(Math.random()*250);
    int gr = (int)(Math.random()*250);
    int b = (int)(Math.random()*250);
    
    g.setColor(new Color(r,gr,b));
    int height = (int)((Math.random()*120)+10);
    int width = (int)((Math.random()*120)+10);
    int x = (int)((Math.random()*40)+10);
    int y = (int)((Math.random()*40)+10);
    g.fillRect(x,y, width, height);
    msg=false;
   }
  }

 }

}

Posted by Triton
,
Iterator, Enumeration은 둘다 모두 자바에서 제공하는 컬렉션에 대해 각 컬렉션의 항목들을 순차적으로 접근하는데 사용한다.

차 이점은 Enumeration의 경우 자바의 초기버젼에서 개발되었습니다. 자바는 jdk1.2, 즉 자바2에서 많은 변화가 생겼는데, 그중에 하나가 컬렉션 클래스(Vector, List, Map, Set...)들을 컬렉션프레임웍 이라는것으로 관리하는것이다.

이때, 컬렉션프레임웍에서는 Iterator라고 해서, Enumeration의 기능을 확장해서, Collection인터페이스를 상속받은 모든 컬렉션(List, Set, Vector.)에서 Enumeration을 사용가능하게 하였다.

정 리하면, Enumeration는 자바초기버젼에서 제공되는것으로 Hashtable, Vector 에서 사용가능하다. Iterator는 jdk1.2에서 제공되는 것으로 Collection인터페이스를 구현상속한 모든 컬렉션 클래스에서 사용가능하다.

덧붙여서, Iterator는 remove()라는 메소드가 존재하여서, 원본 컬렉션의 항목을 삭제할수 있습니다.

예를 들면,

//Enumeration 사용법

Vector v = new Vector();
...

Enumeration e = v.elements();
while(e.hasMoreElements())
{
//항목들을 모두 콘솔창에 출력합니다.
System.out.println((String)e.nextElement());
}


//Iterator 사용법

HashSet set = new HashSet();
...

Iterator iter = set.iterator();
while (iter.hasNext()) {
i++;
//항목들을 모두 콘솔창에 출력합니다.
System.out.println(i + ":" + iter.next());
}
Posted by Triton
,

[ Enumeration ]

Computer/JAVA 2008. 11. 15. 12:52



java.util 
Interface Enumeration

1. 사용법

------------------------------------------------------------
for ( Enumeration e = v.elements ( ) ; e.hasMoreElements ( ); ) 
{
System.out.println ( e.nextElement ( ) );
}
------------------------------------------------------------
Posted by Triton
,

[ 벡터 Vector ]

Computer/JAVA 2008. 11. 15. 12:51


가변적, 이종간 객체 배열
크기를 알수 없는 데이타의 처리에 유용하다.

0. 자주 사용되는 메소드
-------------------------------------------------------------

Vector ( ):  초기용량이 10인 빈벡터의 생성. 초과시마다 두배 증가.

add ( Object object ):  주어진 객체를 추가합니다.   


Object get ( int index ): 주어진 위치에 있는 객체를 얻습니다.      


int size (): 벡터의 크기를 얻습니다.  


trimToSize ():  들어있는 데이타 크기 만큼으로 용량을 감소 시킨다.


void set ( int index, Object object ): 주어진 위치에 값을 덮어써 넣는다.  


void insertElementAt ( Object object, int index ): 주어진 위치에 객체를 삽입합니다. 밀려 늘어난다.


void removeElementAt ( int index ): 주어진 위치에 있는 객체를 제거합니다. 당겨 줄어든다.


Object [] toArray ( ): 배열로 전환한다.

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

1. 사용법
------------------------------------------------------------------------

Vector vec = new Vector ( );//기본 용량 10개, 초과시 두배씩 증가


Vector vec = new Vector ( 100 );//초기 용량 1000개, 초과시 100개씩 증가


Vector vec = new Vector ( 100, 10 );//초기 용량 100개, 초과시 10개씩 증가

vec.add ( "안녕" ); //객체 추가


vec.add ( 2, "안녕" ); //3번째 위치에 객체 추가하고 뒤로 한칸씩 밀린다.


vec.addElement ( "안녕" ); 객체 추가

Object object = (Object) vec.get ( 2 ); //3번째 객체 불러오기


Object object = (Object) vec.elementAt ( 2 ); //3번째 객체 불러오기


List list = vec.subList ( 2, 5 ); //1부터 4까지의 요소 추출한다.

vec.set ( 2, "안녕" ); //3뻔째 위치의 객체를 주어진 객체로 대체한다.

int max = vec.capacity ( ); //용량 구하기(데이타를 넣을 수 있는 갯수)


int size = vec.size ( ); //크기 구하기(데이타가 들어있는 갯수)


int free = vec.capacity ( ) - vec.size ( ); //비어 있는 용량 구하기


vec.ensureCapacity ( 150 ); //용량이 150보다 작으면 150으로 증가, 아니면 무변화.


vec.setSize ( 50 ); //크기를 50으로 설정. 나머지는 null로 채워진다.


vec.trimToSize ( ); //용량을 현재 크기에 맞도록 압축한다.


vec.remove ( 2 ); //3번째 객체를 삭제한다.


vec.removeAll ( vec.subList ( 2, 5 ) ); //1부터 4까지의 요소를 삭제한다.


vec.clear ( ); //모든 요소를 삭제한다.

//불러오기 1 (컬렉션)
Iterator iter = vec.iterator ( );


while ( iter.hasNext ( ) )
  System.out.println ( (String) iter.next ( ) );

//불러오기 2 (벡터 사이즈)
for ( int i = 0; i < vec.size ( ); i++ )
  System.out.println ( (String) vec.get ( i ) );

//불러오기 3 (배열)
Object [] aObject = vData.toArray ( );
for ( int i = 0; i < aObject.length; i++ )
  System.out.println ( (String) aObject [i] );

//불러오기 4 (배열)
String [] aObject = new String [ vec.size ( ) ];
aObject = vec.toArray ( aObject );
for ( int i = 0; i < aObject.length; i++ )
  System.out.println ( (String) aObject [i] );


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

2. 예제
-------------------------------------------------------------
import java.util.*;

   Vector vec = new Vector ();

     vec.add (new Integer (1));
     vec.add (new Integer (2));
     vec.add (new Integer (3));

   int sum = 0;
        for ( int i = 0; i < vec.size (); i++ )
            sum += ((Integer) vec.get (i)).intValue ();
   
   int value = sum;   // 6
-------------------------------------------------------------
벡터에 들어 갈 때 object로 자동변환 되어 들어가므로 빼낼 때는 적합한 형으로 변환 시켜주어야 한다.

-------------------------------------------------------------
private void Body(HttpServletRequest req, HttpServletResponse res) {
  String code = "";
  String intro = "";
  int type = 0;
  
  Vector v = Detail(req);
  Iterator i = v.iterator();

  Integer a = (Integer)i.next();
  type = a.intValue();
  code = (String)i.next();
  intro = (String)i.next();
}     

private Vector Detail(HttpServletRequest req) {
  int type = 0;
  String code = "";
  String intro = "";
  
  //--------중간생략

  Vector v = new Vector();
  v.addElement(new Integer(type));
  v.addElement(new String(code));
  v.addElement(new String(intro));
  return v;
}
-------------------------------------------------------------

3. 클래스/메소드
-------------------------------------------------------------


void add(int index, Object element): 객체를 주어진 위치에 추가합니다.  


boolean add(Object o): 객체를 추가합니다.   


boolean addAll(Collection c): 주어진 콜렉션에 있는 모든 객체를 추가합니다.


boolean addAll(int index, Collection c): 주어진 콜렉션에 있는 모든 객체를 주어진 위치에 추가합니다.

void addElement(Object obj): 주어진 객체를 추가합니다.

int capacity(): 이객체의 용량을 얻습니다. 

void clear(): 모든 객체를 제거합니다.  

boolean contains(Object elem): 주어진 객체를 포함하고 있는지를 얻습니다.  

boolean containsAll(Collection c): 주어진 콜렉션 내의 객체들을 포함하고 있는지를 얻습니다. 


void copyInto(Object[] anArray):  

Object elementAt(int index): 주어진 위치에 있는 객체를 얻습니다.  

Enumeration elements(): 이 벡터에 대한 Enumeration 객체를 얻습니다.

void ensureCapacity(int minCapacity): 용량을 재설정합니다.  

Object firstElement(): 첫 번째 객체를 얻습니다.   

Object get(int index): 주어진 위치에 있는 객체를 얻습니다.  

int indexOf(Object elem): 주어진 객체의 위치를 얻습니다.  

int indexOf(Object elem, int index): 주어진 위치에서부터 시작하여 주어진 객체가 처음 나오는 위치를 얻습니다.


void insertElementAt(Object obj, int index): 주어진 위치에 객체를 삽입합니다.           

boolean isEmpty(): 비어있는지를 얻습니다.      

Object lastElement(): 마지막 객체를 얻습니다.  

int lastIndexOf(Object elem): 주어진 객체의 마지막 위치를 얻습니다.  

int lastIndexOf(Object elem, int index): 주어진 위치부터 마지막으로 나오는 객체의 위치를 얻습니다.

Object remove(int index): 주어진 위치의 객체를 제거합니다.  

boolean remove(Object o): 주어진 객체를 제거합니다.   

boolean removeAll(Collection c): 콜렉션에 있는 모든 객체를 제거합니다.  

void removeAllElements(): 모든 객체를 제거합니다. 

boolean removeElement(Object obj): 주어진 객체를 제거합니다.  

void removeElementAt(int index): 주어진 위치에 있는 객체를 제거합니다.  

boolean retainAll(Collection c): 콜렌션에 있는 객체들을 보존합니다.   

Object set(int index, Object element): 주어진 위치의 객체를 대체합니다. 

void setElementAt(Object obj, int index): 주어진 위치의 객체를 설정합니다.  

void setSize(int newSize): 벡터의 크기를 설정합니다.  

int size(): 벡터의 크기를 얻습니다. 


List subList(int fromIndex, int toIndex): 주어진 위치 사이의 리스트를 얻습니다.     

Object[] toArray(): 벡터를 객체 배열로 얻습니다.   


Object[] toArray(Object[] a): 벡터를 구어진 객체 배열에 저장합니다.  
Posted by Triton
,


키와 값의 쌍으로 이루어진 객체. 객체로 객체를 인덱스하는 배열.

1. 사용법

  import java.io.*;
  import java.util.*;
  
  // 해쉬테이블에 스트링 객체 넣기.
  Hashtable hash = new Hashtable ( );
  hash.put ( "kim", new Integer ( 80 ) );
  hash.put ( "lee", "jongwoo" );
  
  // 해쉬테이블에 스트링 배열 넣기
  String Acc [] = { "ajdjld", "sjdsjkd" };
  HashTable hash = new HashTable ( );
  hash.put ( "Acc", Acc );
  
  //읽기1
  int value = (Integer) hash.get ( "kim" );
  String name = (String) hash.get ( "lee" );
  
  //읽기2
  HttpSession session = req.getSession ( );
  
  Enumeration e = hash.keys ( );
  String key;
  while ( e.hasMoreElements ( ) ) 
  {
    key = (String) e.nextElement ( );
    session.putValue ( key, (String) hash.get ( key ) );
  }

2. 함수

  void clear():           해시테이블의 모든 원소를 제거합니다.

  boolean contains(Object value):   주어진 값을 포함하고 있는지를 얻습니다.


  boolean containsKey(Object key):  주어진 키를 포함하고 있는지를 얻습니다.


  boolean containsValue(Object value): 주어진 값 포함하고 있는지를 얻습니다.


  Enumeration elements():       원소에 대한 Enumeration 객체를 얻습니다.


  Object get(Object key):       주어진 키에 해당하는 값을 얻습니다.


  boolean isEmpty():        해시테이블이 비어있는 지를 얻습니다.


  Enumeration keys():         키들에 대한 Enumeration 객체를 얻습니다.


  Object put(Object key, Object value): 주어진 키를 이용하여 값을 저장합니다.


  Object remove(Object key):    주어진 키에 해당하는 원소를 제거합니다.


  int size():             해시테이블의 크기를 얻습니다.


  Collection values():        해시테이블에 포함되어 있는 값들에 대한 콜렉션 객체를 얻습니다.
Posted by Triton
,

InetAddress 클래스는 자바 플랫폼이 처음 출시된 이래로 줄곧 사용되어 왔으며, 이 클래스의 역할은 인터넷 프로토콜(IP) 주소를 통해 호스트의 ID를 알려주는 것이다. 다시 말해서, 가령 yahoo.com 같은 이름을 입력하면 InetAddress 클래스의 도움으로 그 IP 주소를 알아낼 수 있다.

InetAddress 클래스 디자인은 다소 기묘해 보일 수도 있다. 클래스에는 static 선언만 있고 public 생성자가 없으며, 인스턴스는 불변, 즉 일단 클래스의 인스턴스를 가지면 변경할 수 없다. 하지만 그 디자인은 자바 보안의 목적을 위한 것으로서 사용자는 검색 간의 결과를 변경할 수 없다.

1. InetAddress.getLocalHost()
    - 현재 프로그램이 진행 중인 컴퓨터의 로컬 주소를 되돌려 주는 메소드
2. InetAddress.getByName(String host)
    - 호스트명이 지정된 호스트의 IP 주소를 결정한다. 호스트명은 도메인네임이나 IP일 수 있다.
3. InetAddress.getByAddress(Byte[] addr)
    - 그대로의 IP 주소를 가지는 InetAddress 오브젝트를 돌려준다.
4. public Byte[] getAddress()
    - 주소를 Byte 배열로 얻는 메소드.
5. InetAddress.getAllByName(String host)
   - 해당 도메인과 매핑되어있는 모든 주소를 되돌려 주는 메소드.
6. InetAddress.getByAddress(String host, Byte[] addr)
   - 지정된 호스트명 및 IP 주소에 근거해 InetAddress 을 작성한다.

Posted by Triton
,

클래스 함수

Computer/JAVA 2008. 11. 1. 15:31
package hello;

public class Arith {
        private int result=0;
        public Arith add(int n1){ //클래스 명을 함수로 넘기면 재귀함수처럼 계속 클래스 내에서 호출한다.
            result+=n1;
            return this;
        }
        public Arith min(int n1){
            result-=n1;
            return this;
        }
        public Arith mult(int n1){
            result*=n1;
            return this;   
        }
        public Arith div(int n1){
            result/=n1;
            return this;
        }
}

public class Calculator {
    public static void main(String args[]){
            Arith calc = new Arith();

           
            System.out.println(calc.min(3).add(83)); //이렇게 계속 함수를 호출가능.
           
    }
}

Posted by Triton
,