<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>날아라숑카님의 이글루</title>
	<link>http://dduckjava.egloos.com</link>
	<description></description>
	<language>ko</language>
	<pubDate>Tue, 02 Dec 2008 13:28:17 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>날아라숑카님의 이글루</title>
		<url>http://md.egloos.com/img/samplelogo2.gif</url>
		<link>http://dduckjava.egloos.com</link>
		<width>80</width>
		<height>80</height>
		<description></description>
	</image>
  	<item>
		<title><![CDATA[ 2학기 12주차_2 ]]> </title>
		<link>http://dduckjava.egloos.com/1211511</link>
		<guid>http://dduckjava.egloos.com/1211511</guid>
		<description>
			<![CDATA[ 
  [프로젝트]<br><br>발표 자료를 완성했다.<br>흠..<br><br>발표자료를 만들면서 본건데 <br>프로그램이 헛점투성이다.<br><br>버그도 많고<br><br>버그는 잡는다고 잡았는데도<br>실행해서 이것저것 돌려보니까 아직도 남아있다.<br><br>대략 수정하자면..;;<br>PC번호 뜨는데서 오류가 있어서 한개씩 적게 뜨는문제가 있고,<br><br>ComPane의 프레임창을 띄어놓고 있으면 어쩔때는 클라이언트와 연동이 되지 않을때도 있다.<br><br><br>이것 말고도 수많은 버그들이 있겠지만 아직 발견한건 이거 바께 없다.<br>위의 버그들은 대충 수정해서<br>가지고 있는데...;;<br><br>ㅡㅡㅋ<br><br>사실 이런 것들은 크게 문제가 되지 않는 부분들이라 금방 수정이 가능하지만,<br>발견하기가 어렵다는데 문제가 있다.<br><br>프로그래밍 할때도 하나 만들고 실행해보면서 해서<br>버그율이 낮은 줄알았더니 그것도 아닌모양이네..;;<br><br>다음에 기회가 되서 또 프로그래밍 할일이 있으면 버그잡는 기간을 길게 가져야 할것 같다.<br><br>초반 구상의 100%를 하지 못해 아쉽지만..;;<br>그래도 나름 만족 ㅋ			 ]]> 
		</description>
		<category>실험프로젝트2학기</category>

		<comments>http://dduckjava.egloos.com/1211511#comments</comments>
		<pubDate>Tue, 02 Dec 2008 13:28:08 GMT</pubDate>
		<dc:creator>날아라숑카</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 2학기 12주차_1 ]]> </title>
		<link>http://dduckjava.egloos.com/1205555</link>
		<guid>http://dduckjava.egloos.com/1205555</guid>
		<description>
			<![CDATA[ 
  [프로젝트]<br><br>프로젝트가 완성이 되었다... 대망의 프로젝트 ㅋㅋㅋ<br>피씨방 관리 프로그램.(Java를 이용한 PC방 관리 프로그램)<br><br>초반의 의욕차서 이기능 저기능을 막 구상했지만..;;<br>몇개는 빼먹고 또 몇개는 추가 된것도 있다.<br><br>일단 회원 관리 부분이 빠졋다.<br>그리고 자프로그램 하드웨어 제어가 불가 함에 따라 그것도 제외...;;;<br><br>하지만, 관리자 부분을 세밀히 추가 시켰고,<br>관리자의 영업실적또한 파일로 저장 되겠금 만들었다.<br><br>사실 관리프로그램과 클라이언트 를 상호 연동시키고,<br>연결을 끊지 않은채 연결된 채널에 번호를 부여하여 <br>그 번호를 피씨 관리 번호로 만들어서 통신이 되도록 하려 했으나..;;<br><br>실패 했다 ㅋㅋㅋㅋ<br><br>이부분에 대해서는 인터넷과 책을 많이 찾아 봤는데..;;<br>어려운건지 잘 쓰이지 않아서 그런지 정보가 없었고,<br>사실 이방법에 대해서는 금요일에 확정짓고, 프로그램을 변경한것이라..<br>교수님께 질문도 못했다.<br>결국에는 맨처음 생각한대로 그냥<br>클라이언트에서 정보가 발생할때만 연결하여 서버에 넘기고,<br>연결을 끊는 간단한 방법을 채택하였다.<br><br>프로그램자체의 독창성은 없다.<br>하지만, 인터넷에서 어떠한 참고 자료도 구할수 없는 희귀(?)한 주제 였던지<br>피씨방 관리 프로그램소스가&nbsp; 공개되있거나 프로그래밍 해봤다는 사람을 <br>못봤다.<br><br>-관리프로그램(서버)<br>전체적인 구성은 3개의 탭으로 이루어진 패널(개별 클래스이다.)들이<br>메인 프레임에 add가 되어있다.(관리자, 영업화면,환경설정) <br><br>영업화면의 경우 Com배열 객체를 가지고 접속되는 클라이언트의<br>번호를 보고 요청되는 작업을 Com배열 객체에 번호에 맞게 작업하고,<br>정보를 저장한다. 인계사항을 설정할수도 있는데, 디비에 저장하고 가져오게된다.<br><br>관리자의 경우 암호를 입력후 설정 가능하며, 관리자 추가,선택, 관리시작, 암호변경<br>관리자정보수정등을 할수 있다.<br>관리자의 정보는 디비에 저장되며 가지고 온다.<br><br>환경설정의 경우 각 종목에 맞는 금액을 설정한다. 이역시 암호를 입력하여야 설정가능하다.<br><br>모든 패널들에서 이용하는 정보는 Work 클래스의 객체에 저장하고 공유한다.<br><br>네트워크 관련 부분은 쓰레드문으로 무한루프를 돌리기때문에 계속 확인하고<br>클라이언트의 요청을 실시간으로 확인하게 된다.<br><br>-클라이언트<br>매우 간단하게 구성을 하였고, <br>시작<br>관리자호출<br>관리자에게 메세지 보내기.<br><br>의 버튼이 존재하며 버튼을 클릭하면<br>버튼의 값을 읽어와서<br>그 버튼의 값에 맞는 정보를 String형 변수에 저장하여<br><br>서버에 넘겨준다.<br><br>예를들어서<br>시작을 누르면<br>"(PC번호)/!/!/(작업타입)/!/!/(넘겨줄 정보)"-&gt;"/!/!" 스플릿에서 구분자로 사용된다.<br>의 문자열이 String 형 변수에 저장이 된다.<br>여기서 PC번호는 맨처음 클라이언트 프로그램을 실행할때<br>설정하게 되며, 이번호는 서버에서 Com배열 객체 지정하는것에도 사용된다.<br>작업타입은 1은 시작 2는 호출 3은 메세지출력 이다.<br>서버는 이 작업타입을 확인하여, 그에 맞는 동작을 하게 된다.<br>예를 들어 작업타입이 1이면,<br>서버는 확인후, 다이얼로그 메세지로&nbsp;몇번컴퓨터가 사용을 시작합니다 라고 메세지를<br>출력한다.1,2의 경우 넘겨울 정보에 " " 이런식의 공란이 들어가게되고<br>3의 경우 넘겨줄 정보의 값을 화면에 다이얼로그로 표시한다.<br><br>&nbsp;<br>좀 아쉬운 부분들이 많지만..;; <br>그래도 동작하고 초기의 목표였던..<br>네트워크와 DB를 모두 사용한다는 것에 만족을 한다.<br><br>두개중 하나만 사용하면 되는거 였지만..;;<br>그래도 두개는 약간 하이라이트라고 할수 있는 부분인데<br>사용안하고 썩히긴 아까웟다.<br><br>그리고 채널연동이 힘들어서, 네트워크 부분을 뺄까까지 생각을 했으니.. ㅋㅋㅋ<br><br>프로그램의 딱 막히고 한 부분은 역시 네트워크이다.<br>DB야 뭐 명령어 몇개만 알면 쉬우니까..;;<br>네트워크를 다대일 통신으로 하는것이 머리속에서는 복잡하게 생각이 나는데<br>그게 정리가 안되고..;; ㅎㅎㅎ<br><br>아무튼 이것에 시간을 많이 뺏긴것도 사실이다.<br>뭐, 딱히 돌파구를 찾은게 아니라 살짝 비켜나가는 방법을 택해서 아쉬운 점도 크다.<br><br>소스의 경우 원래는 공개를 하지 않으려다가..;;<br>그래도 남겨둘수 있으니까 소스와 DB소스까지 공개하기로 한다.<br><br>DB는 MySQL을 사용하였으며, root 아이디로 비번은 dytc1234이다.<br><br>그럴일이 있지는 않겠지만..<br>혹시나 이 프로그램을 참고 하시려는 분들께<br>당부드리자면..;;<br><br>100%완벽한 프로그램이 아니라서 추천드리지 않습니다. ㅋㅋㅋㅋ<br><br>그리고 지나다니다 보시는분들..;;<br>네트워크에서 <br>다대일통신으로 서버는 접속을 끊지않고, 계속 유지하며, <br>그 접속된 채널에 대해 (정보를 저장할)&nbsp;객체를 할당해주는 방법은 어떤것이 있을까요?<br><br>-------------소스공개---------------<br><br>1.관리프로그램(서버) : <a href="http://pds13.egloos.com/pds/200812/01/46/Manage.java">Manage.java</a><br>2.클라이언트 : <a href="http://pds10.egloos.com/pds/200812/01/46/Client.java">Client.java</a><br>3.DB소스 : <a href="http://pds13.egloos.com/pds/200812/01/46/Manage.sql">Manage.sql</a><br><br>			 ]]> 
		</description>
		<category>실험프로젝트2학기</category>

		<comments>http://dduckjava.egloos.com/1205555#comments</comments>
		<pubDate>Mon, 01 Dec 2008 09:29:54 GMT</pubDate>
		<dc:creator>날아라숑카</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 2학기 11주차_2 ]]> </title>
		<link>http://dduckjava.egloos.com/1178608</link>
		<guid>http://dduckjava.egloos.com/1178608</guid>
		<description>
			<![CDATA[ 
  [프로젝트]<br><br>관리프로그램은 잠시 접어두고..;;<br>클라이언트 프로그램을 지환이형이랑 좀 했다.<br>지환이형이 조금 힘들어하길래..;; ㅎㅎㅎㅎ<br><br>지환이형이 화이트보드랑 비슷한 문맥으로 가고 있길래<br>거기서 조금 손을 보고 각 객체들 이동을 시키니까 일단 잘 작동된다.<br><br>클라이언트의 경우 크게 문제가 많지는 않다.<br><br>클래스의 경우<br><br>메인클래스 - 기본적인 프레임 구성.<br>Trans클래스 - 소켓을 만들고 데이터 입출력관리.<br>Com클래스 - 컴퓨터 사용시작시간 및 기타 정보 저장.<br>Work클래스 - 프레임 버튼의 작업상태 확인.&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;화이트 보드의 Pen과 비슷한..<br>MenuPane클래스 - 버튼을 관리하는 클래스.<br>MenuListener클래스 - 버튼의 액션을 관리.<br><br>가 있다.<br><br>완성률은 거의 한 80%정도..;;<br>조금 막히는 부분이 뭐냐 하면 <br><br>소켓에서 정보를 넘길때 인트형이나 이런 걸로는 넘길수는 없나 하는거다.<br>휴... <br><br>같은 객체를 사용한다는 것을 계속 염두해야 하기때문에<br>프로그래밍이 조금 복잡성도 있지만..<br>가독성 적인 부분에는 문제가 없다.<br><br>오히려 지금까지 한 프로그램 중에서도 가장 클래스 구별을 잘한듯..<br>물론 몇개의 아쉬운 부분도 있지만..;;<br><br>추가 할것이 현재 금액 정보가 더들어가면 된다.<br>조금 이쁘게 꾸미는것하고.<br><br>현재 금액 정보는 계속해서 쓰레드를 돌리는 형식으로<br>해야 할듯하다.<br><br>따로 캔버스를 만들어서 좀 보기좋게 꾸며서<br>계속 업데이트 되도록 만들어야 겠다.<br><br>다이얼로그에서 두개의 입력을 동시에 받을수 있는 건 업나요??<br>찾아보니까 한개의 입력은 있던데..;;<br>아무래도 시작전에 접속할 관리 컴퓨터의 주소를 포트 넘버까지 받으려면..;;<br>없으면 프레임을 하나 새로 만드는 수밖에 ㅠㅠ;<br>흠..;; 			 ]]> 
		</description>
		<category>실험프로젝트2학기</category>

		<comments>http://dduckjava.egloos.com/1178608#comments</comments>
		<pubDate>Tue, 25 Nov 2008 14:27:55 GMT</pubDate>
		<dc:creator>날아라숑카</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 2학기 11주차_1 ]]> </title>
		<link>http://dduckjava.egloos.com/1172656</link>
		<guid>http://dduckjava.egloos.com/1172656</guid>
		<description>
			<![CDATA[ 
  <p>오늘의 힌트.<br><br>네트웍 프로그램의 기본은 소켓이다. <br>소켓이 정의 하는것은 주소인데 <br>이것은 IP와 포트번호가 규정이 되어야한다.<br><br>수신과 송신 파트 모두 동일한 소켓정보를 알고 있어야한다.<br><br>○실습과제.13장..<br><br>서버부분.<br>import java.net.*;<br>import java.io.*;</p><p>class Server extends Thread{<br>&nbsp;<br>&nbsp;private Socket clnt; <br>&nbsp;private BufferedReader in;<br>&nbsp;private PrintWriter out;<br>&nbsp;private String str = null;<br>&nbsp;<br>&nbsp;public Server(Socket clntSocket){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;clnt = clntSocket;<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;in = new BufferedReader<br>&nbsp;&nbsp;&nbsp;&nbsp;(new InputStreamReader(clnt.getInputStream()));<br>&nbsp;&nbsp;&nbsp;out = new PrintWriter(clnt.getOutputStream(),true); <br>&nbsp;&nbsp;}catch(IOException e){<br>&nbsp;&nbsp;&nbsp;System.out.println(e.getMessage());<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;<br>&nbsp;public void run(){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;str = in.readLine();<br>&nbsp;&nbsp;&nbsp;System.out.println(str+"을 수신하였습니다.");<br>&nbsp;&nbsp;&nbsp;System.out.println("클라이언트로 재전송합니다.");<br>&nbsp;&nbsp;&nbsp;out.println(str);<br>&nbsp;&nbsp;&nbsp;clnt.close();<br>&nbsp;&nbsp;}catch(IOException e){<br>&nbsp;&nbsp;&nbsp;System.out.println(e.getMessage());<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>}</p><p><br>public class Study11122_1 {</p><p>&nbsp;static ServerSocket servSocket;<br>&nbsp;&nbsp;&nbsp; static Socket clntSocket;<br>&nbsp;<br>&nbsp;public static void main (String args []){<br>&nbsp;&nbsp;</p><p>&nbsp;&nbsp;<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;servSocket = new ServerSocket(9000);<br>&nbsp;&nbsp;&nbsp;System.out.println("메세지수신을 기다립니다.");<br>&nbsp;&nbsp;&nbsp;while(true){<br>&nbsp;&nbsp;&nbsp;&nbsp;clntSocket = servSocket.accept(); <br>&nbsp;&nbsp;&nbsp;&nbsp;Thread sv = new Server(clntSocket);<br>&nbsp;&nbsp;&nbsp;&nbsp;sv.start();&nbsp;<br>&nbsp;&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;}catch(IOException e){<br>&nbsp;&nbsp;&nbsp;System.out.println(e.getMessage());<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>&nbsp;<br>}<br><br>클라이언트부분<br><br>import java.net.*;<br>import java.io.*;</p><p><br>public class Study1122_2 {<br>&nbsp;static Socket csocket;<br>&nbsp;public static void main(String args[]){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;csocket = new Socket(args[0], Integer.parseInt(args[1]));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(args[0]+" "+args[1]+"서버에 접속하였습니다.전달할 메세지를 입력하세요.");<br>&nbsp;&nbsp;&nbsp;BufferedReader in = new BufferedReader(new <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStreamReader(csocket.getInputStream()));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintWriter out = new PrintWriter(csocket.getOutputStream(),true);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader reader = new BufferedReader( <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new InputStreamReader(System.in));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str = reader.readLine();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println(str);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("서버로 메세지를 전송합니다.");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String instr = in.readLine();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("서버가 메세지 ("+instr+") 를 잘받았습니다. ");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; csocket.close();<br>&nbsp;&nbsp;}catch(IOException e){<br>&nbsp;&nbsp;&nbsp;System.out.println(e.getMessage());<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>}<br><br><br>쓰레드를 사용하였기때문에<br>클라이언트가 몇개가 됫든 서버에 물리면 <br>서버는 접속을 허용하고. 클라이언트의 메세지를 재전송해준다.<br><br>서버부분에서 보면 소켓을 인수로 쓰레드에 전송하기때문에<br>쓰레드가 이루어지면 다중방향 통신이 된다는 것을 알수 있다.<br>1:1만이 아닌 1:다가 가능한것이다.<br>이런식으로 되었을때 조금만 손을보면 다중 채팅이 가능한<br>프로그램도 만들수 있다는것을 알수 있다.<br><br>저번에 짜본 간단한 클라이언트와 서버의 cmd 상에서의 채팅과 비슷하지만.<br>소켓자체를 계속생성하고 쓰레드를 이용하기 때문에<br>다중통신이 되도록 하는것이 중점이라 할수 있겠다.<br><br>○ 화이트보드<br><br>수업시간의 마지막 강의인 화이트 보드이다.<br><br><br>import java.awt.*;<br>import java.awt.event.*;<br>import javax.swing.*;</p><p><br>public class Study1123_3 extends Frame{</p><p>&nbsp;private MyCanvas mc;<br>&nbsp;private MenuPanel pane;<br>&nbsp;private Pen p;<br>&nbsp;public Study1117_3(){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;super("도형그리기-화이트보드");<br>&nbsp;&nbsp;p = new Pen();<br>&nbsp;&nbsp;mc = new MyCanvas(p);<br>&nbsp;&nbsp;pane = new MenuPanel(p,mc);&nbsp;&nbsp;</p><p>&nbsp;&nbsp;setSize(800,600);<br>&nbsp;&nbsp;add(pane,"West");<br>&nbsp;&nbsp;add(mc,"Center");<br>&nbsp;&nbsp;/*Panel test = new Panel();<br>&nbsp;&nbsp;test.add(new Label(p.getType()+""));<br>&nbsp;&nbsp;add(test,"East");*/<br>&nbsp;&nbsp;setVisible(true);<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>&nbsp;public static void main (String args[]){<br>&nbsp;&nbsp;Study1117_3 obj = new Study1117_3();<br>&nbsp;}<br>&nbsp;<br>&nbsp;<br>}</p><p>class Pen{<br>&nbsp;<br>&nbsp;private int type = 0;<br>&nbsp;<br>&nbsp;public void setType(int type){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;this.type = type;<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>&nbsp;public int getType(){<br>&nbsp;&nbsp;return type;<br>&nbsp;}<br>&nbsp;<br>&nbsp;<br>}</p><p>class MenuPanel extends Panel{</p><p>&nbsp;private Pen p;<br>&nbsp;private MyCanvas mc;<br>&nbsp;<br>&nbsp;public MenuPanel(Pen p, MyCanvas mc){<br>&nbsp;&nbsp;super(new GridLayout(8,1));<br>&nbsp;&nbsp;this.p = p;<br>&nbsp;&nbsp;this.mc = mc;<br>&nbsp;&nbsp;Button b1 = new Button("사각형");<br>&nbsp;&nbsp;Button b2 = new Button("삼각형");<br>&nbsp;&nbsp;Button b3 = new Button("둥근사각형");<br>&nbsp;&nbsp;Button b4 = new Button("동그라미");<br>&nbsp;&nbsp;Button b5 = new Button("부채꼴");<br>&nbsp;&nbsp;Button b6 = new Button("직선");<br>&nbsp;&nbsp;Button b7 = new Button("지우기");<br>&nbsp;&nbsp;Button b8 = new Button("모두 지우기");<br>&nbsp;&nbsp;MenuListener ml = new MenuListener(p, mc);<br>&nbsp;&nbsp;b1.addActionListener(ml);<br>&nbsp;&nbsp;b2.addActionListener(ml);<br>&nbsp;&nbsp;b3.addActionListener(ml);<br>&nbsp;&nbsp;b4.addActionListener(ml);<br>&nbsp;&nbsp;b5.addActionListener(ml);<br>&nbsp;&nbsp;b6.addActionListener(ml);<br>&nbsp;&nbsp;b7.addActionListener(ml);<br>&nbsp;&nbsp;b8.addActionListener(ml);<br>&nbsp;&nbsp;add(b1);<br>&nbsp;&nbsp;add(b2);<br>&nbsp;&nbsp;add(b3);<br>&nbsp;&nbsp;add(b4);<br>&nbsp;&nbsp;add(b5);<br>&nbsp;&nbsp;add(b6);<br>&nbsp;&nbsp;add(b7);<br>&nbsp;&nbsp;add(b8);<br>&nbsp;}<br>&nbsp;<br>&nbsp;<br>}</p><p>class MenuListener implements ActionListener{<br>&nbsp;<br>&nbsp;private Pen p;<br>&nbsp;private MyCanvas mc;<br>&nbsp;<br>&nbsp;public MenuListener(Pen p, MyCanvas mc){<br>&nbsp;&nbsp;this.p = p;<br>&nbsp;&nbsp;this.mc = mc;<br>&nbsp;}<br>&nbsp;<br>&nbsp;public void actionPerformed(ActionEvent e){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;String str = e.getActionCommand();<br>&nbsp;&nbsp;if ("사각형".equals(e.getActionCommand())){<br>&nbsp;&nbsp;&nbsp;p.setType(1);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if ("삼각형".equals(e.getActionCommand())){<br>&nbsp;&nbsp;&nbsp;p.setType(2);<br>&nbsp;&nbsp;}&nbsp;&nbsp;<br>&nbsp;&nbsp;else if ("둥근사각형".equals(e.getActionCommand())){<br>&nbsp;&nbsp;&nbsp;p.setType(3);<br>&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;else if ("동그라미".equals(e.getActionCommand())){<br>&nbsp;&nbsp;&nbsp;p.setType(4);<br>&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;else if ("부채꼴".equals(e.getActionCommand())){<br>&nbsp;&nbsp;&nbsp;p.setType(5);<br>&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;else if ("직선".equals(e.getActionCommand())){<br>&nbsp;&nbsp;&nbsp;p.setType(6);<br>&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;else if ("지우기".equals(e.getActionCommand())){<br>&nbsp;&nbsp;&nbsp;p.setType(7);<br>&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;else if ("모두 지우기".equals(e.getActionCommand())){<br>&nbsp;&nbsp;&nbsp;Graphics g = mc.getGraphics();<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;g.clearRect(0,0,mc.getWidth(),mc.getHeight());<br>&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>}</p><p>class MyCanvas extends Canvas{<br>&nbsp;<br>&nbsp;private Pen p;<br>&nbsp;private int xp, yp, xr, yr;<br>&nbsp;private int lx, ly, dwid, dhei, sx, sy;</p><p>&nbsp;public MyCanvas(Pen p){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;this.p = p;<br>&nbsp;&nbsp;addMouseListener(new MouseAdapter(){<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;public void mousePressed(MouseEvent e){<br>&nbsp;&nbsp;&nbsp;&nbsp;xp = e.getX();<br>&nbsp;&nbsp;&nbsp;&nbsp;yp = e.getY();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;public void mouseReleased(MouseEvent e){<br>&nbsp;&nbsp;&nbsp;&nbsp;xr = e.getX();<br>&nbsp;&nbsp;&nbsp;&nbsp;yr = e.getY();<br>&nbsp;&nbsp;&nbsp;&nbsp;draw();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;});<br>&nbsp;}<br>&nbsp;<br>&nbsp;public void paint(Graphics g){<br>&nbsp;}<br>&nbsp;<br>&nbsp;public void draw(){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;Graphics g = getGraphics();<br>&nbsp;&nbsp;if(xp &gt; xr){<br>&nbsp;&nbsp;&nbsp;dwid = xp - xr;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;lx = xp;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;sx = xr;<br>&nbsp; &nbsp;&nbsp;}<br>&nbsp;&nbsp;else if(xp &lt; xr){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;dwid = xr - xp;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;lx = xr;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;sx = xp;<br>&nbsp; &nbsp;&nbsp;}<br>&nbsp;&nbsp;else if(xp == xr){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;dwid = 0;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;lx = xp;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;sx = xp;<br>&nbsp; &nbsp;&nbsp;}<br>&nbsp; &nbsp;&nbsp;if(yp &gt; yr){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;dhei = yp - yr;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ly = yp;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;sy = yr;<br>&nbsp; &nbsp;&nbsp;}<br>&nbsp;&nbsp;else if(yp &lt; yr){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;dhei = yr - yp;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ly = yr;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;sy = yp;<br>&nbsp; &nbsp;&nbsp;}<br>&nbsp;&nbsp;else if(yp == yr){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;dhei = 0;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;ly = yp;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;sy = yp;<br>&nbsp; &nbsp;&nbsp;}</p><p>&nbsp;&nbsp;switch(p.getType()){<br>&nbsp;&nbsp;&nbsp;case 1:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;g.drawRect(sx, sy, dwid, dhei);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;case 2:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;int[] xpos = {sx, (xp+xr)/2, lx};<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;int[] ypos = {ly, sy, ly};<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;g.drawPolygon(xpos, ypos, 3);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;case 3:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;g.drawRoundRect(sx,sy,dwid,dhei,5,10);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;case 4:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;g.drawOval(sx,sy,dwid,dhei);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;case 5:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;g.fillArc(sx,sy,lx,ly,0,160);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;case 6:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;g.drawLine(sx,sy,lx,ly);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;case 7:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;g.clearRect(sx,sy,lx,ly);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp; &nbsp;&nbsp;}</p><p>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>&nbsp;<br>}<br><br>조건은 간단하다. 펜클래스를 만들어 각 버튼들은 펜 객체를 이용해 어떤 버튼인지 <br>인식하고 캔버스에 그려주면 끝.<br>결국에 그렇게 하고 내부클래스로 하지 않으려면..;; 펜객체가 이곳저곳 팔려다녀야한다. ㅋㅋ<br>메인에서 만든 펜객체를 다른곳에도 다뿌려주어야만이<br>다른클래스에서도 같은 펜객체를 사용하니까.<br><br>흠.. 만약 다른데서 펜객체를 만들어 사용한다면 가주 기본적인 문제가 발생한다.<br>바로, 메인의 펜객체와는 다른 객체라는것. ㅎㅎㅎ 후~<br><br>그리고..;; <br>창을 늘리거나 줄일때 또는 내렷다 올릴때 캔버스안에 있던것들이 다 사라지는데..;;<br>이걸 좀 해결해야 하는데..;; 여기에만 묶여있을수는 없으니까..;; <br>그냥 생각해보면, 페인트문에서 드로우 한번 불러오면 되지 않을까 싶지만..;; ㅋㅋㅋ<br>그렇게 하면 또 마지막에 그린것만 남겠지?? ㅋㅋㅋ<br><br>그런거 말고 흠 각 그릴때 정보를 배열이나 흠.. 그런거에<br>집어넣어놓고..;; 페인트에서 계속 불르는거지 ㅋ<br>아니면.. 다른 캔버스를 만들고 그 캔버스에 정보를 넘기고..;;<br>다시 가져오는.. 흠.. 이상하다. 휴..;;<br><br>짜면서 젤 어려운부분이..;; 각 도형에 정보를 주는건데..;;<br>아 힘들어서 사실 재번이 도움좀 받았다 ㅎㅎㅎ<br><br>하지만.. 나머지 부분들은 100% 내 노력인데 쩝.. <br>나중에 시간날때 이 프로그램좀 더 발전시켜봐야겟다.<br>더 세련되게...<br><br><br><br></p>			 ]]> 
		</description>
		<category>실험프로젝트2학기</category>

		<comments>http://dduckjava.egloos.com/1172656#comments</comments>
		<pubDate>Mon, 24 Nov 2008 13:24:05 GMT</pubDate>
		<dc:creator>날아라숑카</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 2학기 10주차_2  ]]> </title>
		<link>http://dduckjava.egloos.com/1124025</link>
		<guid>http://dduckjava.egloos.com/1124025</guid>
		<description>
			<![CDATA[ 
  [프로젝트]<br><br>지금 프로젝트 진행에 있어 너무 난잡해진 느낌이 없지 않다. 고치고 바꾸고 하다보니..;;<br>이제는 내가 봐도 뭐가 뭔지 알수 없을 지경까지 이르렇다.<br>쓰레드로 컴퓨터 진행현황까지 표시하려니 더러움이 극에 이른다.<br>좀 정리좀 해야지..;;<br><br>현재까지 진행도는<br><br>클래스<br><br>ProJect클래스 : JFrame에 대한 구성을 정의한다. 각종 버튼들이 이루어져있고..;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;소켓에 연결된 컴퓨터를 어떻게 처리 할지..(어떻게 화면에 표시할지는 고민중..)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;한눈에 쉽게 얼마인지 누구인지가 나타나야 하기때문에..;; 쉽고 좋은방법구상중..;;<br><br>Socket클래스 : 소켓을 생성하여 네트웍이 되도록.. 아직은 미구현이다.<br><br>PCom클래스 : 자프로그램에서 보내오는 정보를 저장하여 메인클래스가 이용할수 있게..;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;객체를 벡터로해서 숫자가 몇개가 되던지 이용할수 있도록 할 예정이다. 흠..;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;아직은 그냥 한개의 객체생성으로 테스트만 하고 있다.<br><br>Count클래스 : PCom의 Date 메서드의 Start와 Sop 의 차이를 보고 요금을 계산한다.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;아직은 요금쳬계는 정하지 않아 정말 그 숫자 그대로 나온다 ㅡㅡㅋ<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;그리고 그 숫자에 부가요금서비스도 필요하겠다.<br><br>Setting클래스 : 컴퓨터사용요금을 정하는 것이다.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;부가사용요금은 PCom에 직접 정보를 주고 PCom에서 반환할 것이기 때문에<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Setting 클래스에서는 별도로 지정하지 않아도 된다.<br><br><br>까지 이다. 약 30% 정도 완성했다고나 할까..;;<br>가장 중요한것은 고객들이 사용중인 컴퓨터 요금정보등을 <br>화면에 한번에 30대가 됫든 40대가 됫든 <br>정보를 보여야 하는데 멀티쓰레드로 한다치고..;; <br>그리고나서 그것을 어떤식으로 뿌려야 할지 몰르겠다.<br><br>그리고 가장 좋은 인터페이스는 각컴퓨터마다 버튼을 다는건데..;; 그것도 만만치가 않다..;;<br>후우..;; 어떻하지..;;<br><br>시간은 점점 다가오는데 되는게 없네..;; 한 일주일 밤샐 작정을 해야하나~ ㅋㅋㅋ<br>얼른 하고 끝내버려야겠다.<br><br>요번주안에 소켓클래스 구현하고 자프로그램과 연동해봐야겠다.<br>한개만해서 1:1 테스트후 문제없으면..;; 쓰레드작업과 함께 벡터로 PCom 객체를 생성해서<br>프로그램 완성해야겠다.<br><br>그럼 앞으로 한 10일정도가 고비네..;; 쉬지 말아야징..;;<br><br><br>			 ]]> 
		</description>
		<category>실험프로젝트2학기</category>

		<comments>http://dduckjava.egloos.com/1124025#comments</comments>
		<pubDate>Tue, 18 Nov 2008 13:16:10 GMT</pubDate>
		<dc:creator>날아라숑카</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 2학기 10주차_1 ]]> </title>
		<link>http://dduckjava.egloos.com/1114234</link>
		<guid>http://dduckjava.egloos.com/1114234</guid>
		<description>
			<![CDATA[ 
  <p>오늘의 힌트. 그래픽스 객체를 가져올때는 setVisible 이후에 와야한다.<br><br>○멀티쓰레드.<br>지금까지는 싱글쓰레드의 프로그램을 설계해왔다. 음.. 말하자면.. 단반향통신 이었는데.<br>이제 다중방향 통신을 한다고 생각하면 되겟다. ㅋㅋㅋㅋ<br>뭐..;; 난 통신과니까.<br>아무튼 쓰레드는 두가지 방법이 있다.<br><br><br><br>java.lang.Thread 클래스를 상속하는 방법<br>java.lang.Runnable 인터페이스를 구현하는 방법<br><br>이 두가지 방법인데..;; <br>상황에 맞게 상속하는걸 쓸것이냐 인터페이스 구현을 하느냐 하는 그정도 차이가 되겠다.<br>결국에는 리스너와 어댑터 정도의 차이인가 ㅡㅡㅋ<br>파고들면 아니긴 하지만 ㅋ<br><br>상속받는 경우에 Thread 클래스를 상속받은 클래스 에서는 run 메소드를 오버라이딩해서<br>정의한다. 그러면,,;;<br><br>run 메소드는 쓰레드가 실행될때 자동으로 실행이 된다. 흠.. ㅋㅋㅋ<br><br><br>예제문.<br>public class Study1112_1 {<br>&nbsp;<br>&nbsp;public static void main(String args[]){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;Thread thread = new ThreadExam();<br>&nbsp;&nbsp;thread.start();<br>&nbsp;&nbsp;for(int i =0 ; i &lt;10 ; i++){<br>&nbsp;&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(1000);<br>&nbsp;&nbsp;&nbsp;}catch(Exception e){}<br>&nbsp;&nbsp;&nbsp;System.out.println("현재수:"+i);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;<br>&nbsp;}<br>}</p><p><br>class ThreadExam extends Thread{<br>&nbsp;<br>&nbsp;public void run(){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;for (int i = 100; i &lt; 110 ; i++){<br>&nbsp;&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(1000);<br>&nbsp;&nbsp;&nbsp;}catch(Exception e){}<br>&nbsp;&nbsp;&nbsp;System.out.println("현재수:"+i);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>}<br><br>그냥.. 간단히 맛보기라고 할수 있겟다. 흠..;; ㅋㅋㅋ<br><br>Thread를 또 다른 클래스에서 상속받으면..;; 3중 숫자세기도 가능은 하다.<br><br>런어블을 구현해서 하는 멀티쓰레드는 그 클래스의 객체를 만들고 <br>그 객체를 쓰레드 객체에 인수로 넣어 사용한다. 무슨말인지 이해가 잘안되겠지만..;;<br><br><br>&nbsp;&nbsp;ThreadExam1 th = new ThreadExam1();<br>&nbsp;&nbsp;Thread thread1 = new Thread(th); <br>&nbsp;&nbsp;Thread thread2 = new ThreadExam2();<br>&nbsp;&nbsp;thread1.start();<br>&nbsp;&nbsp;thread2.start();<br><br>이런 식이다.&nbsp;<br>runnable을 구현한 클래스&nbsp;객체 생성 <br>-&gt; 다시 쓰레드객체생성 <br>-&gt; 쓰레드객체에 runnable을 구현한 클래스객체를 인수로 넣기 <br>-&gt; 객체명.start();<br><br>흠..<br>멀티쓰레드는 엄밀히 말해서 병렬적으로 진행이 되는것이기 때문에<br>어떤 한개의 목표를 두고 두개의 쓰레드가 경쟁을 할경우 <br>둘다 목표를 취하는 경우등의 레이즈 상황이 발생하는데<br>이것을 주의하여 프로그래밍 해야겟다.<br><br><br>○네트워크프로그래밍<br><br>InetAddress 클래스 <br>-특이한점이 객체를 생성할때 생성자를 호출하는게 아니라, 클래스내의 스태틱메소드를 <br>호출하여 생성한다.<br><br>○소켓<br><br>getInputStream 하면 어떻게 읽어들이는가?<br><br><br>-ServerSocket 클래스<br><br>서버 프로그램에서만 사용하고 포트를 열고 연결 요청이 오기를 기다린다.<br>연결요청이 오면? 거기에 맞는 클라이언트 소켓을 생성하여 반환한다. <br><br>생성자는 다음과 같다.<br><br>ServerSocket(int port)&nbsp;<br>port에 연결된 서버 소켓 생성. port는 1-65535 사이의 값 중에서 다른 프로그램이 사용하지 않는 값을 이용해야 한다.<br>ServerSocket(int port, int backlog)&nbsp;&nbsp;<br>port에 연결된 서버 소켓 생성. backlog값은 동시에 연결대기 상태(SYN_RECVED)에 있을 수 있는 최대 수.<br><br>두개의 사용법중 아래는 별로 쓰지 않지만 위는 기본으로 알고 가야한다!!<br><br>메서드는 다음과 같다.<br><br>Socket accept()&nbsp;TCP 연결요청을 기다리다가 요청이 들어오면 소켓을 만들어 연결하고 그 소켓을 반환한다.<br>void close()&nbsp;ServerSocket을 닫고 사용되고 있는 모든 리소스를 해제한다. <br><br>서버프로그램은 서버소켓을 이용하여 포트를 열고 기다리고 클라이언트는 서버소켓으로 요청을 하고<br>서버소켓은 요청을 받으면 다른 소켓을 만들어 그 클라이언트와 연결하여 통신이 되도록 만든다.<br><br></p><p><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds10.egloos.com/pds/200811/12/46/f0018046_491a6dd14c6ed.jpg" width="500" height="303.317535545" onclick="Control.Modal.openDialog(this, event, 'http://pds10.egloos.com/pds/200811/12/46/f0018046_491a6dd14c6ed.jpg');" /></div>(본그림의 저작권은 동양공업전문대학 김교일 교수님께 있음을 알려드립니다.)<br><br>이걸이용해서 간단하게 문자가 왓다갓다 하는 프로그램은..;;<br>흠...<br>import java.net.*;<br>import java.io.*;</p><p><br>class Client{<br>&nbsp;private Socket csocket;<br>&nbsp;<br>&nbsp;public Client(String add, int port){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;csocket = new Socket(add,port);<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;}catch(IOException e){<br>&nbsp;&nbsp;&nbsp;System.out.println("예외처리:"+e.getMessage());<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>&nbsp;public void Connection(){<br>&nbsp;&nbsp;&nbsp;&nbsp; try{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader in = new BufferedReader(new <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStreamReader(csocket.getInputStream()));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintWriter out = new PrintWriter(csocket.getOutputStream(),true);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader reader = new BufferedReader( <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new InputStreamReader(System.in));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(true){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; String str = reader.readLine();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; if(str.equals("bye")) break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; out.println(str);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; csocket.close();<br>&nbsp;&nbsp;&nbsp; } catch(IOException e){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("IOException: "+e.getMessage());<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;}</p><p>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>}</p><p>&nbsp;</p><p>public class Study1116_4 {</p><p>&nbsp;public static void main(String args[]){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String add="203.237.163.177";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int port=8088;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (args.length&gt;0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add = args[0];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; port = Integer.parseInt(args[1]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Client c =new Client(add,port);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;c.Connection();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;}&nbsp;&nbsp;<br>}<br><br><br>=====================================<br><br><br>import java.net.*;<br>import java.io.*;</p><p><br>class TCPserver {<br>&nbsp;private int port; <br>&nbsp;&nbsp;&nbsp; private ServerSocket servSocket;<br>&nbsp;&nbsp;&nbsp; private Socket clntSocket; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; public TCPserver(int port){<br>&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;this.port = port;<br>&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; public void listen(){<br>&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;try{<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;servSocket = new ServerSocket(port);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;clntSocket = servSocket.accept();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;}catch(IOException e){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;System.out.println("예외검출:"+e.getMessage());<br>&nbsp;&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; public void Connection(){<br>&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;try{<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;BufferedReader in = new BufferedReader<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;(new InputStreamReader(clntSocket.getInputStream()));<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;PrintWriter out = new PrintWriter(clntSocket.getOutputStream(),true);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;while(true){<br>&nbsp;&nbsp;&nbsp; String str = in.readLine();<br>&nbsp;&nbsp;&nbsp; if(str == null ) break;<br>&nbsp;&nbsp;&nbsp; System.out.println("클라이언트: "+str); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;clntSocket.close();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;}catch(IOException e){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;System.out.println("예외검출:"+e.getMessage());<br>&nbsp;&nbsp;&nbsp; &nbsp;}&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>}</p><p>public class Study1116_3{<br>&nbsp;<br>&nbsp;public static void main(String args[]){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;int port = 8088;<br>&nbsp;&nbsp;if (args.length &gt; 0){<br>&nbsp;&nbsp;&nbsp;port = Integer.parseInt(args[0]);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;TCPserver sv = new TCPserver(port);<br>&nbsp;&nbsp;sv.listen();<br>&nbsp;&nbsp;sv.Connection();<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>}<br><br><br>대충 이렇게 해서 돌리면 문자가 왓다갓다하는 프로그램이 된다.<br>아니지 ㅡㅡㅋ<br>클라이언트에서만 되는거지 ㅡㅡㅋ ㅋ클라이언트가 하는말이<br>서버에 보이는거지 ㅋㅋㅋㅋ 아..;;<br>이거는 내가 구현할 프로젝트에서도 쓰이기 때문에 유용하다.<br><br>보면..;; 리슨에서 소켓을 만들고<br>커넥션에서 일을처리한다.<br>클라이언트는 보내고 서버는 화면에 뿌려주는.. ㅋㅋㅋㅋ<br>굉장히 단순하기 때문에 <br>복잡할것이 없다.<br><br>서버나 클라이언트나 크게 다를건 없다.<br><br>단지 자바프로그래밍에 네트워크 분야가 나오니 좀 신선한듯..; ㅋㅋㅋ<br>채팅프로그램도 해야하는데..;;<br>꼭해봐야 하는데..;;<br><br>서버와 클라언트 부분을 이용해서 각부분을 <br>서로 상호연동하겟금해주면..;;<br><br>쌍방향 통신도 어렵지 않을듯하다..; 실시간으로 통신을 하려면..;;<br>쓰레드를 이용해야 겠지?<br><br>자기가 입력 받는 차례라고 남이 입력하는거 안보이면 안되니까 ㅋㅋㅋ<br>흠..;; <br><br>분야는 점점 넓어지고.<br>안타깝네 ㅋㅋㅋ<br>열심히 공부하지 않으면..<br>안되겠어~ ㅋㅋ</p>			 ]]> 
		</description>

		<comments>http://dduckjava.egloos.com/1114234#comments</comments>
		<pubDate>Mon, 17 Nov 2008 02:08:16 GMT</pubDate>
		<dc:creator>날아라숑카</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 2학기 9주차_2 ]]> </title>
		<link>http://dduckjava.egloos.com/1085090</link>
		<guid>http://dduckjava.egloos.com/1085090</guid>
		<description>
			<![CDATA[ 
  <p>시험문제에 대한 반성을 좀해봐야지..;; ,,ㅋ<br><br>1번문제.<br>아마도 프레임 컨버스안에 사각형을 그리고 지우고 그리고 지우고 하는<br>그런작업 ㅋㅋㅋ 사각형 크기는 계속 변하고..;;<br><br>코딩은......<br>import java.awt.*;<br>import java.awt.event.*;</p><p>public class Mouse{</p><p>&nbsp;static Choice ch;<br>&nbsp;static Canvas cv;<br>&nbsp;static int index = 0;<br>&nbsp;static Color c [] = { Color.BLUE, Color.GREEN, Color.ORANGE, Color.RED, Color.YELLOW };&nbsp;<br>&nbsp;<br>&nbsp;public static void main(String args[]){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;Frame f = new Frame();<br>&nbsp;&nbsp;f.setSize(300,200);<br>&nbsp;&nbsp;Button b = new Button("확인");<br>&nbsp;&nbsp;cv = new Canvas();<br>&nbsp;&nbsp;f.add(cv,"Center");<br>&nbsp;&nbsp;f.add(b,"South");<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;b.addActionListener(new ActionListener(){<br>&nbsp;&nbsp;&nbsp;public void actionPerformed(ActionEvent e){ </p><p>&nbsp;&nbsp;&nbsp;&nbsp;Graphics g = cv.getGraphics();<br>&nbsp;&nbsp;&nbsp;&nbsp;if (index &gt;= 5){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;g.clearRect(0,0,(int)cv.getSize().getWidth(), (int)cv.getSize().getHeight());<br>&nbsp;&nbsp;&nbsp;&nbsp;g.setColor(c[index]);<br>&nbsp;&nbsp;&nbsp;&nbsp;g.fillRect((index*5),(index*5),((index+1)*30), ((index+1)*30));<br>&nbsp;&nbsp;&nbsp;&nbsp;index++;<br>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;});<br>&nbsp;&nbsp;f.setVisible(true);<br>&nbsp;}</p><p>}<br><br>굉장히 쉬웠다 ㅡㅡㅋ<br>별거 있나.. ㅋ<br>그냥 색 계속 바뀌도록만 칼라배열만들고 인트형 변수 만들어서 색 계속 세팅 되겠금 하고.<br>할때마다 지워주고<br>사각형 크기만 변환시키면 되는걸 뭐..;;<br><br>근데 머가 이렇게 많이 틀린거지 하고 보니까 ㅡㅡㅋ<br>일단 클리어 안했고 ㅡㅡㅋ<br>그래픽스객체를 불러와서 했다는데..;;<br>아마도 안했나바 ㅡㅡㅋ<br>그리고 액션퍼폼 그래픽메서드를 안썼나? 흠..;;<br>그리고 버튼에 액션리스너 연결도 안했대.. 맙소사..;; ㅋㅋㅋ<br><br>할말이 업다. <br><br><br><br>2번문제.<br>잘기억은 안나지만.. 아마도 마우스 움직임에 대한 거에 선을 그어지도록 해라 였던가.. ㅋ<br><br>import java.awt.*; <br>import java.awt.event.*; </p><p><br>public class Mouse{ </p><p>&nbsp; TextField tf;<br>&nbsp; int x, y;<br>&nbsp; GCanvas c; </p><p>&nbsp;<br>&nbsp;public Mouse(){<br>&nbsp; <br>&nbsp; tf = new TextField(400);<br>&nbsp; c = new GCanvas();<br>&nbsp; x=0;<br>&nbsp; y=0;<br>&nbsp; Frame f = new Frame(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f.setTitle("마우스 움직임과 드래그 좌표"); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f.setSize(300,200); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.addMouseMotionListener(new MouseMotionAdapter(){ </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void mouseMoved(MouseEvent e){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;int i = 2; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x = e.getX();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y = e.getY();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i%2 == 0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.setX1(x);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.setY1(y);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.setX2(x);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.setY2(y);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (i &gt; 10000){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; i = 2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tf.setText(e.getX()+","+e.getY());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p><p>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; f.add(c,"Center");<br>&nbsp;&nbsp;&nbsp;&nbsp; f.add(tf,"North");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f.setVisible(true); <br>&nbsp;<br>&nbsp;}<br>&nbsp;</p><p>&nbsp;public static void main(String[] args) { </p><p>&nbsp; Mouse obj = new Mouse();<br>&nbsp; <br>&nbsp;&nbsp;&nbsp; } <br>} </p><p><br>class GCanvas extends Canvas{<br>&nbsp; <br>&nbsp;int x = 0, y =0,x1= 0,y1= 0;<br>&nbsp;<br>&nbsp;public void setX1(int a){<br>&nbsp; x = a; <br>&nbsp;}<br>&nbsp;<br>&nbsp;public void setY1(int a){<br>&nbsp; y = a; <br>&nbsp;}</p><p>&nbsp;public void setX2(int a){<br>&nbsp; x1 = a; <br>&nbsp;}<br>&nbsp;<br>&nbsp;public void setY2(int a){<br>&nbsp; y1 = a; <br>&nbsp;}<br>&nbsp;<br>&nbsp;public void paint(Graphics g){<br>&nbsp; <br>&nbsp; g.drawLine(x, y, x1, y1);<br>&nbsp; g.drawRect(10,20,30,40);<br>&nbsp; <br>&nbsp;}<br>&nbsp;<br>}</p><p><br><br>대충 이렇게 다시 코딩 해봣다. 근데 문제는 내가 충분히 천천히 움직이지 않는건지<br>선은 안그어지더라 ㅋㅋㅋㅋ<br>좌표값이 어짜피 움직이면 계속 변하니까.. 그값에 맞추어서 세팅 해주면 되는데..;;<br>이상하네..;; 흠..<br>시작점위치와 끝날때 위치도 좀 허접하긴 해도 분명히 다르게 줬는데..;; 흠...;;<br>뭐지.. 그럼 역시 난 충분히 천천히 움직이지 않았던가..;;<br><br><br>내가 틀린게 마우스리스너에 어댑터 사용을 안한거 ㅋㅋㅋ<br>바본가봐 ㅋㅋㅋㅋ ㅡㅡㅋ 어댑터 안쓸꺼면, 나머지 메소드 구현이라도 해놔야지 ㅡㅡㅋ<br><br>그리고 생성자를 통한 인수전달. 이건 무슨말이지?? ㅡㅡㅋ <br>문제내용이 잘 기억이 안나니 이건뭐..;; ㅡㅡㅋ<br><br>아무튼.. 마우스 리스너를 캔버스에 add 시켜서 하는걸 안했나..;;<br>기억이 안나 기억이 ㅠㅠ<br><br>진짜 근데 왜 선이 안그어지지 ㅡㅡㅋ;;;<br><br>3번과 4번은 다행히 다맞아서 뭐...;;<br>별볼일 없게 됫다. 사실 3번과4번은 많은 정성을 쏟았는데..;; 문제도 기억이 안나는건 뭐지.. 파일입출력인데..;;<br>분명히 그런걸 했었나 하는 그런기분.. ㅋㅋ<br><br>아.. 성적표 받고 나니까 암울하다. <br>이건뭐..;; 시험지에 뻔히 나와있는것도 안해서 틀리고 ㅡㅡㅋ<br>반평균은 넘었다지만..<br>실망이다 내가 나한테 ㅋㅋㅋ<br><br>좀 꼼꼼해져야지에효..;; ㅋㅋㅋ<br></p>			 ]]> 
		</description>
		<category>실험프로젝트2학기</category>

		<comments>http://dduckjava.egloos.com/1085090#comments</comments>
		<pubDate>Tue, 11 Nov 2008 08:58:25 GMT</pubDate>
		<dc:creator>날아라숑카</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 2학기 9주차_1 ]]> </title>
		<link>http://dduckjava.egloos.com/1079744</link>
		<guid>http://dduckjava.egloos.com/1079744</guid>
		<description>
			<![CDATA[ 
  <p>흠.. 지난번에 한 프로젝트를 좀 이어서 해봤다..;;<br><br>뭐 가운데 패널을.. 캔버스를 넣지 않고 버튼으로 처리 하기로 했다. 왠지 그편이 훨씬 깔끔하고 보기 좋을것 같아서..;;<br><br>계속 추가 삭제 하다보니까 너무 너저분도 해졌다. ㅡㅡㅋ<br><br>필요업는거 언제 쓸지 몰라서 막 주석처리하고 ㅋㅋㅋㅋ<br><br>뭐 대충 저번이랑 같지만..;; 설정부분을 다이얼로그로 처리했고..;;<br>츄스 클래스도 사용해서 설정 저장/불러오기 기등을 넣었고..;;<br><br>영업피씨에 대한 객체도 만들었다.<br>class Com{<br>&nbsp;<br>&nbsp;Date time = new Date();<br>&nbsp;int comnum = 0;<br>&nbsp;long StartTime = 0L, StopTime = 0L;<br>&nbsp;<br>&nbsp;public Com(){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>&nbsp;public void StartCom(){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;StartTime = time.getTime();<br>&nbsp;&nbsp;<br>&nbsp;}</p><p>&nbsp;public long countTime(){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;StopTime = time.getTime();<br>&nbsp;&nbsp;return StartTime - StopTime ;<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>&nbsp;public int ComNum(){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;return comnum;<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>}<br><br>뭐 대충 이렇게..;;<br>여기엣 추가 할것이 라면에 음료수 라던지 하는 기본 <br>부가서비스들에 대한 추가인데 그건 프로그램이 90%이ㅏㅇ 되면 해야지..<br>뭐 그거야 쉬우니까 ㅋㅋㅋ<br><br>결국에는 이것땜에 백터도 써야된다 우이씨..;; ㅡㅡㅋ<br>벡터는 아직도 싫어~ ㅋㅋㅋ 아무튼 벡터에 넣고 뺄수 있도록 설계해야지.<br>뭐 포문으로 하면 될듯하니까.. ㅋㅋㅋ<br><br>머리는 지금 복잡족잡... 메노지는 터들꺼 같고 이젠 내 글씨도 못알아 보겟네 ㅋㅋㅋ<br><br>다이얼로그들은 <br><br>&nbsp;&nbsp; public void actionPerformed(ActionEvent ae){<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; setFirst = JOptionPane.showInputDialog("사용가능한 컴퓨터 수를 입력하여 주세요", "숫자만 입력하세요");<br>&nbsp;&nbsp;&nbsp; i = Integer.parseInt(setFirst);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; }<br><br>==============================<br><br>&nbsp; int x = JOptionPane.showConfirmDialog(this, "피시방 환경 새로 설정하시 겠습니까?", "안녕하세요", <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);<br>&nbsp; <br>&nbsp; if ( x == JOptionPane.YES_NO_OPTION ){<br>&nbsp;&nbsp; setFirst = JOptionPane.showInputDialog(this, "사용가능한 컴퓨터 수를 입력하여 주세요", "숫자만 입력하세요");<br>&nbsp;&nbsp; i = Integer.parseInt(setFirst);</p><p>&nbsp; }<br>&nbsp; else{<br>&nbsp;&nbsp; <br>&nbsp;&nbsp; JFileChooser jfc = new JFileChooser("c:\\");<br>&nbsp;&nbsp; jfc.showOpenDialog(this);<br>&nbsp;&nbsp; //file = jfc.getSelectedFile();</p><p>&nbsp;&nbsp; //기존에 설정된 파일을 불러오기..;;<br>&nbsp;&nbsp; <br>&nbsp; }<br><br><br>이런식으로 사용했다. 뭐 그닥..;; 어렵진 않아서 좋았다 ㅎㅎ <br>근데 문제는 초기설정에 텍스트 필드에 숫자가 아닌 다른 것들이 들어가면 에러가 나는데..;;<br>이거 어떡하지 ㅡㅡㅋ 1학기때 분명 했던거 같았는데 그거 역시 이상한거로 되있어서 ㅡㅡㅋ<br><br><br>아 기억이 안나네..;; 이돌머리.. ㅡㅡㅋ 찾아봐야지 ㅋ <br>안되면.. 예외처리 고고씽인가 ㅋㅋㅋ ㅡㅡㅋ<br>하긴 뭐..;; ㅋ<br><br>게다가 그다음 문제..;; 설정을 초기 설정은 잘들억가는데..;;<br>중간에 바꾸면 그걸 어떻게 현재 진행중인 거에 피해 없이<br>추ㄱㅏ 제거 시키나 인데 이것도 꽤나 골치다 ㅡㅡㅋ<br>음.. 어떡하지 ㅡㅡㅋ<br><br>그냥 내가보기에는 음.. 입력을 받고..;; 지금 값하고 비교해서 <br>적으면 뒤에 삭제..;;<br>많으면 뒤에 추가..;;<br><br>근데.. 문제는 화면상에 바로바로 안뜬다.<br>이것도 분명히 주의를 받고 배운걸로 아는데..;; 안되네 ㅡㅡㅋ<br><br>흠... 버튼 눌를때마다 셋비저블? ㅡㅡㅋ<br>좀 이상한데 ㅋㅋㅋ<br><br>아악 어떡해.. ㅡㅡㅋ 아이씽..;; 좀 잘나간다 햇다 ㅡㅡㅋ<br><br>솔직히 이것두 자리잡고 딱하면 4일 풀로하면 할수 있을것 같긴하지만..;;<br>그러긴 싫고 차근차근 해가면서..;;<br><br>추가삭제를 자유로이 하면서 이것이 자바의 묘미지~ 요러면서 해야 잼있지 ㅋㅋㅋ<br>아무튼 오늘도 골치꺼리는 생겼구나.. <br>고민좀 해봐야겟다. 화면의 실시간세팅 흠..;;<br>교수님 혹시 힌트라도? ^^ ;;</p>			 ]]> 
		</description>

		<comments>http://dduckjava.egloos.com/1079744#comments</comments>
		<pubDate>Mon, 10 Nov 2008 08:21:45 GMT</pubDate>
		<dc:creator>날아라숑카</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 2학기 8주차_2 ]]> </title>
		<link>http://dduckjava.egloos.com/1050233</link>
		<guid>http://dduckjava.egloos.com/1050233</guid>
		<description>
			<![CDATA[ 
  <p>Awt 의 가장 큰 취약점은 플랫폼이 달라지면 의도한바와는 다르게<br>된다는 점이다.<br>이런것들은 Swing으로 극복이 가능하다 ㅎㅎ<br><br>○ Swing<br><br>스윙은 여러가지 다양한 기능(찾아써넣을것..)<br>기능을 갖는다.<br><br>게다가 AWT를 대체 할수 있는것들이 많기때문에..;;<br>뭐 AWT의 컴포넌트에서 J를 앞에 붙이면 스윙컴포넌트가 된다고 생각하면 되겠다.<br><br>자 여기서 가장 중요한부분..<br><br>스윙이 가지는 j프레임은 awt의 프레임과 기본적으로 트리다.<br>awt프레임은 컴포넌트를 직접 add하고 기본적으로 보더레이아웃을 가지고 있었지만..<br><br>스윙의 j프레임은 속지(? 컨텐트페인)를 가지는데 이것은 캠버스의 그래픽스와 같은 개념이다.<br>j프레임도 사용할때는 컨텐트페인을 사용하여야한다.<br>사실 j프레임도 보더레이아웃을 기본으로 가진다 ㅎㅎ<br><br>뭐 쉽게 말하자면..;;<br>컨텐트페인은 j프레임의 관리자? 지배인?<br>그정도가 되겠다.<br><br>근데 뭐 사실 자바1.5버전부터는 컨텐트페인을 하지 않아도.. 컴파일에는 문제가 없도록 <br>하게 했다고 한다. 그런데 왜 컨텐트페인을 배웠을까??<br><br>왜냐하면.. 원래가 그렇게 하는거고 안하면 편법쯤 된다.. 음.. 예외처리를 남한테 넘기는거처럼 ㅋㅋ<br>그리고 컨텐트페인을 사용할때와 안할때 모양이 조금씩 틀린것도 있으니 사용하는걸 권장<br>하는거라고... ㅎㅎㅎ<br><br>뭐.. 간단한 실습.. ㅎㅎ<br><br>import java.awt.*;<br>import javax.swing.*;//스윙은 awt의 확장판이다.<br>//뭐 그런거지 ㅋㅋㅋㅋ <br>//그러니까 javax는 다 확장판으로 알수 있군 ㅎㅎ</p><p>class Study1029_1{</p><p>&nbsp;public static void main(String args[]){<br>&nbsp;&nbsp;</p><p>&nbsp;&nbsp;String data[] = {"1","2","3","4"};<br>&nbsp;&nbsp;JFrame jf = new JFrame();<br>&nbsp;&nbsp;jf.setSize(400,600);<br>&nbsp;&nbsp;Container c = jf.getContentPane();<br>&nbsp;&nbsp;JPanel p = new JPanel();<br>&nbsp;&nbsp;p.setLayout(new GridLayout(3,2));<br>&nbsp;&nbsp;p.add(new JTextField(10));<br>&nbsp;&nbsp;p.add(new JPasswordField(10));<br>&nbsp;&nbsp;p.add(new JRadioButton("Radio"));<br>&nbsp;&nbsp;p.add(new JButton("Button"));<br>&nbsp;&nbsp;p.add(new JList(data));<br>&nbsp;&nbsp;p.add(new JCheckBox("체크박스"));<br>&nbsp;&nbsp;c.add(p);<br>&nbsp;&nbsp;jf.setVisible(true);</p><p><br>&nbsp;}</p><p>&nbsp;</p><p>}<br><br>상당히 모양이 좀 고급스럽게 나온다. awt가 윈도우 98이라면,,<br>Swing은 윈도우xp정도 되겟다 ㅎㅎㅎ<br><br>StringTokenizer 클래스 <br><br>음 이건 split 으로 대체해서 사용했던건데..;;<br>뭐 기능은 split이랑 같다.<br><br>public StringTokenizer(String, String)&nbsp;파싱할 문자열과 토큰으로 사용한 문자열을 인수로 하는 생성자<br>public String nextToken()&nbsp;파싱한 문자열을 차례로 반환한다.<br>public boolean hasMoreTokens()&nbsp;파싱한 문자열이 더 있는지를 검사한다. True일 경우 nextToken() 메서드로 문자열을 구할 수 있다.<br>public int countTokens()&nbsp;파싱된 문자열의 개수를 반환한다.<br><br>이런식의 메서드들이 있다. 생성자에서 구분자를 설정안하면 기본적인 구분자가<br>실행이 된다 뭐 스페이스라던지 탭이라던지 이런거 ㅋㅋ<br><br><br>JProgressBar컴포넌트<br>- 음.. 작업중인걸 보여주는 그런거? 흠..<br>이것은 생성자에서 미니멈값과 맥시멈값을 설정할수 있다.<br>뭐 진행율을 표시해주는 그런 거군.. 흠.. <br><br>JTextArea 클래스<br><br>void append(String str)&nbsp;str을 편집하는 텍스트의 뒤에 추가로 붙인다.<br>void insert(String&nbsp;str, int&nbsp;pos)&nbsp;str을 편집하는 텍스트의 pos위치에 삽입한다.<br>void setFont(Font&nbsp;f)&nbsp;글꼴을 f로 설정한다.<br>void setLineWrap(boolean wrap)&nbsp;줄바꿈을 할 것인지를 설정한다.<br>String getText()&nbsp;편집하는 텍스트를 반환한다.<br>void setText(String&nbsp;str)&nbsp;편집텍스트를 str로 설정한다. <br>boolean requestFocusInWindow()&nbsp;입력포커스(즉, 커서)를 해당 JTextArea객체에 준다.<br>void setCaretPosition(int&nbsp;pos)&nbsp;입력커서의 위치를 지정한다. 디폴트는 제일처음..<br>뭐 문장이 있다면.. 맨뒤에 하고 싶기도 하니까 ㅋㅋㅋ<br><br>JScrollPane<br>-화면에 표시하는 윈도우창보다 표현할것이 더 클경우 사용..<br>뭐... 인터넷 창 생각하면 편하겟네 ㅎㅎㅎ<br><br>JOptionPane 클래스<br>-뭐.. 대화창을 띄우는 거라고 생각하면 되겠다. ㅎㅎㅎ<br>showConfirmDialog&nbsp;예, 아니오 등의 확인 질문을 위한 대화창<br>showInputDialog&nbsp;어떤 입력을 기다리는 대화창<br>showMessageDialog&nbsp;사용자에게 무엇인가 발생했다는 것을 알리는 대화창<br>showOptionDialog&nbsp;위 3개를 합친 기능의 대화창<br><br>JFileChooser 클래스<br>손쉽게 파일을 저장하거나 불러오는 건데.. ㅎㅎㅎ<br>왠지 복잡하다 ㅎㅎㅎ<br><br><br><br><br>뭐.. 흠... 갑자기 좀.. 고급스러워진거 같다 ㅎㅎㅎ<br>프로젝트도 이걸로 진행중이고 현재 ㅎㅎㅎ<br>좀 먼가 하는 기분이 들긴하더라 아직 허접하기 이를데가 없지만 ㅡㅡㅋ<br>금방 완성하리라 ㅋㅋㅋ<br><br>스윙쪽은 원래 있던 오리지널의 확장판 격인 패키지라 그렇게 많은 설명이 있지는 않았지만..;;<br>역시나 익숙하지 않은 것은 사실 ㅎㅎㅎ<br>이럴땐 api가 약이지 ㅋㅋㅋㅋ<br><br><br>마지막 메모장 예제 문제는 미처 해보지 못했다. 하는중 ㅎㅎ <br>다하면 올리기로 하고..;;<br><br>프로그래스바를 조금씩 손봤는데 사실 되기는 오래전부터 됫다.<br>근데 이놈의 것이 조금식 조금식 마음에 안드는 부분들을 가지고 있어서 그런것들을 처리하느라고 ㅋㅋ<br>좀 힘들었지 ㅋㅋㅋ 아니.. 뭐랄까 아무튼 생각을 많이 했었다.<br><br>소스는 ================================<br><br>import javax.swing.*;</p><p>import java.awt.event.*;<br>import java.awt.*;</p><p>public class Study1103_1 {<br>&nbsp;static int i = 0, x = 0;<br>&nbsp;static boolean b = false;<br>&nbsp;static JProgressBar bar;<br>&nbsp;public static void main(String args[]){</p><p>&nbsp;&nbsp;SetBar sb = new SetBar();<br>&nbsp;&nbsp;JFrame f = new JFrame("프로그래스바 실습");<br>&nbsp;&nbsp;f.setSize(200,100);<br>&nbsp;&nbsp;Container c = f.getContentPane();<br>&nbsp;&nbsp;bar = new JProgressBar();<br>&nbsp;&nbsp;JPanel p1 = new JPanel();<br>&nbsp;&nbsp;JPanel p2 = new JPanel();<br>&nbsp;&nbsp;JButton b1 = new JButton("증가");<br>&nbsp;&nbsp;JButton b2 = new JButton("감소");<br>&nbsp;&nbsp;JButton b3 = new JButton("멈춤");<br>&nbsp;&nbsp;b1.addActionListener(new ActionListener(){<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;public void actionPerformed(ActionEvent e){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;});<br>&nbsp;&nbsp;b2.addActionListener(new ActionListener(){<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;public void actionPerformed(ActionEvent e){<br>&nbsp;&nbsp;&nbsp;&nbsp;x = 2;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;});<br>&nbsp;&nbsp;b3.addActionListener(new ActionListener(){<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;public void actionPerformed(ActionEvent e){<br>&nbsp;&nbsp;&nbsp;&nbsp;x = 0;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;});&nbsp;&nbsp;<br>&nbsp;&nbsp;p1.add(bar);<br>&nbsp;&nbsp;p2.setLayout(new GridLayout(1,3));<br>&nbsp;&nbsp;p2.add(b1);<br>&nbsp;&nbsp;p2.add(b3);<br>&nbsp;&nbsp;p2.add(b2);<br>&nbsp;&nbsp;c.add(p1,"Center");<br>&nbsp;&nbsp;c.add(p2,"South");&nbsp;<br>&nbsp;&nbsp;f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br>&nbsp;&nbsp;while(true){<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;bar.setValue(sb.getvalue(x));<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;if (bar.getValue() &gt;= bar.getMaximum()){<br>&nbsp;&nbsp;&nbsp;&nbsp;x = 0;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else if (bar.getValue() &lt;= bar.getMinimum()){<br>&nbsp;&nbsp;&nbsp;&nbsp;x = 0;<br>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;f.setVisible(true);<br>&nbsp;&nbsp;}&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;<br>&nbsp;}<br>&nbsp;</p><p>&nbsp;<br>}</p><p>class SetBar {<br>&nbsp;<br>&nbsp;int i = 0;<br>&nbsp;<br>&nbsp;public int getvalue(int index){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;if (index == 1){<br>&nbsp;&nbsp;&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(100);<br>&nbsp;&nbsp;&nbsp;&nbsp;}catch(Exception ex){}<br>&nbsp;&nbsp;&nbsp;&nbsp;i++;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if (index == 2) {</p><p>&nbsp;&nbsp;&nbsp;&nbsp;try{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(100);<br>&nbsp;&nbsp;&nbsp;&nbsp;}catch(Exception ex){}<br>&nbsp;&nbsp;&nbsp;&nbsp;i--;<br>&nbsp;&nbsp;}</p><p>&nbsp;&nbsp;return i;<br>&nbsp;}<br>&nbsp;<br>&nbsp;<br>}<br><br><br><br>=======================================<br><br>실행결과는..;<br><br><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds10.egloos.com/pds/200811/04/46/f0018046_490f1edadead0.jpg" width="201" height="103" onclick="Control.Modal.openDialog(this, event, 'http://pds10.egloos.com/pds/200811/04/46/f0018046_490f1edadead0.jpg');" /></div><br><br><br><br>이 프로그래스바가 이상한게 최소치 최대값을 위소스에서는 설정하지 않았는데..;;<br><br>설정해도 계속되는 증감값에 바로바로 대응을 못했다.<br>예를 들면..;;<br><br>증가를 눌르고 바에서 게이지가 차오르는 중간에 감소를 눌르면 <br>바로바로 감소 되는 것을 볼수 있지만..;;<br><br>끝까지 다가고 가면..;; 게이지 끝까지 도달한 시간부터 <br>감소나 멈춤을 눌르기 전까지의 시간도 왠지 보이지 않는 게이지 바가<br>계속 올라간다고 설명하면 쉽게 이해 할려나 어렵나?<br><br>아무튼..;; 끝에 가면 제데로 동작을 안하는것은 확실했다.<br><br>이사실에서 별로 어려운게 아니지만..; 내 추론이 맞다면..;;<br><br>프로그래스바의 Value의 최대 최소치는 정해져 있지만..<br><br>나의 프로그램에서&nbsp;프로그래스바의 값을 넣을때 0보다 작은수나 100보다<br>큰수가 들어갈수 있겠금 설계가 되어있다.<br><br>그럴경우 지금까지의 자바소스들은 대부분들이 정해진 값의 범주를 넘어선 값이&nbsp;<br>생겨버리면 오류가 생겼으나..;;<br>이것은 그렇지 않았다. 그 숫자는 숫자대로 증감을 하고 프로그래스바는 최대 최소치에 묶여<br>변함이 없는것이다.<br><br>이를보아 추론하건대, 프로그래스바는 최대최소치의 값의 범주를 넘어서는 값이 들어오는 경우,,;;<br>무시하거나 아니면 현상태 유지? 이정도를 하도록 클래스가 이루어진것같다.<br><br>흠...<br>별거 없는 논리를 장황하게 늘여놓았지만..;;<br>사실은 이것때문에 애를 좀 먹었었다.<br>멍청하게도..;;<br><br>입력값 == setValue 로 생각을 오래동안 했으니&nbsp;<br>그것도 아주 당현하게도 말이다.<br>멍청하긴 ㅡㅡㅋ<br>회의감에 한숨 쉬고..;; ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ<br><br>오늘은 일단 여기서 끝~ ㅋㅋㅋㅋㅋ&nbsp;&nbsp;<br><br><br><br><br><br><br></p>			 ]]> 
		</description>
		<category>실험프로젝트2학기</category>

		<comments>http://dduckjava.egloos.com/1050233#comments</comments>
		<pubDate>Tue, 04 Nov 2008 07:02:00 GMT</pubDate>
		<dc:creator>날아라숑카</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 2학기 8주차_1 ]]> </title>
		<link>http://dduckjava.egloos.com/1049645</link>
		<guid>http://dduckjava.egloos.com/1049645</guid>
		<description>
			<![CDATA[ 
  <p>프로젝트에 관한 사안이 이 블로그의 주목적이니..;;<br>이제쯤 한개는 올려줘야지 ㅎㅎㅎ;;<br><br><br>뭐 대충.. 소스는..;;<br><br><br>========================================================<br><br>import java.awt.*;<br>import java.awt.event.*;<br>import javax.swing.*;<br>import javax.swing.border.*;<br>//적당히 그냥 임폴트 시킬건 다한거다.. 디자인에 필요한것들..;;</p><p><br>public class ProJect extends JFrame{ // 원래는 상속안받는건데..;;</p><p>&nbsp;Count count = new Count();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 다이얼로그 할려다 보니까 <br>&nbsp;Setting setting = new Setting();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 암튼 이러고 하고..;; 나중에 다시 손봐야지;;<br>&nbsp;int i = 0;<br>&nbsp;JFrame f;<br>&nbsp;boolean bool = false;<br>&nbsp;Set set; <br>&nbsp;<br>&nbsp;public ProJect(){</p><p>&nbsp;&nbsp;JFrame f = new JFrame("자바프로젝트");<br>&nbsp;&nbsp;set = new Set();<br>&nbsp;&nbsp;Container c = f.getContentPane();<br>&nbsp;&nbsp;try{ <br>&nbsp;&nbsp;&nbsp;UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); <br>&nbsp;&nbsp;}catch(Exception ex){} &nbsp;&nbsp;<br>&nbsp;&nbsp;Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();<br>&nbsp;&nbsp;f.setSize(800,600);<br>&nbsp;&nbsp;Dimension frm = f.getSize();<br>&nbsp;&nbsp;int xpos = (int) (screen.getWidth()/2 - frm.getWidth()/2);<br>&nbsp;&nbsp;int ypos = (int) (screen.getHeight()/2 - frm.getHeight()/2);<br>&nbsp;&nbsp;f.setLocation(xpos, ypos); &nbsp;&nbsp;<br>&nbsp;&nbsp;JPanel p1 = new JPanel();<br>&nbsp;&nbsp;JPanel p2 = new JPanel(new GridLayout(4,1));<br>&nbsp;&nbsp;JPanel p3 = new JPanel(new GridLayout(4,10));<br>&nbsp;&nbsp;Screen scr = new Screen();<br>&nbsp;&nbsp;JButton b1 = new JButton("계산");<br>&nbsp;&nbsp;JButton b2 = new JButton("미확인");<br>&nbsp;&nbsp;JButton b3 = new JButton("회원관리");<br>&nbsp;&nbsp;JButton b4 = new JButton("환경설정");<br>&nbsp;&nbsp;b1.addActionListener(count);<br>&nbsp;&nbsp;b2.addActionListener(setting);<br>&nbsp;&nbsp;p2.add(b1);<br>&nbsp;&nbsp;p2.add(b2);<br>&nbsp;&nbsp;p2.add(b3);<br>&nbsp;&nbsp;p2.add(b4);<br>&nbsp;&nbsp;int x = JOptionPane.showConfirmDialog(this, "피시방 환경 새로 설정하시 겠습니까?", "안녕하세요", <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;if ( x == JOptionPane.YES_NO_OPTION ){<br>&nbsp;&nbsp;&nbsp;i = set.subSet();<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;p3.add(new Label("입력하신숫자는"));<br>&nbsp;&nbsp;p3.add(new Label(""+i));<br>&nbsp;&nbsp;p3.add(new Label("입니다."));<br>&nbsp;&nbsp;c.add(scr,"Center");<br>&nbsp;&nbsp;c.add(p3,"West");<br>&nbsp;&nbsp;c.add(p2,"East");<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br>&nbsp;&nbsp;f.setVisible(true);<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;} // 대충 Swing 패키지를 이용하려고 한다. 뭐.. 그게 훨씬 이쁘니까 ㅎㅎ<br>&nbsp;<br>&nbsp;public int inputcom(){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;return i;<br>&nbsp;&nbsp;<br>&nbsp;} // 이건 나중에 추가할 클래스..;; 컴퓨터 숫자용으로 쓸생각이다.<br>&nbsp;<br>&nbsp;<br>&nbsp;public static void main (String args[]){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;ProJect pj = new ProJect();<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>&nbsp;class Close {</p><p>&nbsp;&nbsp;public Close(){<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;<br>&nbsp;} // 이건 취소 버튼 눌렀을때 상황을 넣어줄려고 하는건데&nbsp;<br>&nbsp;&nbsp; //이름 헷갈릴까봐 걍쓴거다 ㅎㅎ<br>&nbsp;</p><p>&nbsp;<br>}</p><p>class Screen extends Canvas{<br>&nbsp;<br>&nbsp;public void paint(Graphics g){</p><p>&nbsp;&nbsp;g.drawRect(20,20,50,50);<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;//&nbsp;컴퓨터 상황표시를 캔버스로 할지 아니면..;;<br>&nbsp;// 다른 버튼이나 뭐 라벨이나 이런걸루 할지는 아직 안정했다.<br>&nbsp;//&nbsp;흠.. 뭘로하지?<br>&nbsp;<br>}</p><p>class Count implements ActionListener{</p><p>&nbsp;public void actionPerformed(ActionEvent ae){<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>}<br>&nbsp;// 계산 버튼 눌렀을때 호풀될 클래스.<br></p><p>class Setting implements ActionListener{</p><p>&nbsp;public void actionPerformed(ActionEvent ae){<br>&nbsp;&nbsp;<br>&nbsp;}&nbsp;<br>&nbsp;<br>}<br>&nbsp;// 이건.. 환경설정버튼 눌르면 호출할꺼.. 뭐 적당히 세팅쪽을 불러오고<br>&nbsp;// 이런거 음.. 뭐하지..;; 흠..;;<br></p><p>class Set {<br>&nbsp;<br>&nbsp;boolean bool = false;<br>&nbsp;JTextField setTF;<br>&nbsp;int i = 0;<br>&nbsp;<br>&nbsp;public int subSet(){<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;JFrame setF = new JFrame("새로운 설정");<br>&nbsp;&nbsp;setF.setSize(200,100);<br>&nbsp;&nbsp;Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();<br>&nbsp;&nbsp;Dimension frm = setF.getSize();<br>&nbsp;&nbsp;int xpos = (int) (screen.getWidth()/2 - frm.getWidth()/2);<br>&nbsp;&nbsp;int ypos = (int) (screen.getHeight()/2 - frm.getHeight()/2);<br>&nbsp;&nbsp;setF.setLocation(xpos, ypos); &nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;setF.setLocation(xpos, ypos); <br>&nbsp;&nbsp;Container setC = setF.getContentPane();<br>&nbsp;&nbsp;JPanel setp1 = new JPanel();<br>&nbsp;&nbsp;JPanel setp2 = new JPanel(new GridLayout(1,3));<br>&nbsp;&nbsp;JPanel setp3 = new JPanel(new GridLayout(1,3));<br>&nbsp;&nbsp;setTF = new JTextField(10);<br>&nbsp;&nbsp;JButton setB1 = new JButton("저장");<br>&nbsp;&nbsp;setB1.addActionListener(new ActionListener(){<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;public void actionPerformed(ActionEvent e){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool = true;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;});<br>&nbsp;&nbsp;setp1.add(new JLabel("사용가능한 컴퓨터는 몇대 입니까?"));<br>&nbsp;&nbsp;setp2.add(new JLabel(""));<br>&nbsp;&nbsp;setp2.add(setTF);<br>&nbsp;&nbsp;setp2.add(new JLabel("대"));<br>&nbsp;&nbsp;setp3.add(new JLabel(""));<br>&nbsp;&nbsp;setp3.add(setB1);<br>&nbsp;&nbsp;setp3.add(new JLabel(""));<br>&nbsp;&nbsp;setC.add(setp1,"North");<br>&nbsp;&nbsp;setC.add(setp2,"Center");<br>&nbsp;&nbsp;setC.add(setp3,"South");<br>&nbsp;&nbsp;setF.setVisible(true);<br>&nbsp;&nbsp;while(true){<br>&nbsp;&nbsp;&nbsp;if( bool == true ){<br>&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}&nbsp;&nbsp;<br>&nbsp;&nbsp;i = Integer.parseInt(setTF.getText());<br>&nbsp;&nbsp;return i; <br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>}<br><br>&nbsp;// 뭐, 이건 새로운 설정할.. 초창기 설정을 할려구 한건데.. 음..<br>아무래도 다이얼로그로 바꾸어야 할듯..;; 흠 ㅋㅋ<br><br><br>========================================================<br><br><br>뭐 이러면 결과는.. 아직 뭐 디자인 초기단계에서 노는중이라 별건 업지만..;;<br><br>초기 실행하면..;;<br><br><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds10.egloos.com/pds/200811/03/46/f0018046_490f04a036f54.jpg" width="274" height="124" onclick="Control.Modal.openDialog(this, event, 'http://pds10.egloos.com/pds/200811/03/46/f0018046_490f04a036f54.jpg');" /></div><br>예를 눌르면..;; 세팅화면으로 아니오를 눌르면..;; 메인화면으로 간다.<br><br><br><br>세팅화면..;;<br><br><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds11.egloos.com/pds/200811/03/46/f0018046_490f04db46236.jpg" width="201" height="102" onclick="Control.Modal.openDialog(this, event, 'http://pds11.egloos.com/pds/200811/03/46/f0018046_490f04db46236.jpg');" /></div><br>메인화면..;;<br><br><div style="text-align:center"><img class="image_mid" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds10.egloos.com/pds/200811/03/46/f0018046_490f04ea2661d.jpg" width="500" height="366.875" onclick="Control.Modal.openDialog(this, event, 'http://pds10.egloos.com/pds/200811/03/46/f0018046_490f04ea2661d.jpg');" /></div><br>뭐 왼쪽에 라벨은 프로그램 잘 인식 되는지 확인삼아 본거구<br><br>아직 이벤트 처리는 안해줬다.<br>이벤트 한개씩 한개씩 해야지 흠.. ㅎㅎㅎㅎㅎ<br><br>뭐 보면..;; <br><br>아직은 디게 허접하지만...;; 한개씩 만들어 가는 재미가 있으니까..;;<br><br>짜면서 보면 사용할수 있는 게 많아서 뭘 쓸까 고민을 많이 하게 된다. 이렇게 해두 <br>프로그램이 잘 돌아가는게 참 맘에 든다.<br><br>가운데 현재 핏시상황들을 어떻게 표시하지.. 음..<br>할수 있는게 많으니까 더 고민이네 ㅡㅡㅋ<br><br>고민이나 좀더 해봐야겠다.<br><br>좀더 효율적인걸로~<br><br><br></p>			 ]]> 
		</description>
		<category>실험프로젝트2학기</category>

		<comments>http://dduckjava.egloos.com/1049645#comments</comments>
		<pubDate>Mon, 03 Nov 2008 14:26:26 GMT</pubDate>
		<dc:creator>날아라숑카</dc:creator>
	</item>
</channel>
</rss>
