<?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>Sensation</title>
	<link>http://tobby48.egloos.com</link>
	<description>진정한 프로그래머는 특정언어만 잘 하는게 아니다..

</description>
	<language>ko</language>
	<pubDate>Fri, 07 Aug 2009 09:05:22 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>Sensation</title>
		<url>http://pds5.egloos.com/logo/200703/15/76/d0051576.jpg</url>
		<link>http://tobby48.egloos.com</link>
		<width>80</width>
		<height>137</height>
		<description>진정한 프로그래머는 특정언어만 잘 하는게 아니다..

</description>
	</image>
  	<item>
		<title><![CDATA[ [Java] 프레임 이동, 투명, 모양 정의한 예제소스 ]]> </title>
		<link>http://tobby48.egloos.com/2923010</link>
		<guid>http://tobby48.egloos.com/2923010</guid>
		<description>
			<![CDATA[ 
  급하게 해서 주석이 없는 .....<br />
<br />
import java.awt.BorderLayout;<br />
import java.awt.Color;<br />
import java.awt.Dimension;<br />
import java.awt.GradientPaint;<br />
import java.awt.Graphics;<br />
import java.awt.Graphics2D;<br />
import java.awt.Paint;<br />
import java.awt.Point;<br />
import java.awt.Shape;<br />
import java.awt.event.ComponentEvent;<br />
import java.awt.event.ComponentListener;<br />
import java.awt.event.MouseAdapter;<br />
import java.awt.event.MouseEvent;<br />
import java.awt.event.MouseMotionAdapter;<br />
import java.awt.geom.RoundRectangle2D;<br />
<br />
import javax.swing.JFrame;<br />
import javax.swing.JPanel;<br />
<br />
public class MovePanel extends JFrame implements ComponentListener {<br />
<br />
&nbsp;&nbsp; &nbsp;/**<br />
&nbsp;&nbsp; &nbsp; * <br />
&nbsp;&nbsp; &nbsp; */<br />
&nbsp;&nbsp; &nbsp;private static final long serialVersionUID = 1L;<br />
<br />
&nbsp;&nbsp; &nbsp;public JPanel jPanel1 = new JPanel(){<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* (non-Javadoc)<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; * @see javax.swing.JComponent#paintComponent(java.awt.Graphics)<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; */<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;protected void paintComponent(Graphics g) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if (g instanceof Graphics2D) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Paint p = new GradientPaint(getWidth(), getHeight(), new Color(221, 221, 221, 50), 0.0f, 0.0f,<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;new Color(221, 221, 221, 150), true);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Graphics2D g2d = (Graphics2D) g;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;g2d.setPaint(p);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;g2d.fillRect(0, 0, getWidth(), getHeight());<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} else {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;super.paintComponent(g);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;};<br />
<br />
&nbsp;&nbsp; &nbsp;/* move by mouse pointer */<br />
&nbsp;&nbsp; &nbsp;Point mainFrameLocation = new Point(0, 0);<br />
&nbsp;&nbsp; &nbsp;Point mouseClickedLocation = new Point(0, 0);<br />
<br />
&nbsp;&nbsp; &nbsp;public MovePanel() {<br />
<br />
//&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;jPanel1.setOpaque(true);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;addMouseListener(new FrameMove_mouseAdapter(this));<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;addMouseMotionListener(new FrameMove_mouseMotionAdapter(this));<br />
<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* root frame */<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;setMinimumSize(new Dimension(200, 200));<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;setUndecorated(true);<br />
<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;getContentPane().add(jPanel1, BorderLayout.CENTER);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;setLocationRelativeTo(null);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;addComponentListener(this);<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
&nbsp;&nbsp; &nbsp;public static void main(String[] args) {<br />
<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;java.awt.EventQueue.invokeLater(new Runnable() {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public void run() {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;MovePanel mainFrame = new MovePanel();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;mainFrame.setVisible(true);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;com.sun.awt.AWTUtilities.setWindowOpacity(mainFrame, 80.0f / 100.0f);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;});<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
&nbsp;&nbsp; &nbsp;public void componentHidden(ComponentEvent arg0) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// TODO Auto-generated method stub<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
&nbsp;&nbsp; &nbsp;public void componentMoved(ComponentEvent arg0) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// TODO Auto-generated method stub<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
&nbsp;&nbsp; &nbsp;public void componentResized(ComponentEvent arg0) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// TODO Auto-generated method stub<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Shape shape = new RoundRectangle2D.Float(0, 0, getWidth(),<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;getHeight(), 20, 20);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;com.sun.awt.AWTUtilities.setWindowShape(this, shape);<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
&nbsp;&nbsp; &nbsp;public void componentShown(ComponentEvent arg0) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// TODO Auto-generated method stub<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;}<br />
}<br />
<br />
/**<br />
&nbsp;* @author tobby48 2009. 07. 22<br />
&nbsp;*/<br />
class FrameMove_mouseAdapter extends MouseAdapter {<br />
&nbsp;&nbsp; &nbsp;private MovePanel frame;<br />
<br />
&nbsp;&nbsp; &nbsp;FrameMove_mouseAdapter(MovePanel mainframe) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.frame = mainframe;<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
&nbsp;&nbsp; &nbsp;public void mousePressed(MouseEvent e) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;frame.mouseClickedLocation.x = e.getX();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;frame.mouseClickedLocation.y = e.getY();<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
&nbsp;&nbsp; &nbsp;public void mouseReleased(MouseEvent e) {<br />
&nbsp;&nbsp; &nbsp;}<br />
}<br />
<br />
/**<br />
&nbsp;* @author tobby48 2009. 07. 22<br />
&nbsp;*/<br />
class FrameMove_mouseMotionAdapter extends MouseMotionAdapter {<br />
&nbsp;&nbsp; &nbsp;private MovePanel frame;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;FrameMove_mouseMotionAdapter(MovePanel mainframe) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.frame = mainframe;<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
&nbsp;&nbsp; &nbsp;public void mouseMove(MouseEvent e) {}<br />
<br />
&nbsp;&nbsp; &nbsp;public void mouseDragged(MouseEvent e) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;frame.setLocation(e.getLocationOnScreen().x - frame.mouseClickedLocation.x,<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;e.getLocationOnScreen().y - frame.mouseClickedLocation.y);<br />
&nbsp;&nbsp; &nbsp;}<br />
}<br />
<br />
<br/><br/>tag : <a href="/tag/jpanel" rel="tag">jpanel</a>,&nbsp;<a href="/tag/jframe" rel="tag">jframe</a>,&nbsp;<a href="/tag/mousemotion" rel="tag">mousemotion</a>,&nbsp;<a href="/tag/mouseev" rel="tag">mouseev</a>,&nbsp;<a href="/tag/shape" rel="tag">shape</a>			 ]]> 
		</description>
		<category>App Programming</category>
		<category>jpanel</category>
		<category>jframe</category>
		<category>mousemotion</category>
		<category>mouseev</category>
		<category>shape</category>

		<comments>http://tobby48.egloos.com/2923010#comments</comments>
		<pubDate>Fri, 07 Aug 2009 09:05:22 GMT</pubDate>
		<dc:creator>tobby48</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [java] 프레임 모양바꾸기, 투명하게 만들기 ]]> </title>
		<link>http://tobby48.egloos.com/2803177</link>
		<guid>http://tobby48.egloos.com/2803177</guid>
		<description>
			<![CDATA[ 
  네이트온 메신저에 보면, 메신저 창을 투명하게 할 수도 있다.<br />
<br />
또한 frame을 원 형태로 만들수 있지 않을까 싶어서 찾아봤다. <br />
<br />
아래 <span style="font-weight: bold; color: rgb(255, 0, 0);">AWTUtilitiesWrapper </span>클래스와 <span style="font-weight: bold; color: rgb(255, 0, 0);">빨간색 표시 코드</span>만 참조해서 보면 된다.<br />
<br />
<br />
import java.awt.Component;<br />
import java.awt.GraphicsConfiguration;<br />
import java.awt.Shape;<br />
import java.awt.Window;<br />
import java.lang.reflect.InvocationTargetException;<br />
import java.lang.reflect.Method;<br />
import java.util.logging.Level;<br />
import java.util.logging.Logger;<br />
<br />
/**<br />
&nbsp;* <br />
&nbsp;* @author Anthony Petrov (머리 좋은 사람 같다....................................................)<br />
&nbsp;*/<br />
public class AWTUtilitiesWrapper {<br />
<br />
&nbsp;&nbsp;&nbsp; private static Class&lt;?&gt; awtUtilitiesClass;<br />
&nbsp;&nbsp;&nbsp; private static Class&lt;?&gt; translucencyClass;<br />
&nbsp;&nbsp;&nbsp; private static Method mIsTranslucencySupported, mIsTranslucencyCapable,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mSetWindowShape, mSetWindowOpacity, mSetWindowOpaque;<br />
&nbsp;&nbsp;&nbsp; public static Object PERPIXEL_TRANSPARENT, TRANSLUCENT,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; PERPIXEL_TRANSLUCENT;<br />
<br />
&nbsp;&nbsp;&nbsp; static void init() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; translucencyClass = Class<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .forName("com.sun.awt.AWTUtilities$Translucency");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (translucencyClass.isEnum()) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Object[] kinds = translucencyClass.getEnumConstants();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (kinds != null) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; PERPIXEL_TRANSPARENT = kinds[0];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; TRANSLUCENT = kinds[1];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; PERPIXEL_TRANSLUCENT = kinds[2];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mIsTranslucencySupported = awtUtilitiesClass.getMethod(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "isTranslucencySupported", translucencyClass);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mIsTranslucencyCapable = awtUtilitiesClass.getMethod(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "isTranslucencyCapable", GraphicsConfiguration.class);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mSetWindowShape = awtUtilitiesClass.getMethod("setWindowShape",<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Window.class, Shape.class);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity",<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Window.class, float.class);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mSetWindowOpaque = awtUtilitiesClass.getMethod("setWindowOpaque",<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Window.class, boolean.class);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (NoSuchMethodException ex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level.SEVERE, null, ex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (SecurityException ex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level.SEVERE, null, ex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (ClassNotFoundException ex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level.SEVERE, null, ex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; static {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; init();<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; private static boolean isSupported(Method method, Object kind) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (awtUtilitiesClass == null || method == null) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Object ret = method.invoke(null, kind);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (ret instanceof Boolean) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return ((Boolean) ret).booleanValue();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (IllegalAccessException ex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level.SEVERE, null, ex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (IllegalArgumentException ex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level.SEVERE, null, ex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (InvocationTargetException ex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level.SEVERE, null, ex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public static boolean isTranslucencySupported(Object kind) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (translucencyClass == null) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return isSupported(mIsTranslucencySupported, kind);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public static boolean isTranslucencyCapable(GraphicsConfiguration gc) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return isSupported(mIsTranslucencyCapable, gc);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; private static void set(Method method, Window window, Object value) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (awtUtilitiesClass == null || method == null) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; method.invoke(null, window, value);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (IllegalAccessException ex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level.SEVERE, null, ex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (IllegalArgumentException ex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level.SEVERE, null, ex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (InvocationTargetException ex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level.SEVERE, null, ex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; private static void set(Method method, Component component, Object value) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (awtUtilitiesClass == null || method == null) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; method.invoke(null, component, value);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (IllegalAccessException ex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level.SEVERE, null, ex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (IllegalArgumentException ex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level.SEVERE, null, ex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (InvocationTargetException ex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Level.SEVERE, null, ex);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static void setWindowShape(Window window, Shape shape) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; set(mSetWindowShape, window, shape);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public static void setWindowOpacity(Window window, float opacity) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; set(mSetWindowOpacity, window, Float.valueOf(opacity));<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public static void setWindowOpaque(Window window, boolean opaque) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; set(mSetWindowOpaque, window, Boolean.valueOf(opaque));<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static void setComponentShape(Component component, Shape shape) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; set(mSetWindowShape, component, shape);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<br />
package layer;<br />
<br />
import java.awt.BorderLayout;<br />
import java.awt.Dimension;<br />
import java.awt.GraphicsConfiguration;<br />
import java.awt.Image;<br />
import java.awt.Point;<br />
import java.awt.Toolkit;<br />
import java.io.IOException;<br />
import java.net.URL;<br />
<br />
import javax.swing.JFrame;<br />
import javax.swing.JSplitPane;<br />
import javax.swing.RootPaneContainer;<br />
<br />
import panel.AutoSystemControlPanel;<br />
import panel.MediaMainPanel;<br />
import panel.MediaPlayControlPanel;<br />
import panel.MediaPlayListPanel;<br />
import panel.MediaTitlePanel;<br />
import basicUI.MainBasicSplitPaneUI;<br />
import env.EnvValue;<br />
import env.StaticMethod;<br />
<br />
/**<br />
&nbsp;* @author tobby48 2009. 07. 20<br />
&nbsp;*/<br />
public class MediaMainFrame extends JFrame implements RootPaneContainer {<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private static final long serialVersionUID = 1L;<br />
<br />
&nbsp;&nbsp;&nbsp; /* layout */<br />
&nbsp;&nbsp;&nbsp; public JSplitPane mainSplitPane;<br />
<br />
&nbsp;&nbsp;&nbsp; public MediaMainPanel mainPlayerRightPanel;<br />
&nbsp;&nbsp;&nbsp; public AutoSystemControlPanel mainAutoSystemControlPanel;<br />
<br />
&nbsp;&nbsp;&nbsp; public MediaTitlePanel titlePanel;<br />
&nbsp;&nbsp;&nbsp; public MediaPlayListPanel playListPanel;<br />
&nbsp;&nbsp;&nbsp; public MediaPlayControlPanel playControlPanel;<br />
<br />
&nbsp;&nbsp;&nbsp; /* move by mouse pointer */<br />
&nbsp;&nbsp;&nbsp; public Point mouseClickedLocation = new Point(0, 0);<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param gc<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public MediaMainFrame(GraphicsConfiguration gc) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; super(gc);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; initComponents();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="font-weight: bold; color: rgb(255, 0, 0);">StaticMethod.applyWindowShape(this, 20, 20);</span> // frame 의 양 모서리들을 약간 둥근 형태로 설정<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-weight: bold; color: rgb(255, 0, 0);">AWTUtilitiesWrapper.setWindowOpacity(this, 75.0f / 100.0f);</span> // 75% 로 frame 를 투명하게 설정<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; setLocationRelativeTo(null);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private void initComponents() throws IOException {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* right of frame */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainPlayerRightPanel = new MediaMainPanel();<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* left of frame */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainAutoSystemControlPanel = new AutoSystemControlPanel();<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* panel2 */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; titlePanel = new MediaTitlePanel(this);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; titlePanel.setPreferredSize(new Dimension(EnvValue.TITLEFRAME_WIDTH,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EnvValue.TITLEFRAME_HEIGHT));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainPlayerRightPanel.add(titlePanel, BorderLayout.NORTH);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* panel3 */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; playListPanel = new MediaPlayListPanel();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; playListPanel.setPreferredSize(new Dimension(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EnvValue.PLAYLISTFRAME_WIDTH, EnvValue.PLAYLISTFRAME_HEIGHT));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainPlayerRightPanel.add(playListPanel, BorderLayout.CENTER);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* panel4 */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; playControlPanel = new MediaPlayControlPanel();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; playControlPanel.setPreferredSize(new Dimension(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EnvValue.PLAYCONTROLFRAME_WIDTH,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EnvValue.PLAYCONTROLFRAME_HEIGHT));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainPlayerRightPanel.add(playControlPanel, BorderLayout.SOUTH);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainAutoSystemControlPanel, mainPlayerRightPanel);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainSplitPane.setResizeWeight(0.5);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainSplitPane.setDividerLocation(10);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainSplitPane.setOneTouchExpandable(true);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainSplitPane.setContinuousLayout(true);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainSplitPane.setVisible(true);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Image imgPuzzle = null;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; imgPuzzle = Toolkit<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .getDefaultToolkit()<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .getImage(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; new URL(<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; "file:///D:/lg-nortel/env/eclipse-SDK-3.3-win32/workspace/Java/MediaDHO/border.gif"));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MainBasicSplitPaneUI main = new MainBasicSplitPaneUI(imgPuzzle);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainSplitPane.setDividerSize(10);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mainSplitPane.setUI(main);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* root frame */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; setMinimumSize(new Dimension(EnvValue.MAINFRAME_WIDTH,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EnvValue.MAINFRAME_HEIGHT));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; setUndecorated(true);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; getContentPane().add(mainSplitPane, BorderLayout.CENTER);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // pack();<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<br />
/**<br />
&nbsp;* @author tobby48<br />
&nbsp;* 2009. 07. 24<br />
&nbsp;*/<br />
public class StaticMethod {<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param component<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param arcw<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param arch<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public static synchronized void applyWindowShape(final Window component, final float arcw, final float arch) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (component == null) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; component.addComponentListener(new ComponentAdapter() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* (non-Javadoc)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* @see java.awt.event.ComponentAdapter#componentResized(java.awt.event.ComponentEvent)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void componentResized(ComponentEvent evt) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Shape shape = new RoundRectangle2D.Float(0, 0, component.getWidth(),<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; component.getHeight(), arcw, arch);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="font-weight: bold; color: rgb(255, 0, 0);">AWTUtilitiesWrapper.setWindowShape(component, shape);</span><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param path<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public static ImageIcon createImageIcon(String path) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; java.net.URL imgURL = MediaMainFrame.class.getResource(path);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (imgURL != null) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new ImageIcon(imgURL);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.err.println("Couldn't find file: " + path);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return null;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br/><br/>tag : <a href="/tag/AWTUtilitiesWrapper" rel="tag">AWTUtilitiesWrapper</a>,&nbsp;<a href="/tag/setWindowShape" rel="tag">setWindowShape</a>,&nbsp;<a href="/tag/setWindowOpacity" rel="tag">setWindowOpacity</a>,&nbsp;<a href="/tag/투명" rel="tag">투명</a>,&nbsp;<a href="/tag/모양" rel="tag">모양</a>			 ]]> 
		</description>
		<category>App Programming</category>
		<category>AWTUtilitiesWrapper</category>
		<category>setWindowShape</category>
		<category>setWindowOpacity</category>
		<category>투명</category>
		<category>모양</category>

		<comments>http://tobby48.egloos.com/2803177#comments</comments>
		<pubDate>Wed, 29 Jul 2009 01:43:50 GMT</pubDate>
		<dc:creator>tobby48</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [java] 프레임 스크린 중앙에 배치하기 ]]> </title>
		<link>http://tobby48.egloos.com/2803163</link>
		<guid>http://tobby48.egloos.com/2803163</guid>
		<description>
			<![CDATA[ 
  일반적으로 java 를 실행하게 되면 <br />
Screen 중앙에 배치되지 않고, 왼쪽 상단에 배치된다.<br />
<br />
그래서 보통 아래와 같은 절차로 Screen 중앙에 프레임을 배치시킨다.<br />
<br />
<span style="font-weight: bold; color: rgb(255, 0, 0);">Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();</span><br style="font-weight: bold; color: rgb(255, 0, 0);"><span style="font-weight: bold; color: rgb(255, 0, 0);">frame.setLocation((dim.width/2)-(frame.getWidth()/2), (dim.height/2)-(frame.getHeight()/2));</span><br />
<br />
<br />
마음속으로 Screen 중앙을 왼쪽, 오른쪽으로 양분한 다음 위 코드를 생각해보면<br />
<br />
쉽게 만들수 있는 코드이다.<br />
<br />
나또한 대학2년때 위와 같이 코딩했었다.<br />
<br />
<br />
하지만 다른 방법이 있다.<br />
<br />
단 한줄이면 된다.<br />
<br />
<span style="font-weight: bold; color: rgb(255, 0, 0);">frame.setLocationRelativeTo(null);</span><br />
<br />
<span style="color: rgb(0, 0, 0);"><br />
이제 코딩 쉽게 하자.<br />
<br />
API를 수시로 참조하여 메소드를 많이 아는 것이 코딩의 힘이다. Java 나 C# 같은 언어는 더더욱..<span style="font-weight: bold;"><br />
</span></span><br/><br/>tag : <a href="/tag/setLocationRelativeTo" rel="tag">setLocationRelativeTo</a>,&nbsp;<a href="/tag/중앙" rel="tag">중앙</a>,&nbsp;<a href="/tag/Toolkit" rel="tag">Toolkit</a>,&nbsp;<a href="/tag/프레임" rel="tag">프레임</a>			 ]]> 
		</description>
		<category>App Programming</category>
		<category>setLocationRelativeTo</category>
		<category>중앙</category>
		<category>Toolkit</category>
		<category>프레임</category>

		<comments>http://tobby48.egloos.com/2803163#comments</comments>
		<pubDate>Wed, 29 Jul 2009 01:33:06 GMT</pubDate>
		<dc:creator>tobby48</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [java] Component 재정의로 나만의 UI 꾸미기(JPanel, JScrollBar) ]]> </title>
		<link>http://tobby48.egloos.com/2803133</link>
		<guid>http://tobby48.egloos.com/2803133</guid>
		<description>
			<![CDATA[ 
  우리는 일반적으로 JAVA로 GUI를 꾸밀때 Swing 를 사용하게 된다<br />
<br />
JPanel panel = new JPanel();<br />
JLabel label = new JLabel("안녕하세요");<br />
panel.add(label);<br />
<br />
이런식으로 코딩을 하게되면, java에서 제공해주는 JPanel 과 JLabel component를 그대로 사용하게 된다<br />
따라서 정해진 모양과 색상을 그대로 사용하게 되어 멋진(?) UI를 구성하긴 어렵다.<br />
<br />
일반적인 대학 수업과정 중에서는 다루지 않거나, 깊게 생각하진 않는게 일반적이다.<br />
java api를 보면 개발자를 위해 클래스를 재정의 함으로써, UI구성을 위한 Look&amp;Feel 용 component를 제공해주고 있다.<br />
이 종류로써는<span style="font-weight: bold; color: rgb(255, 0, 0);"> javax.swing.plaf.basic 패키지 내에 있는 Basic로 시작하는 클래스</span>들이다.<br />
또한 JPanel 같은 클래스는 panel 배경의 색깔을 바꾸는 방법이 있다.<br />
JPanel 클래스를 상속하여, <span style="font-weight: bold; color: rgb(255, 0, 0);">protected void paintComponent(Graphics g)</span> 메소드를 오버라이딩 하여 재정의하면 된다.<br />
해당 클래스내의 메소드는 java가 component를 구성하면서 내부적으로 호출하기 때문에 개발자는 메소드만 오버라이딩 해주면 된다.<br />
<br />
<br />
아래 코드를 참고하여 실행하면 그 차이를 느낄 수 있다.<br />
<br />
<br />
&lt;기본으로 제공하는 component 를 사용하는 경우&gt;<br />
JScrollPane tableScrollPane = new JScrollPane();<br />
JPanel panel = new JPanel();<br />
panel.add(tableScrollPane);<br />
<br />
<br />
<br />
&lt;사용자 재정의 component 를 사용하는 경우&gt;<br />
JScrollPane tableScrollPane = new JScrollPane();<br />
JPanel panel = new <span style="font-weight: bold; color: rgb(255, 0, 0);">AutoSystemControlPanel</span>();<br />
tableScrollPane.getVerticalScrollBar().<span style="color: rgb(0, 0, 153); font-weight: bold;">setUI</span>(<span style="font-weight: bold; color: rgb(255, 0, 0);">new PlayListScrollBarUI()</span>);<br />
panel.add(tableScrollPane);<br />
<br />
<br />
/**<br />
&nbsp;* @author tobby48<br />
&nbsp;* 2009. 07. 28<br />
&nbsp;*/<br />
public class AutoSystemControlPanel <span style="font-weight: bold; color: rgb(255, 0, 0);">extends JPanel</span> {<br />
<br />
&nbsp;&nbsp;&nbsp; public AutoSystemControlPanel(){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; setLayout(new BorderLayout());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; initComponents();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; setDoubleBuffered(false);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; setOpaque(false);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; private void initComponents() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub<br />
&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /* (non-Javadoc)<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @see javax.swing.JComponent#paintComponent(java.awt.Graphics)<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; <span style="font-weight: bold; color: rgb(255, 0, 0);">protected void paintComponent(Graphics g)</span> {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (g instanceof Graphics2D) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Paint p = new <span style="background-color: rgb(255, 255, 255); color: rgb(255, 0, 0); font-weight: bold;">GradientPaint</span>(0.0f, 0.0f, new Color(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EnvValue.BACKGROUND_RED, EnvValue.BACKGROUND_GREEN,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EnvValue.BACKGROUND_BLUE, 50), getWidth(), getHeight(),<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; new Color(EnvValue.BACKGROUND_RED, EnvValue.BACKGROUND_GREEN,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EnvValue.BACKGROUND_BLUE, 150), true);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Graphics2D g2d = (Graphics2D) g;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; g2d.setPaint(p);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; g2d.fillRect(0, 0, getWidth(), getHeight());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; super.paintComponent(g);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<br />
/**<br />
&nbsp;* @author tobby48<br />
&nbsp;* 2009. 07. 28<br />
&nbsp;*/<br />
public final class PlayListScrollBarUI <span style="font-weight: bold; color: rgb(255, 0, 0);">extends BasicScrollBarUI</span> {<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; &nbsp;* (non-Javadoc)<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp; ScrollBar 를 구성할때의 색상을 지정, thumbRect와 trackRect 과 같은 필드는 api 를 참조하면 그림과 함께 어느것인지 <br />
&nbsp;&nbsp;&nbsp;&nbsp; * 자세하게 나온다.<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @see javax.swing.plaf.basic.BasicScrollBarUI#configureScrollBarColors()<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; protected void configureScrollBarColors() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; thumbRect.width = 5;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; trackRect.width = 5;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; thumbColor = new Color(0x336699);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; thumbDarkShadowColor = new Color(0x009999);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; thumbHighlightColor = new Color(0xffccff);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; thumbLightShadowColor = new Color(0x99ccff);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; trackColor = new Color(0x99cccc);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; trackHighlightColor = new Color(0x006699);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
//&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; AWTUtilitiesWrapper.setComponentShape((Window)thumbRect, shape);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; &nbsp;* (non-Javadoc)<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp; ScrollBar 상단에 화살표 모양의 버튼 색상 지정<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @see javax.swing.plaf.basic.BasicScrollBarUI#createDecreaseButton(int)<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; protected JButton createDecreaseButton(int orientation) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; JButton button = new BasicArrowButton(orientation);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; button.setBackground(new Color(51, 102, 153));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; button.setForeground(new Color(51, 102, 153));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return button;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp; &nbsp;* (non-Javadoc)<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp; ScrollBar 하단에 화살표 모양의 버튼 색상 지정<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @see javax.swing.plaf.basic.BasicScrollBarUI#createIncreaseButton(int)<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; protected JButton createIncreaseButton(int orientation) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; JButton button = new BasicArrowButton(orientation);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; button.setBackground(new Color(51, 102, 153));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; button.setForeground(new Color(51, 102, 153));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return button;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp; protected Dimension getMaximumThumbSize() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new Dimension(10, 20);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<br />
위와 같이, JPanel 를 상속한 클래스를 사용하여 배경을 <span style="background-color: rgb(255, 255, 255); color: rgb(255, 0, 0); font-weight: bold;">GradientPaint </span>효과를 준 뒤,<br />
<span style="font-weight: bold; color: rgb(255, 0, 0);">BasicScrollBarUI</span> 클래스를 상속하여 ScrollBar를 재정의하여 JScrollPane 클래스의 getVerticalScrollBar().<span style="color: rgb(0, 0, 153); font-weight: bold;">setUI() </span><span style="color: rgb(0, 0, 153);"><span style="color: rgb(0, 0, 0);">를 사용하여<br />
수직 스크롤바를 얻어 UI를 재정의한 클래스의 객체로 지정하게 되면 멋진 panel 과 scrollbar 를 얻을 수 있다.<br />
<br />
Basic 계열 클래스들은 종류가 더 많다.<br />
각자 취향에 맞는 component 를 구성해 보는것도 재미있는 시간이 될 것 같다.<br />
</span></span><br/><br/>tag : <a href="/tag/javax.swing.plaf.basic" rel="tag">javax.swing.plaf.basic</a>,&nbsp;<a href="/tag/paintComponent" rel="tag">paintComponent</a>,&nbsp;<a href="/tag/setUI" rel="tag">setUI</a>,&nbsp;<a href="/tag/BasicScrollBarUI" rel="tag">BasicScrollBarUI</a>,&nbsp;<a href="/tag/GradientPaint" rel="tag">GradientPaint</a>			 ]]> 
		</description>
		<category>App Programming</category>
		<category>javax.swing.plaf.basic</category>
		<category>paintComponent</category>
		<category>setUI</category>
		<category>BasicScrollBarUI</category>
		<category>GradientPaint</category>

		<comments>http://tobby48.egloos.com/2803133#comments</comments>
		<pubDate>Wed, 29 Jul 2009 01:15:46 GMT</pubDate>
		<dc:creator>tobby48</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [Java] mouseDragged()에서 흔들림 없이 Component 이동 ]]> </title>
		<link>http://tobby48.egloos.com/2723865</link>
		<guid>http://tobby48.egloos.com/2723865</guid>
		<description>
			<![CDATA[ 
  어렵지 않은 부분이었지만 몇시간 동안 해맸네요.<br />
계속 JPanel이 흔들려서 고생하였습니다.<br />
<br />
아래 붉은 부분을 getLocationOnScreen() 을 쓰지 않고, frame.jPanel1.getMousePosition() 을 사용하다보니<br />
계속 JPanel 이 흔들리더군요. <br />
MouseEvent 객체인 e의 메소드인 getX() 와 getY() 값이 반복적으로 바뀌면서 흔들림이 일어났습니다.<br />
<br />
네이버에 찾아보니 뚜렷한 방법은 없고, Adapter 로 구현해서 그렇다고들 하던데, <br />
이벤트를 Adapter로 받지 않고 해보아도 동일한 문제가 있었기에 설득력이 없었습니다.<br />
<br />
핵심코드는 붉은 색으로 표기하였습니다.<br />
<br />
<br />
package gui;<br />
<br />
import java.awt.BorderLayout;<br />
import java.awt.Cursor;<br />
import java.awt.Dimension;<br />
import java.awt.Point;<br />
import java.awt.event.MouseAdapter;<br />
import java.awt.event.MouseEvent;<br />
import java.awt.event.MouseListener;<br />
import java.awt.event.MouseMotionAdapter;<br />
import java.awt.event.MouseMotionListener;<br />
<br />
import javax.swing.JFrame;<br />
import javax.swing.JPanel;<br />
<br />
public class MovePanel extends JFrame {<br />
<br />
&nbsp;&nbsp; &nbsp;/**<br />
&nbsp;&nbsp; &nbsp; * <br />
&nbsp;&nbsp; &nbsp; */<br />
&nbsp;&nbsp; &nbsp;private static final long serialVersionUID = 1L;<br />
<br />
&nbsp;&nbsp; &nbsp;public JPanel jPanel1 = new JPanel();<br />
<br />
&nbsp;&nbsp; &nbsp;/* move by mouse pointer */<br />
&nbsp;&nbsp; &nbsp;Point mainFrameLocation = new Point(0, 0);<br />
&nbsp;&nbsp; &nbsp;Point mouseClickedLocation = new Point(0, 0);<br />
<br />
&nbsp;&nbsp; &nbsp;public MovePanel() {<br />
<br />
//&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;jPanel1.setOpaque(true);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;addMouseListener(new FrameMove_mouseAdapter(this));<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;addMouseMotionListener(new FrameMove_mouseMotionAdapter(this));<br />
<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;/* root frame */<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;setMinimumSize(new Dimension(200, 200));<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;setUndecorated(true);<br />
<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;getContentPane().add(jPanel1, BorderLayout.CENTER);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;setLocationRelativeTo(null);<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
&nbsp;&nbsp; &nbsp;public static void main(String[] args) {<br />
<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;java.awt.EventQueue.invokeLater(new Runnable() {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;public void run() {<br />
<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;MovePanel mainFrame = new MovePanel();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;mainFrame.setVisible(true);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;});<br />
&nbsp;&nbsp; &nbsp;}<br />
}<br />
<br />
/**<br />
&nbsp;* @author tobby48 2009. 07. 22<br />
&nbsp;*/<br />
class FrameMove_mouseAdapter extends MouseAdapter {<br />
&nbsp;&nbsp; &nbsp;private MovePanel frame;<br />
<br />
&nbsp;&nbsp; &nbsp;FrameMove_mouseAdapter(MovePanel mainframe) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.frame = mainframe;<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
&nbsp;&nbsp; &nbsp;public void mousePressed(MouseEvent e) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;frame.mouseClickedLocation.x = e.getX();<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;frame.mouseClickedLocation.y = e.getY();<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
&nbsp;&nbsp; &nbsp;public void mouseReleased(MouseEvent e) {<br />
&nbsp;&nbsp; &nbsp;}<br />
}<br />
<br />
/**<br />
&nbsp;* @author tobby48 2009. 07. 22<br />
&nbsp;*/<br />
class FrameMove_mouseMotionAdapter extends MouseMotionAdapter {<br />
&nbsp;&nbsp; &nbsp;private MovePanel frame;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;FrameMove_mouseMotionAdapter(MovePanel mainframe) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;this.frame = mainframe;<br />
&nbsp;&nbsp; &nbsp;}<br />
<br />
&nbsp;&nbsp; &nbsp;public void mouseMove(MouseEvent e) {}<br />
<br />
&nbsp;&nbsp; &nbsp;public void mouseDragged(MouseEvent e) {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="font-weight: bold; color: rgb(255, 0, 0);">&nbsp;frame.setLocation(e.getLocationOnScreen().x - frame.mouseClickedLocation.x,</span><br style="font-weight: bold; color: rgb(255, 0, 0);"><span style="font-weight: bold; color: rgb(255, 0, 0);">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;e.getLocationOnScreen().y - frame.mouseClickedLocation.y);</span><br />
&nbsp;&nbsp; &nbsp;}<br />
}<br />
<br />
<br/><br/>tag : <a href="/tag/드래그앤드롭" rel="tag">드래그앤드롭</a>,&nbsp;<a href="/tag/MouseMotionListner" rel="tag">MouseMotionListner</a>,&nbsp;<a href="/tag/component" rel="tag">component</a>,&nbsp;<a href="/tag/이동" rel="tag">이동</a>,&nbsp;<a href="/tag/getLocationOnScreen" rel="tag">getLocationOnScreen</a>,&nbsp;<a href="/tag/getMousePosition" rel="tag">getMousePosition</a>,&nbsp;<a href="/tag/mouseDragged" rel="tag">mouseDragged</a>,&nbsp;<a href="/tag/drag" rel="tag">drag</a>			 ]]> 
		</description>
		<category>App Programming</category>
		<category>드래그앤드롭</category>
		<category>MouseMotionListner</category>
		<category>component</category>
		<category>이동</category>
		<category>getLocationOnScreen</category>
		<category>getMousePosition</category>
		<category>mouseDragged</category>
		<category>drag</category>

		<comments>http://tobby48.egloos.com/2723865#comments</comments>
		<pubDate>Thu, 23 Jul 2009 02:04:38 GMT</pubDate>
		<dc:creator>tobby48</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 리눅스 한글깨짐 ]]> </title>
		<link>http://tobby48.egloos.com/2306116</link>
		<guid>http://tobby48.egloos.com/2306116</guid>
		<description>
			<![CDATA[ 
  http://blog.naver.com/ckwnan?Redirect=Log&amp;logNo=20054958713			 ]]> 
		</description>
		<category>Linux</category>

		<comments>http://tobby48.egloos.com/2306116#comments</comments>
		<pubDate>Wed, 10 Jun 2009 08:53:00 GMT</pubDate>
		<dc:creator>tobby48</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [JAVA] jfreechart를 이용하여 차트 그리기 ]]> </title>
		<link>http://tobby48.egloos.com/2296513</link>
		<guid>http://tobby48.egloos.com/2296513</guid>
		<description>
			<![CDATA[ 
  <div id="post-view" class="post-view pcol2">		<font style="background-color: rgb(255, 255, 255);"><font color="#000000"><span style="font-size: 10pt;"><p align="center"><font style="background-color: rgb(153, 220, 255);" color="#000000"><strong><span style="font-size: 14pt;">jfreechart를 이용하여 차트 그리기</span></strong><span style="font-size: 14pt;"> </span></font></p><p align="center">&nbsp;</p><p align="center">&nbsp;</p><p align="center">&nbsp;</p></span></font></font><font style="background-color: rgb(255, 255, 255);"><font color="#000000"><strong><span style="font-size: 10pt;"></span></strong></font></font>&nbsp;<p><font style="background-color: rgb(255, 255, 255);"><font color="#000000"><strong><span style="font-size: 10pt;"></span></strong></font></font>&nbsp;</p><p><font style="background-color: rgb(255, 255, 255);"><font color="#000000"><strong><span style="font-size: 10pt;">어떤 국가의 구매 고객이&nbsp;많은지 알아보기 위하여 국가별로 한 번이라도 상품을 구매한 적이 있는 고객을 대상으로 하여 국가별 구매 고객 비율을 파이차트로 그려 보자.</span></strong><span style="font-size: 10pt;"> </span></font></font></p><p>&nbsp;</p><p>&nbsp;</p><p><table width="525" bgcolor="#009e25" border="0" cellpadding="0" cellspacing="2" height="40"><tbody><tr bgcolor="#ffffff"><td width="525"><p><strong>&nbsp;</strong></p><p><strong>&nbsp;&nbsp; 다음이 과정은 이미 시행되었음을 가정한다. </strong></p><p><strong></strong>&nbsp;</p><p>&nbsp;① 이클립스와 톰켓을 다운로드 하여 설치하고, 이들을&nbsp;연동 시킨다.</p><p>&nbsp;</p><p>&nbsp;②&nbsp;jdbcdeom를 다운로드한 후, 이클립스에&nbsp;프로젝트에 추가한다. </p><p>&nbsp; &nbsp; [File] → [Import] →&nbsp;[General] →&nbsp;[Existing projects into Workspace] </p><p>&nbsp;&nbsp;&nbsp; &nbsp;☞ <a target="_blank" class="con_link" href="http://mfiles.naver.net/9f4baa7f653c53e1cbb3/data41/2009/5/25/68/jdbcdemo-duru1024.zip?type=attachment">jdbcdemo 다운로드</a></p><p>&nbsp;</p><p>&nbsp;③&nbsp;다음을&nbsp;다운로드 하여 압축을 풀고 lib에&nbsp;추가한다. </p><p>&nbsp;&nbsp;&nbsp;&nbsp; ☞&nbsp;<a target="_blank" class="con_link" href="http://mfiles.naver.net/69bd5c8993caa5133f5f/data41/2009/5/25/251/lib-duru1024.zip?type=attachment">추가할 라이브러리 다운로드</a></p><p>&nbsp;</p></td></tr></tbody></table></p><p>&nbsp;</p><p></p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p><strong>①&nbsp;SQL 쿼리를 작성하고 그 결과를 확인해 보자.</strong></p><p>&nbsp;</p><p><table width="525" bgcolor="#009e25" border="0" cellpadding="0" cellspacing="2" height="40"><tbody><tr bgcolor="#ffffff"><td width="525"><p>&nbsp;</p><p><strong>&nbsp;&nbsp; [SQL]</strong></p><p>&nbsp;</p><p><span style="font-size: 10pt;">&nbsp;</span><span style="font-size: 10pt;"> select country_name as nation, count,&nbsp;</span><br />
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp; to_char(RATIO_TO_REPORT(count) OVER (), '9.999') AS ratio</span><br />
<span style="font-size: 10pt;">&nbsp; from(</span><br />
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp; select country_id, count(*) as count</span><br />
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp; from (</span><br />
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT country_id</span><br />
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM&nbsp; customers Cu</span><br />
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE EXISTS (&nbsp;</span><br />
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT *</span><br />
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM&nbsp; Sales S</span><br />
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE&nbsp; Cu.cust_id=S.cust_id&nbsp;</span><br />
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )</span><br />
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp; )</span><br />
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp; group by country_id&nbsp;</span><br />
<span style="font-size: 10pt;">&nbsp; ) T, countries Co</span><br />
<span style="font-size: 10pt;">&nbsp; where T.country_id=Co.country_id</span><br />
<span style="font-size: 10pt;">&nbsp; order by count</span></p><p>&nbsp;</p></td></tr><tr bgcolor="#ffffff"><td><p>&nbsp;</p><p>&nbsp;&nbsp; <strong>[result]</strong>&nbsp;</p><p>&nbsp;</p><p align="center"><img src="http://blogfiles15.naver.net/data44/2009/5/25/270/aa5_duru1024.jpg" style="cursor: pointer;" onclick="popview(this)" width="346" height="402"></p><p align="center">&nbsp;</p></td></tr></tbody></table></p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p><strong>②&nbsp;작성된 SQL 쿼리를 바탕으로 파이차트를 그리기 위해 어떤 데이터셋을 사용할 것인지 판단하여야한다.&nbsp;데이터셋으로는 DefaultPieDataset 클래스를 이용하기로 하고, 파이차트를 그리기 위해 ChartFactory클래스의 createPieChart 메서드를 이용한다.</strong> </p><p>&nbsp;</p><p>■ DefaultPieDataset 클래스의 setValue&nbsp; 메서드</p><p><img src="http://blogfiles4.naver.net/data44/2009/5/25/19/aa1_duru1024.jpg" style="cursor: pointer;" onclick="popview(this)" width="547" height="227"></p><p>&nbsp;</p><p>&nbsp;</p><p>■ ChartFactory 클래스의 createPieChart 메서드</p><p><img src="http://blogfiles12.naver.net/data43/2009/5/25/27/aa2_duru1024.jpg" style="cursor: pointer;" onclick="popview(this)" width="537" height="390"></p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p><strong>③&nbsp;index.jsp와 BarChart.java를 다음과 같이 수정한다.</strong></p><p><strong>&nbsp;&nbsp;&nbsp;</strong>&nbsp;</p><p><table width="525" bgcolor="#009e25" border="0" cellpadding="0" cellspacing="2" height="40"><tbody><tr bgcolor="#ffffff"><td width="525"><p>&nbsp;</p><p>&nbsp;<strong>&nbsp; [index.jsp]</strong></p><p>&nbsp;</p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%@</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US"> <span style="font-size: 8pt; color: rgb(63, 127, 127);">page</span> <span style="font-size: 8pt; color: rgb(127, 0, 127);">language</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"java"</span></i> <span style="font-size: 8pt; color: rgb(127, 0, 127);">contentType</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"text/html; charset=EUC-KR"</span></i><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><font size="2"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt; color: rgb(127, 0, 127);">pageEncoding</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"EUC-KR"</span></i><span style="font-size: 8pt; color: rgb(191, 95, 63);">%&gt;</span><o:p></o:p></font></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%@</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">page</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US"> <span style="font-size: 8pt; color: rgb(127, 0, 127);">import</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"java.sql.*"</span></i><span style="font-size: 8pt; color: rgb(191, 95, 63);">%&gt;</span><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%@</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">page</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US"> <span style="font-size: 8pt; color: rgb(127, 0, 127);">import</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"lab.s2c.jdbc.DBHandle"</span></i><span style="font-size: 8pt; color: rgb(191, 95, 63);">%&gt;</span><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%@</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">page</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US"> <span style="font-size: 8pt; color: rgb(127, 0, 127);">import</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"lab.s2c.chart.*"</span></i><span style="font-size: 8pt; color: rgb(191, 95, 63);">%&gt;</span><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%@</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">page</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US"> <span style="font-size: 8pt; color: rgb(127, 0, 127);">import</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"org.jfree.chart.servlet.ServletUtilities"</span></i><span style="font-size: 8pt; color: rgb(191, 95, 63);">%&gt;</span><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><o:p><font size="2"><span style="font-size: 8pt;">&nbsp;</span></font></o:p></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Connection conn = </span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">null</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ResultSet rs = </span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">null</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Statement stmt = </span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">null</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ResultSetMetaData rsmd = </span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">null</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">int</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> columnCount = 0;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String sql = </span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span></span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"select country_name as nation, count, "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"<span style="font-size: 8pt;">&nbsp; </span>to_char(RATIO_TO_REPORT(count) OVER () , '9.999') AS ratio "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"from( "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"<span style="font-size: 8pt;">&nbsp; </span>select country_id, count(*) as count "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"<span style="font-size: 8pt;">&nbsp; </span>from ( "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"<span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span>SELECT country_id "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"<span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span>FROM<span style="font-size: 8pt;">&nbsp; </span>customers Cu "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"<span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span>WHERE EXISTS ( "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;</span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"<span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SELECT * "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"<span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>FROM<span style="font-size: 8pt;">&nbsp; </span>Sales S "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"<span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>WHERE<span style="font-size: 8pt;">&nbsp; </span>Cu.cust_id = S.cust_id "</span><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> </span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"<span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span>) "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"<span style="font-size: 8pt;">&nbsp; </span>) "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"<span style="font-size: 8pt;">&nbsp; </span>group by country_id "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">") T, countries Co "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"where T.country_id= Co.country_id "</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;</span>+</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"order by count "</span><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">%&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><o:p><font size="2"><span style="font-size: 8pt;">&nbsp;</span></font></o:p></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;!</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">DOCTYPE</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US"> <span style="font-size: 8pt; color: teal;">html</span> <span style="font-size: 8pt; color: gray;">PUBLIC</span> <span style="font-size: 8pt; color: teal;">"-//W3C//DTD HTML 4.01 Transitional//EN"</span> <span style="font-size: 8pt; color: rgb(63, 127, 95);">"http://www.w3.org/TR/html4/loose.dtd"</span><span style="font-size: 8pt; color: teal;">&gt;</span><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">html</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">head</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">meta</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US"> <span style="font-size: 8pt; color: rgb(127, 0, 127);">http-equiv</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"Content-Type"</span></i> <span style="font-size: 8pt; color: rgb(127, 0, 127);">content</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"text/html; charset=EUC-KR"</span></i><span style="font-size: 8pt; color: teal;">&gt;</span><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">title</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">JDBC Demo</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;/</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">title</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;/</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">head</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><o:p><font size="2"><span style="font-size: 8pt;">&nbsp;</span></font></o:p></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">body</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><o:p><font size="2"><span style="font-size: 8pt;">&nbsp;</span></font></o:p></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">try</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> {</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>conn = (</span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">new</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> DBHandle()).dbConnection();</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>stmt = conn.createStatement();</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>rs = stmt.executeQuery(sql);</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>rsmd = rs.getMetaData();</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>columnCount = rsmd.getColumnCount();</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">%&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><o:p><font size="2"><span style="font-size: 8pt;">&nbsp;</span></font></o:p></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">h3</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">Result by Table</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;/</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">h3</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">table</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US"> <span style="font-size: 8pt; color: rgb(127, 0, 127);">cellpadding</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"1"</span></i> <span style="font-size: 8pt; color: rgb(127, 0, 127);">cellspacing</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"1"</span></i> <span style="font-size: 8pt; color: rgb(127, 0, 127);">border</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"1"</span></i> <span style="font-size: 8pt; color: rgb(127, 0, 127);">bordercolor</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"#000000"</span></i><span style="font-size: 8pt; color: teal;">&gt;</span><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">thead</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">tr</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US"> <span style="font-size: 8pt; color: rgb(127, 0, 127);">bgcolor</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"#C7E4F9"</span></i> <span style="font-size: 8pt; color: rgb(127, 0, 127);">bordercolor</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"#ffffff"</span></i> <span style="font-size: 8pt; color: rgb(127, 0, 127);">align</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"center"</span></i><span style="font-size: 8pt; color: teal;">&gt;</span><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%</span><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">for</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> (</span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">int</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> i=0; i&lt; columnCount; i++) {<span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style=""></span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">%&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">td</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US"> <span style="font-size: 8pt; color: rgb(127, 0, 127);">bordercolor</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"#000000"</span></i><span style="font-size: 8pt; color: teal;">&gt;</span><span style="font-size: 8pt; color: rgb(191, 95, 63);">&lt;%=</span><span style="font-size: 8pt; color: black;">rsmd.getColumnName(i+1)</span><span style="font-size: 8pt; color: rgb(191, 95, 63);">%&gt;</span><span style="font-size: 8pt; color: black;"> </span><span style="font-size: 8pt; color: teal;">&lt;/</span><span style="font-size: 8pt; color: rgb(63, 127, 127);">td</span><span style="font-size: 8pt; color: teal;">&gt;</span><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%</span><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">%&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;/</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">tr</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;/</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">thead</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">tbody</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">while</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">(rs.next()) {</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">%&gt;</span><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">tr</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US"> <span style="font-size: 8pt; color: rgb(127, 0, 127);">bordercolor</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"#ffffff"</span></i> <span style="font-size: 8pt; color: rgb(127, 0, 127);">align</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"center"</span></i><span style="font-size: 8pt; color: teal;">&gt;</span><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">for</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> (</span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">int</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> i=0; i&lt; columnCount; i++) {</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">%&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">td</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US"> <span style="font-size: 8pt; color: rgb(127, 0, 127);">bordercolor</span><span style="font-size: 8pt; color: black;">=</span><i><span style="font-size: 8pt; color: rgb(42, 0, 255);">"#000000"</span></i><span style="font-size: 8pt; color: teal;">&gt;</span><span style="font-size: 8pt; color: rgb(191, 95, 63);">&lt;%=</span><span style="font-size: 8pt; color: black;">rs.getString(i+1) </span><span style="font-size: 8pt; color: rgb(191, 95, 63);">%&gt;</span><span style="font-size: 8pt; color: teal;">&lt;/</span><span style="font-size: 8pt; color: rgb(63, 127, 127);">td</span><span style="font-size: 8pt; color: teal;">&gt;</span><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%</span><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&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; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">%&gt;</span><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&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; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;/</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">tr</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%</span><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">%&gt;</span><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;/</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">tbody</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;/</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">table</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><o:p><font size="2"><span style="font-size: 8pt;">&nbsp;</span></font></o:p></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">h3</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">Result by Chart</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;/</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">h3</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: rgb(63, 127, 95); font-family: 'Courier New';" lang="EN-US">/*PieChart*/</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span>Chart pieChart = </span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">new</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> Chart();</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span>rs = stmt.executeQuery(sql);</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">while</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">(rs.next()) {</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pieChart.addValue(rs.getString(1),rs.getDouble(3));</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span>}</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span>String fileName = ServletUtilities.saveChartAsPNG(pieChart.createPieChart</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"Pie Chart -&nbsp;Buyer Ratio"</span><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">), 600, 500, session);</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span>String graphURL = request.getContextPath() + </span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"/displayChart?filename="</span><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> + </span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>fileName;<span style="font-size: 8pt;">&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">%&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><o:p><font size="2"><span style="font-size: 8pt;">&nbsp;</span></font></o:p></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">img</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US"> <span style="font-size: 8pt; color: rgb(127, 0, 127);">src</span><span style="font-size: 8pt; color: black;">=</span>"<span style="font-size: 8pt; color: rgb(191, 95, 63);">&lt;%=</span><span style="font-size: 8pt; color: black;"> graphURL </span><span style="font-size: 8pt; color: rgb(191, 95, 63);">%&gt;</span>"<span style="font-size: 8pt; color: teal;">&gt;</span><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;</span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">&lt;%</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><o:p><font size="2"><span style="font-size: 8pt;">&nbsp;</span></font></o:p></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span>rs.close();</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>stmt.close();</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>conn.close();</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span>}</span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">catch</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">(Exception e) {</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>out.print(</span><span style="font-size: 8pt; color: rgb(42, 0, 255); font-family: 'Courier New';" lang="EN-US">"Occured Exception"</span><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">);</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span>}</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: rgb(191, 95, 63); font-family: 'Courier New';" lang="EN-US">%&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><o:p><font size="2"><span style="font-size: 8pt;">&nbsp;</span></font></o:p></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;/</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">body</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><font size="2"><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&lt;/</span><span style="font-size: 8pt; color: rgb(63, 127, 127); font-family: 'Courier New';" lang="EN-US">html</span><span style="font-size: 8pt; color: teal; font-family: 'Courier New';" lang="EN-US">&gt;</span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><font size="2"><span style="color: teal; font-family: 'Courier New';" lang="EN-US"></span></font><span style="font-size: 8pt;">&nbsp;</span></p></td></tr><tr bgcolor="#ffffff"><td><p>&nbsp;</p><p><span style="font-size: 8pt;">&nbsp;&nbsp;</span><strong><span style="font-size: 8pt;"> [Chart.java]</span></strong></p><p>&nbsp;</p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">package</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> lab.s2c.chart;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><o:p><font size="2"><span style="font-size: 8pt;">&nbsp;</span></font></o:p></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">import</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> org.jfree.chart.ChartFactory;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">import</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> org.jfree.chart.JFreeChart;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">import</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> org.jfree.data.general.DefaultPieDataset;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><o:p><font size="2"><span style="font-size: 8pt;">&nbsp;</span></font></o:p></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><o:p><font size="2"><span style="font-size: 8pt;">&nbsp;</span></font></o:p></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">public</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> </span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">class</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> Chart {</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">private</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> DefaultPieDataset </span><span style="font-size: 8pt; color: rgb(0, 0, 192); font-family: 'Courier New';" lang="EN-US">dataset</span><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> = </span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">null</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">public</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> Chart(){</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">this</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">.</span><span style="font-size: 8pt; color: rgb(0, 0, 192); font-family: 'Courier New';" lang="EN-US">dataset</span><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> = </span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">new</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> DefaultPieDataset();</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">public</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> </span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">void</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> addValue(String key, </span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">double</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> value){</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">this</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">.</span><span style="font-size: 8pt; color: rgb(0, 0, 192); font-family: 'Courier New';" lang="EN-US">dataset</span><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">.setValue(key, value);<span style="font-size: 8pt;">&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Courier New';" lang="EN-US"><o:p><font size="2"><span style="font-size: 8pt;">&nbsp;</span></font></o:p></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">public</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> JFreeChart createPieChart(String title){</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>JFreeChart chart = ChartFactory.<i><span style="font-size: 8pt;">createPieChart</span></i>(</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>title, </span><span style="font-size: 8pt; color: rgb(63, 127, 95); font-family: 'Courier New';" lang="EN-US">//java.lang</span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US">.String title<o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 8pt; color: rgb(0, 0, 192); font-family: 'Courier New';" lang="EN-US">dataset</span><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">, </span><span style="font-size: 8pt; color: rgb(63, 127, 95); font-family: 'Courier New';" lang="EN-US">//PieDataset </span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US">dataset<o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">false</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">, </span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US">//boolean legend<o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">false</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">, </span><span style="font-size: 8pt; color: rgb(63, 127, 95); font-family: 'Courier New';" lang="EN-US">//boolean </span><span style="font-size: 8pt; font-family: 'Courier New';" lang="EN-US">tooltips<o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">false</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US">); </span><span style="font-size: 8pt; color: rgb(63, 127, 95); font-family: 'Courier New';" lang="EN-US">//java.util.Locale locale</span><span style="font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp; </span><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><b><span style="font-size: 8pt; color: rgb(127, 0, 85); font-family: 'Courier New';" lang="EN-US">return</span></b><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"> chart;</span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><font size="2"><span style="font-size: 8pt; color: black; font-family: 'Courier New';" lang="EN-US"><span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<span style="font-size: 8pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></font></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: black; font-family: 'Courier New';" lang="EN-US"><font size="2"><span style="font-size: 8pt;">}</span></font></span></p><p></p><p>&nbsp;</p></td></tr><tr bgcolor="#ffffff"><td><p>&nbsp;</p><p>&nbsp;&nbsp; <strong>[result]</strong></p><p>&nbsp;</p><p><img src="http://blogfiles4.naver.net/data44/2009/5/25/51/aa3_duru1024.jpg" style="cursor: pointer;" onclick="popview(this)" width="309" height="486"></p><p>&nbsp;</p><p>&nbsp;</p><p><img src="http://blogfiles10.naver.net/data44/2009/5/25/201/aa4_duru1024.jpg" style="cursor: pointer;" onclick="popview(this)" width="547" height="491"></p><p>&nbsp;</p></td></tr></tbody></table></p><p>&nbsp;</p><div class="autosourcing-stub"><p style="margin: 11px 0pt 7px; padding: 0pt; font-size: 12px; font-family: Dotum; font-style: normal; font-weight: normal;"><strong style="padding: 0pt 7px 0pt 0pt;">[출처]</strong> <a href="http://blog.naver.com/duru1024/70047735297" target="_blank">jfreechart를 이용하여 차트 그리기 </a><span style="padding: 0pt 7px 0pt 5px;">|</span><strong style="padding: 0pt 7px 0pt 0pt;">작성자</strong> <a href="http://blog.naver.com/duru1024" target="_blank">유노추노</a></p></div><p><br />
</p>      </div>			 ]]> 
		</description>
		<category>App Programming</category>

		<comments>http://tobby48.egloos.com/2296513#comments</comments>
		<pubDate>Sun, 07 Jun 2009 23:57:27 GMT</pubDate>
		<dc:creator>tobby48</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [Java] 비행기 시뮬레이션 ]]> </title>
		<link>http://tobby48.egloos.com/2275342</link>
		<guid>http://tobby48.egloos.com/2275342</guid>
		<description>
			<![CDATA[ 
  [<span style="font-weight: bold; color: rgb(255, 0, 0);">본 코드는 퍼가실때 댓글 남겨주세요.</span>]<br />
<br />
<br />
과제알바로 구현해봤던 것..<br />
<br />
콘솔로 Landing , Terminal , Take-off 상태 표시<br />
동적 메모리 할당 알고리즘 FF, BF, LF 는 미구현<br />
국제선, 국내선 간에 우선순위 큐 적용<br />
<br />
일단 비행기 도착시간이 저장된 파일이 필요 (아래 data.txt파일)<br />
<br />
5개 java 파일과 data.txt 파일을 같은 디렉토리에 놓고,<br />
<br />
javac *.java 컴파일 후,<br />
java AirportSim data.txt 로 실행<br />
<br />
<br />
&lt;&lt; 파일명 : data.txt &gt;&gt;<br />
70000 D<br />
60000 I<br />
50000 I<br />
10015 D<br />
10014 D<br />
10013 I<br />
10012 D<br />
10011 I<br />
10010 I<br />
10009 D<br />
10008 D<br />
10007 D<br />
10006 I<br />
10005 I<br />
10004 D<br />
10003 D<br />
10002 D<br />
10001 I<br />
10000 I<br />
5000 D<br />
4000 D<br />
3000 I<br />
2000 D<br />
1000 I<br />
1 D<br />
<br />
<br />
<br />
import java.io.IOException;<br />
<br />
/**<br />
&nbsp;* 최초 비행기 시뮬레이션을 실행하기 위한 클래스<br />
&nbsp;* <br />
&nbsp;* <br />
&nbsp;* @author tobby48 2009. 06. 02<br />
&nbsp;*/<br />
public class AirportSim {<br />
&nbsp;&nbsp;&nbsp; final static int MAX_MODEL_TIME = 86400;<br />
<br />
&nbsp;&nbsp;&nbsp; final static int LQ_NS = 2; // number of landing queue servers<br />
<br />
&nbsp;&nbsp;&nbsp; final static int LQ_ST = 6; // landing queue service time (minutes)<br />
<br />
&nbsp;&nbsp;&nbsp; final static int LQ_OT = 'F'; // landing queue operation/scheduling type<br />
<br />
&nbsp;&nbsp;&nbsp; final static int TQ_NS = 3; // number of terminal queue servers<br />
<br />
&nbsp;&nbsp;&nbsp; final static int TQ_ST = 20; // terminal queue service time (minutes)<br />
<br />
&nbsp;&nbsp;&nbsp; final static int TQ_OT = 'B'; // terminal queue operation/scheduling type<br />
<br />
&nbsp;&nbsp;&nbsp; final static int TOQ_NS = 1; // number of take?off queue servers<br />
<br />
&nbsp;&nbsp;&nbsp; final static int TOQ_ST = 12; // take?off queue service time (minutes)<br />
<br />
&nbsp;&nbsp;&nbsp; final static int TOQ_OT = 'F'; // take?off queue operation/scheduling type<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param args<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public static void main(String args[]) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; External_File dataFile = null;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dataFile = new External_File(args[0]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Simulate Airport = new Simulate(MAX_MODEL_TIME, LQ_NS, LQ_ST, LQ_OT,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; TQ_NS, TQ_ST, TQ_OT, TOQ_NS, TOQ_ST, TOQ_OT);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Airport.Init_Simulation(dataFile);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Airport.Run_Simulation();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Airport.End_Simulation();<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
}<br />
<br />
<br />
<br />
import java.io.BufferedReader;<br />
import java.io.FileInputStream;<br />
import java.io.IOException;<br />
import java.io.InputStreamReader;<br />
<br />
/**<br />
&nbsp;* arrival time 이 저장된 파일의 내용을 읽기 위한 클래스<br />
&nbsp;* <br />
&nbsp;* @author tobby48 2009. 06. 02<br />
&nbsp;*/<br />
public class External_File {<br />
&nbsp;&nbsp;&nbsp; private BufferedReader Ext_File;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 생성자<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param ext_file<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 파일의 경로<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @throws IOException<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public External_File(String ext_file) throws IOException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Ext_File = new BufferedReader(new InputStreamReader(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; new FileInputStream(ext_file)));<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 파일의 내용을 한줄씩 문자열로 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @throws IOException<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public String getLine() throws IOException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return Ext_File.readLine();<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 파일의 끝을 알림<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @throws IOException<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public boolean havehitEOF() throws IOException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return !Ext_File.ready();<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 파일읽기 완료 후 파일을 위한 리더(BufferedReader)을 닫음<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @throws IOException<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public void close() throws IOException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Ext_File.close();<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
}<br />
<br />
<br />
<br />
import java.util.Vector;<br />
<br />
/**<br />
&nbsp;* 비행기 클래스<br />
&nbsp;* <br />
&nbsp;* @author tobby48 2009. 06. 02<br />
&nbsp;*/<br />
public class Plane {<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 비행기 ID<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Integer id;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 비행기 arrival time<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Integer arrivalTime;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 비행기 service 시작시간을 Vector로 저장(landing, terminal, takeoff 각각)<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Vector&lt;Integer&gt; serviceStartTime;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 비행기 service 종료시간을 Vector로 저장(landing, terminal, takeoff 각각)<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Vector&lt;Integer&gt; serviceEndTime;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 비행기 waiting 시간을 Vector로 저장(landing, terminal, takeoff 각각)<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Vector&lt;Integer&gt; waitingTime;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 비행기가 서비스를 받는 시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Integer servicingTime;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 국제선, 국내선 인지 판별(국내선 'D', 국제선 'I')<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Character airlineType;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 생성자<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param arrivalTime<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 비행기 도착시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Plane(Integer arrivalTime) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.arrivalTime = arrivalTime;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.serviceStartTime = new Vector&lt;Integer&gt;();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.serviceEndTime = new Vector&lt;Integer&gt;();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.waitingTime = new Vector&lt;Integer&gt;();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.servicingTime = new Integer(0);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 해당 server에 대한 service 종료시간을 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param serverIndex<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 인덱스<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 서비스 종료시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Integer getServiceEndTime(Integer serverIndex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return serviceEndTime.get(serverIndex);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 파라미터의 시간으로 service 종료시간을 추가<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param serverIndex<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 서비스 종료시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public void addServiceEndTime(Integer serverIndex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.serviceEndTime.add(serverIndex);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 비행기 ID 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 비행기 ID<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Integer getId() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return id;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 비행기 ID 지정<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param id<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 비행기 ID<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public void setId(Integer id) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.id = id;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 비행기 도착시간 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 비행기 도착시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Integer getArrivalTime() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return arrivalTime;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 비행기 대기시간 추가<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param time<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 비행기 대기시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public void addWaitingTime(Integer time) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.waitingTime.add(time);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 해당 서버의 대기시간 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param serverIndex<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 서버 인덱스<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 해당 서버의 대기시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Integer getWaitingTime(Integer serverIndex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return waitingTime.get(serverIndex);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 해당 서버의 서비스 시작시간을 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param serverIndex<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 서버 인덱스<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 서비스 시작시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Integer getServiceStartTime(Integer serverIndex) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return serviceStartTime.get(serverIndex);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 서비스 시작시간 추가<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param time<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 서비스 시작시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public void addServiceStartTime(Integer time) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.serviceStartTime.add(time);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 서비스 받은 시간을 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 서비스 받은 시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Integer getServicingTime() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return servicingTime;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 서비스 받는 중(서비스 시간을 증가)<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public void addServicingTime() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Integer temp = this.getServicingTime();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.servicingTime = ++temp;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 서비스 받는 중일때 서비스 시간을 갱신<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param time<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 서비스 경과 시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public void setServicingTime(Integer time) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.servicingTime = time;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 비행기 타입을 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 비행기가 국내선인지 국제선인지 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Character getAirlineType() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return airlineType;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 비행기 타입을 지정<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param airlineType<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 비행기 타입('D' or 'I')<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public void setAirlineType(Character airlineType) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.airlineType = airlineType;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<br />
<br />
<br />
import java.util.Vector;<br />
<br />
/**<br />
&nbsp;* 시뮬레이션 동작을 수행 및 통괄하는 클래스<br />
&nbsp;* <br />
&nbsp;* @author tobby48 2009. 06. 02<br />
&nbsp;*/<br />
public class Server {<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 서비스중인 비행기를 저장한 객체<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Vector&lt;Plane&gt; planeQueue;<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 대기시간을 저장한 객체<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Vector&lt;Integer&gt; waitingTimeQueue;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 전체 수행시간을 저장한 객체<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Vector&lt;Integer&gt; totalOperatingTime;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 서버수를 임시로 저장<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Integer serverNumTemp; // number of queue servers<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 서비스 시간, 초단위로 저장하기 위해 *60<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Integer serviceTime; // queue service time (minutes)<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* First Fit, Best Fit, Least Fit 알고리즘<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Integer osType; // queue operation/scheduling type<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 서버수<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private Integer serverNum;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 생성자 초기값 설정<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param serverNum<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 서버수<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param serviceTime<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 서비스 시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param osType<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FF, BF, LF 알고리즘<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Server(Integer serverNum, Integer serviceTime, Integer osType) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.planeQueue = new Vector&lt;Plane&gt;();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.waitingTimeQueue = new Vector&lt;Integer&gt;();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.totalOperatingTime = new Vector&lt;Integer&gt;(serverNum);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; serverNum; i++) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.totalOperatingTime.add(i, 0);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.serverNumTemp = this.serverNum = serverNum;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.serviceTime = serviceTime * 60;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.osType = osType;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 비행기를 큐에 저장 서버수만큼은 바로 서비스를 제공하기 위해 큐에 서비스시간과 다음 서비스 시작시간을 저장 서버수를 초과할 시에는<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 대기시간으로 인해 다음 서비스 시작시간을 모르기 때문에 저장하지 않음<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param plane<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 비행기<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param currentTime<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 현재시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public void addPlane(Plane plane, Integer currentTime) {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* service 갯수가 수요량을 충족하기 때문에 바로 service */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (serverNumTemp &gt; 0)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; serverNumTemp--;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* service 시작, 대기, 종료, 다음 서버의 시작시간을 지정 */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; plane.setServicingTime(0);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; plane.addServiceStartTime(currentTime);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; planeQueue.add(plane);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* &nbsp;&nbsp;&nbsp; 큐 안의 비행기들을 국제선, 국내선 우선순위에 의해서 재배치 유무<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return&nbsp;&nbsp;&nbsp; 큐 안의 비행기들을 재배치 유무<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private boolean rearrangeStatQueue() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int stat1 = 0, stat2 = 0;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* 재배치할 필요없는 조건 */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int jj = 0; jj &lt; planeQueue.size(); jj++) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* 서버수 내에 있는 비행기가 모두 국제선일 경우에는 재배치할 필요가 없다. */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ((jj &lt; (serverNum - serverNumTemp))<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &amp;&amp; (planeQueue.get(jj).getAirlineType() == 'I'))<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; stat1++;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* 서버수 밖에 있는 비행기가 모두 국내선일 경우에는 재배치할 필요가 없다. */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else if (((serverNum - serverNumTemp) &lt;= jj)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &amp;&amp; (planeQueue.get(jj).getAirlineType() == 'D'))<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; stat2++;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* 위 조건 두개를 다 만족안해야만 TRUE 를 리턴하여 재배치한다. */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (stat1 != (serverNum - serverNumTemp))<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return true;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else if (stat2 != (planeQueue.size() - (serverNum - serverNumTemp)))<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return true;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* &nbsp;&nbsp;&nbsp; 큐 안의 비행기들을 재배치<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private void rearrangeQueue() {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* 재배치할 필요 없는 조건에 둘다 만족 안할때만 재배치 */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (rearrangeStatQueue()<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &amp;&amp; ((serverNum - serverNumTemp) &lt; planeQueue.size())) {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* 큐 안의 비행기만을 체크 */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i = serverNum - serverNumTemp; i &lt; planeQueue.size(); i++) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Plane plane = planeQueue.get(i);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* 서버수 내에 D가 있으면 서버수 밖의 I를 끼워넣고, D는 한칸 밀림 */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (plane.getAirlineType() == 'I') {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int ii = 0; ii &lt; (serverNum - serverNumTemp); ii++) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (planeQueue.get(ii).getAirlineType() == 'D')<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; planeQueue.add(ii, planeQueue.remove(i));<br />
&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; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* 더이상 재배치할 필요가 없으면 For문 빠져나옴 */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!rearrangeStatQueue())<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 현재시간을 매번 체크하여, 서비스종료되는 비행기를 추적 TRUE를 리턴하면 서비스 종료되는 비행기가 있다.<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param serverIndex<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 서버 인덱스<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param currentTime<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 현재시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 서비스 종료되는 비행기 있다 없다?<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Plane upDate(Integer serverIndex, Integer currentTime) {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* 큐가 있다면 */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (planeQueue.isEmpty())<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return null;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* 국제선, 국내선 간에 큐를 재배치 */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; rearrangeQueue();<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* 서버수 내에 있는 비행기들은 서비스를 받기 때문에 서비스 받는시간을 증가 */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; (serverNum - serverNumTemp); i++) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Plane plane = planeQueue.get(i);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; plane.addServicingTime();<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* 서비스를 받던 시간이 서비스 시간과 같다면, 서비스가 종료된 것이기 때문에 다음 서버로 넘겨줘야 한다. */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (plane.getServicingTime().intValue() - 1 == serviceTime) {<br />
<br />
&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; plane.addWaitingTime(currentTime - serviceTime<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; - plane.getServiceStartTime(serverIndex));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; plane.addServiceEndTime(plane.getServiceStartTime(serverIndex)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + plane.getWaitingTime(serverIndex));<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* waitingTime 및 operationTime 저장 */<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; waitingTimeQueue.add(currentTime - serviceTime<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; - plane.getServiceStartTime(serverIndex));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; totalOperatingTime.add(i, totalOperatingTime.get(i)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + serviceTime);<br />
<br />
&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; Plane endingPlane = planeQueue.remove(i);<br />
<br />
&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;* 서비스 종료된 비행기를 리턴, 큐 크기가 서버수 보다 같거나 클땐, 서버 수를 하나 줄인다. 처음에 큐에 저장할 시에 덜<br />
&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;*/<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (planeQueue.size() &lt; serverNum)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; serverNumTemp++;<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; return endingPlane;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return null;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 서버수를 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 서버수<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Integer getServerNum() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return serverNum;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 서비스 시간 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 서비스 시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Integer getServiceTime() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return serviceTime;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* First Fit, Best Fit, Least Fit 알고리즘 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return First Fit, Best Fit, Least Fit 알고리즘<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Character getOsType() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return (char) (osType - 0);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 대기시간의 평균을 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 대기시간 평균<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Integer getAvgWaitingTime() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Integer avgValue = new Integer(0);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; waitingTimeQueue.size(); i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; avgValue += waitingTimeQueue.get(i);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; avgValue /= waitingTimeQueue.size();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return avgValue;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 전체 대기시간 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 전체 대기시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Integer getTotalWaitingTime() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Integer tatalValue = new Integer(0);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; waitingTimeQueue.size(); i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tatalValue += waitingTimeQueue.get(i);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return tatalValue;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 가장 큰 대기시간 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return 가장 큰 대기시간<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Integer getMaxWaitingTime() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Integer maxValue = new Integer(0);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; waitingTimeQueue.size() - 1; i++) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (waitingTimeQueue.get(i).compareTo(waitingTimeQueue.get(i + 1)) &lt; 0)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxValue = waitingTimeQueue.get(i + 1);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return maxValue;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* 해당 서버의 전체 서비스를 제공한 시간을 리턴<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param index<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 서버 인덱스<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @return<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public Integer getTotalIdleTime(Integer index) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return totalOperatingTime.get(index);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<br />
<br />
<br />
import java.io.IOException;<br />
import java.util.ArrayList;<br />
import java.util.Stack;<br />
import java.util.Vector;<br />
<br />
/**<br />
&nbsp;* 시뮬레이션에 대한 초기설정과 출력결과를 보여주는 클래스<br />
&nbsp;*<br />
&nbsp;* @author tobby48 2009. 06. 02<br />
&nbsp;*/<br />
public class Simulate {<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 전체 시간 (여기서는 하루(86400초)<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; private int MAX_MODEL_TIME;<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 최종 결과를 저장할 ArrayList 객체<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; private ArrayList&lt;Plane&gt; resultPlaneList;<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Landing을 위한 Server 객체<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; private Server arrivalServer;<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Terminal을 위한 Server 객체<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; private Server terminalServer;<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Takeoff을 위한 Server 객체<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; private Server takeoffServer;<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 생성자 Main함수가 있는 클래스로부터 초기값들을 넘겨받은 뒤, 각각의 Server객체를 초기화한다.<br />
&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param maxModelTime<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param lqNs<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param lqSt<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param lqOt<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param tqNs<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param tqSt<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param tqOt<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param toqNs<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param toqSt<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param toqOt<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public Simulate(int maxModelTime, int lqNs, int lqSt, int lqOt, int tqNs,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int tqSt, int tqOt, int toqNs, int toqSt, int toqOt) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated constructor stub<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.MAX_MODEL_TIME = maxModelTime;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resultPlaneList = new ArrayList&lt;Plane&gt;();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arrivalServer = new Server(lqNs, lqSt, lqOt);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; terminalServer = new Server(tqNs, tqSt, tqOt);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; takeoffServer = new Server(toqNs, toqSt, toqOt);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * data file 을 읽어서 arrival time 을 stack 에 추가하는 함수<br />
&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param dataFile<br />
&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arrival time이 저장된 파일<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public void Init_Simulation(External_File dataFile) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Vector&lt;Integer&gt; tempArrivalTime = new Vector&lt;Integer&gt;();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Vector&lt;Character&gt; tempAirplaneType = new Vector&lt;Character&gt;();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer id = new Integer(0);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*&nbsp;&nbsp;&nbsp; 파일에서 arriveTime을 저장할 Stack&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stack&lt;Integer&gt; arriveStack = new Stack&lt;Integer&gt;();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stack&lt;Character&gt; airplaneStack = new Stack&lt;Character&gt;();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* data file 을 한 라인씩 읽어서 Stack에 저장 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (!dataFile.havehitEOF()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] tempArray = dataFile.getLine().split(" ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arriveStack.add(Integer.parseInt(tempArray[0]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; airplaneStack.add(tempArray[1].charAt(0));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 정렬을 위한 임시벡터에 저장 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(!arriveStack.isEmpty())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempArrivalTime.add(arriveStack.pop());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 정렬을 위한 임시벡터에 저장 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(!airplaneStack.isEmpty())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempAirplaneType.add(airplaneStack.pop());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* arrival time 으로 정렬&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; tempArrivalTime.size() - 1; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = i; j &lt; tempArrivalTime.size(); j++) {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Integer.valueOf(tempArrivalTime.get(i)) &gt; Integer.valueOf(tempArrivalTime.get(j))) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer temp = tempArrivalTime.get(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempArrivalTime.set(i, tempArrivalTime.get(j));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempArrivalTime.set(j, temp);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Character tempChar = tempAirplaneType.get(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempAirplaneType.set(i, tempAirplaneType.get(j));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempAirplaneType.set(j, tempChar);<br />
&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; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* plane의 id값, 국내선인지 국제선인지 저장 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (id &lt; tempArrivalTime.size()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Plane plane = new Plane(tempArrivalTime.get(id));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plane.setId(id + 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plane.setAirlineType(tempAirplaneType.get(id));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resultPlaneList.add(plane);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 시뮬레이션 동작을 수행하는 함수<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public void Run_Simulation() {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 초기화 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer currentTime = new Integer(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer index = new Integer(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean stat = false;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * while 구문 안쪽<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 1. 현재시간을 계속 증가<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 2. stack에 저장된 비행기의 arrival time을 가져와 arrival 대기 큐에 저장<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 3. stack에 있는 비행기를 추가하기 위해 arrival 큐에 비행기를 추가할수 있는지 여부를 체크<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 4. 비행기의 arrival(현재시간) 값 만큼 arrival queue을 업데이트 시킨다.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 5. arrival queue에서 서비스시간 끝난 비행기에 대해서는 terminal queue로 이동(3번~5번 과정 순차적 체크)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 6. takeoff queue까지 업데이트를 완료한 다음 1번과정 반복<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*&nbsp;&nbsp;&nbsp; 최초 arrival time 값을 얻음&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Plane plane = resultPlaneList.get(index);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*&nbsp;&nbsp;&nbsp; 1일 동안의 비행 시뮬레이션 동작&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (currentTime &lt;= MAX_MODEL_TIME) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Plane tempPlane;<br />
&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; stack안의 arrival time을 모두 arrival 대기큐에 저장&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!stat &amp;&amp; currentTime.equals(plane.getArrivalTime())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arrivalServer.addPlane(plane, currentTime);<br />
&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; stack이 비어있다면 더이상 pop을 수행하지 않음&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (index &lt; (resultPlaneList.size()-1))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plane = resultPlaneList.get(++index);<br />
&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;&nbsp;&nbsp; stat = true;<br />
&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; 동일한 도착시간을 가진 비행기를 처리하기 위해 현재시간을 증가시키지 않고 continue&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(currentTime.equals(plane.getArrivalTime()))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*&nbsp;&nbsp;&nbsp; 현재시간으로부터 각각의 Server객체들이&nbsp;&nbsp;&nbsp;&nbsp; landing -&gt; terminal -&gt; takeoff 로의 이동<br />
&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; landing 과정이 끝난 plane은 terminal로,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; terminal 과정이 끝난 plane은 takeoff로,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; takeoff 과정이 끝난 plane은 최종 plane객체들을 저장하는 ArrayList객체에 저장*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((tempPlane = arrivalServer.upDate(0, currentTime)) != null) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; terminalServer.addPlane(tempPlane, currentTime);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((tempPlane = terminalServer.upDate(1, currentTime)) != null) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; takeoffServer.addPlane(tempPlane, currentTime);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((tempPlane = takeoffServer.upDate(2, currentTime)) != null);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentTime++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; 시뮬레이션 결과값을 출력하는 함수<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public void End_Simulation() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("*******************************************");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("*************** AIRPORT MODELING SIMULATION");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("*******************************************");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("\nMODELING PARAMETERS:");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("=======================");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Total Time Of Simulation (Servers Operating) : "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + MAX_MODEL_TIME + " seconds");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("\nAirport Service\tNumber\tService Time\tServer");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Operation Type\tServers\tsecs.\tmin.\tScheduling");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("===============\t=======\t============\t===========");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Landing Runways\t" + arrivalServer.getServerNum()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + "\t" + arrivalServer.getServiceTime() + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + +arrivalServer.getServiceTime() / 60 + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + arrivalServer.getOsType());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Terminal Gates\t" + terminalServer.getServerNum()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + "\t" + terminalServer.getServiceTime() + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + +terminalServer.getServiceTime() / 60 + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + terminalServer.getOsType());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Take-Off\t" + takeoffServer.getServerNum() + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + takeoffServer.getServiceTime() + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + +takeoffServer.getServiceTime() / 60 + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + takeoffServer.getOsType());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("\nINDIVIDUAL PLANE INFORMATION AT DEPARTURE:&nbsp;&nbsp;&nbsp; (All times in seconds)");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("===========================================");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("\n\tPlane\tInternational/\tTime\tTime\tLQ Wt.\tTime\tTime\tLQ Wt.\tTime\tTime\tLQ Wt.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("#\tID#\tDomestic Type\tIn LQ\tOut LQ\tTime\tIn LQ\tOut LQ\tTime\tIn LQ\tOut LQ\tTime");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("==\t=====\t=============\t=====\t======\t======\t=====\t======\t======\t=====\t======\t======");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; resultPlaneList.size(); i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Plane plane = resultPlaneList.get(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(i + 1 + "\t" + plane.getId() + "\t" + plane.getAirlineType() + "\t\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + plane.getServiceStartTime(0) + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + plane.getServiceEndTime(0) + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + plane.getWaitingTime(0) + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + plane.getServiceStartTime(1) + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + plane.getServiceEndTime(1) + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + plane.getWaitingTime(1) + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + plane.getServiceStartTime(2) + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + plane.getServiceEndTime(2) + "\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + plane.getWaitingTime(2));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("\nSUMMARY OF PLANE INFORMATION STATISTICS: (All times in seconds)");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("========================================");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Number of Planes processed: " + resultPlaneList.size());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("\nAirport Service\t\tTotal Wait\tAverage\t\tMaximum");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Operation Type\t\tTime\t\tWait Time\tWait Time");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("===============\t\t==========\t============\t===========");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Landing Runways\t\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + arrivalServer.getTotalWaitingTime() + "\t\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + arrivalServer.getAvgWaitingTime() + "\t\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + arrivalServer.getMaxWaitingTime());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Terminal Gates\t\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + terminalServer.getTotalWaitingTime() + "\t\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + terminalServer.getAvgWaitingTime() + "\t\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + terminalServer.getMaxWaitingTime());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Take-Off Runways\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + takeoffServer.getTotalWaitingTime() + "\t\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + takeoffServer.getAvgWaitingTime() + "\t\t"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + takeoffServer.getMaxWaitingTime());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("\nSUMMARY OF SERVER INFORMATION STATISTICS: (All times in seconds)");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("========================================");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server&nbsp;&nbsp;&nbsp; Total Time&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Total Idle&nbsp;&nbsp;&nbsp;&nbsp; Percent");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Server Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; In Operation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Time&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Idle Time");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("================&nbsp;&nbsp;&nbsp; ======&nbsp;&nbsp;&nbsp; ============&nbsp;&nbsp;&nbsp; ===========&nbsp;&nbsp; ==========");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Landing Server:");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; arrivalServer.getServerNum(); j++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("\t\t\t" + (j + 1) + "\t" + MAX_MODEL_TIME <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + "\t\t" + (MAX_MODEL_TIME - arrivalServer.getTotalIdleTime(j))<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; + "\t\t" + ((MAX_MODEL_TIME - arrivalServer.getTotalIdleTime(j)) * 100 / MAX_MODEL_TIME)<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; + "%");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Terminal Server:");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; terminalServer.getServerNum(); j++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("\t\t\t" + (j + 1) + "\t" + MAX_MODEL_TIME<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; + "\t\t" + (MAX_MODEL_TIME - terminalServer.getTotalIdleTime(j))<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; + "\t\t" + ((MAX_MODEL_TIME - terminalServer.getTotalIdleTime(j)) * 100 / MAX_MODEL_TIME)<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; + "%");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Take-Off Server:");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; takeoffServer.getServerNum(); j++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("\t\t\t" + (j + 1) + "\t" + MAX_MODEL_TIME<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; + "\t\t" + (MAX_MODEL_TIME - takeoffServer.getTotalIdleTime(j))<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; + "\t\t" + ((MAX_MODEL_TIME - takeoffServer.getTotalIdleTime(j)) * 100 / MAX_MODEL_TIME)<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; + "%");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
			 ]]> 
		</description>
		<category>App Programming</category>

		<comments>http://tobby48.egloos.com/2275342#comments</comments>
		<pubDate>Thu, 04 Jun 2009 07:33:37 GMT</pubDate>
		<dc:creator>tobby48</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 희귀? 최소자승법? ]]> </title>
		<link>http://tobby48.egloos.com/2237452</link>
		<guid>http://tobby48.egloos.com/2237452</guid>
		<description>
			<![CDATA[ 
  1. 회귀의 개념<br />
 두 변인이 일관된 관계일 때 한 변인의 알려진 값을 이용하여 다른 쪽의 대응 값을 예측 할 수 있다.한 변인을 다른 변인으로부터 예언하는 문제를 회귀라 부른다. 회귀라는 용어는 변인들 사이의 관계성을 기술하고 한 변인을 다른변인으로부터 예언하는 다양한 기법들을 의미한다.<br />
<br />
2. 최소자승법이란?<br />
 일반적으로 두 변인 X와 Y간의 직선관계를 방정식으로 나타낼 수 있다. 이 때,<br />
와 같은 회귀선으로 나타낸다. 이러한 X, Y 두 변인 사이의 관계를 분석하는 것을 단순회귀분석이라 한다. 이 때 적합한회귀선을 구하기 위하여 이용되는 기준을 최소자승법이라 한다. 즉, 에서 다른 직선들의 b0와 b1의 구체적인 값들은 서로 다를것이다. 목적은 어떤 선이 실제 자료점들과 가장 근접한지를 결정하는 것이다. 직선이 자료점들에 얼마나 적합한지를 판정하려면 첫단계는 각 자료점과 직선 사이의 거리를 수학적으로 정하는 것이다. 자료의 모든 X값에 대하여 직선방정식은 직선 위의 Y값을결정할 것이다. 이 값은 예측된 Y이고 으로 표기한다.<br />
실제 자료점(Y)과 직선위의 예측된 점간의 수직적 거리를 측정하며 이 거리는 직선과 실제자료 사이의 오차를 측정한다.실제자료점(Y)과 직선상의 예측점()간의 거리는 Y-‘으로 나타낸다. 회귀의 목표는 이 거리를 최소화하는 직선의 방정식을 찾는것이다. <br />
이 거리중 어떤것은 (+)이고 어떤 것은 (-)일 것이므로 오차의 일률적인 측정치를 얻기 위해 각 거리를 자승하여 합하는 과정이필요하다. 다음으로 직선과 자료간의 전체 오차를 결정하기 위하여 모든 자료점에 대해 자승된 오차를 합한다. 따라서, 최소자승법은이러한 오차들의 자승의 합(∑e2)이 최소가 되게 하는 일차방정식을 구하는 과정이다.<br />
<br />
<br />
<br />
[출처]<br />
http://mybox.happycampus.com/cwk11/689327<br />
			 ]]> 
		</description>
		<category>Terms</category>

		<comments>http://tobby48.egloos.com/2237452#comments</comments>
		<pubDate>Tue, 26 May 2009 00:49:40 GMT</pubDate>
		<dc:creator>tobby48</dc:creator>
	</item>
	<item>
		<title><![CDATA[ DT regression test ]]> </title>
		<link>http://tobby48.egloos.com/2237445</link>
		<guid>http://tobby48.egloos.com/2237445</guid>
		<description>
			<![CDATA[ 
  <p>회귀 테스트(regression test)란 소프트웨어의 유지보수단계에서수행하는 테스트중 한가지로서, 어떤 프로그램에 수정이 가해진 이후에 해당 프로그램이 제대로 동작하는 것을 확인하기 위해&nbsp;수행되는 테스트를 말합니다.</p><p>&nbsp;</p><p>SQL에서의 Regression Test라고 하는 것은 어떤 Query를 변경하였을 때, 그 Query의 실행 결과를 참조하는 곳에서 제대로 기능을 수행하는지를 검증하는 테스트를 말합니다.</p><p><br />
</p><p><br />
</p><p><br />
</p><p>[출처]</p><p>http://kin.naver.com/detail/detail.php?d1id=1&amp;dir_id=10110&amp;eid=yX6RP9Ia+Ny70KD8xzAtO9Je+HsUhrI8&amp;qb=cmVncmVzc2lvbg==&amp;enc=utf8&amp;pid=fmVIodoi5U4ssctveiRsss--247541&amp;sid=Shs2HjAjG0oAABpQD@c<br />
</p>			 ]]> 
		</description>
		<category>Terms</category>

		<comments>http://tobby48.egloos.com/2237445#comments</comments>
		<pubDate>Tue, 26 May 2009 00:42:59 GMT</pubDate>
		<dc:creator>tobby48</dc:creator>
	</item>
</channel>
</rss>
