![]() |
||||||
|
||||||
|
À̹ø È£¿¡¼´Â, » ½ºÇ÷¡½Ã ½ºÅ©¸°°ú MUSTANG » Å×À̺í Á¤·Ä ¹× ÇÊÅ͸µ À» ´Ù·ì´Ï´Ù. |
||
| ½ºÇ÷¡½Ã ½ºÅ©¸°°ú MUSTANG | ||
|
Wikipedia¿¡ µû¸£¸é ½ºÇ÷¡½Ã ½ºÅ©¸°Àº ÇÁ·Î±×·¥À̳ª ¿î¿µÃ¼Á¦°¡ ·ÎµùµÇ´Â µ¿¾È Ç¥½ÃµÇ´Â À̹ÌÁö¸¦ °¡¸®Å°´Â ÄÄÇ»ÅÍ ¿ë¾î·Î¼, »ç¿ëÀÚ¿¡°Ô ÇÁ·Î±×·¥ÀÌ Ãʱâȵǰí ÀÖ´Ù´Â °ÍÀ» ½Ã°¢ÀûÀ¸·Î º¸¿©ÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. Java SE 6(ÄÚµå¸í Mustang)°¡ Ãâ½ÃµÇ±â Àü¿¡´Â ¸ÞÀÎ ¸Þ¼Òµå¸¦ ½ÃÀÛÇÒ ¶§ âÀ» ¸¸µé°í ±× ¼Ó¿¡ À̹ÌÁö¸¦ ¹èÄ¡ÇÏ¿© ½ºÇ÷¡½Ã ½ºÅ©¸°ÀÇ µ¿ÀÛÀ» º¸¿©ÁÖ´Â °ÍÀÌ °íÀÛÀ̾ú´Ù. À̰͵µ ³ª¸§´ë·Î À¯¿ëÇßÁö¸¸, âÀÌ Ç¥½ÃµÇ±â Àü¿¡ Java ·±Å¸ÀÓÀÌ ¿ÏÀüÈ÷ Ãʱâ鵃 Çʿ䰡 ÀÖ¾ú´Ù. ÇÑÆí, ÀÌ ÃʱâÈ °úÁ¤¿¡´Â AWT¿Í º¸Åë SwingÀÌ Æ÷ÇԵǾî Ãʱ⠱׷¡ÇÈ µð½ºÇ÷¹À̸¦ Áö¿¬½ÃŰ´Â ¿øÀÎÀÌ µÇ¾ú´Ù. MustangÀÇ °æ¿ì¿¡´Â, »õ·Î¿î ¸í·É¾î ¶óÀÎ ¿É¼ÇÀ¸·Î ÀÌ ±â´ÉÀ» ÈξÀ ½±°Ô ¸¸µé¾îÁÙ »Ó ¾Æ´Ï¶ó »ç¿ëÀÚ¿¡°Ô À̹ÌÁö¸¦ ´õ ºü¸£°Ô, Áï Java ·±Å¸ÀÓÀÌ ½ÃÀ۵DZ⵵ Àü¿¡ µð½ºÇ÷¹À̸¦ °¡´ÉÇÏ°Ô ÇØÁØ´Ù. ÀÌ ±â´ÉÀÌ ÃÖÁ¾ÀûÀ¸·Î Æ÷ÇԵǷÁ¸é JCPÀÇ ½ÂÀÎÀ» ¹Þ¾Æ¾ß ÇÑ´Ù. ¸í·É¾î ¶óÀÎ ¿É¼Ç ¸í·É¾î ¶óÀÎÀ¸·Î ÇÁ·Î±×·¥À» ½ÇÇàÇϸé -splash ¸í·É¾î ¶óÀÎ ½ºÀ§Ä¡¸¦ ÅëÇØ ½ºÇ÷¡½Ã ½ºÅ©¸°À» »ý¼ºÇÒ ¼ö ÀÖ´Ù. ÀÌ ±â´ÉÀº ½ºÅ©¸³Æ®, ¹èÄ¡ ÆÄÀÏ, ¹ÙÅÁÈ¸é ¹Ù·Î°¡±â µîÀ» ÀÌ¿ëÇØ¼ ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¶§ ƯÈ÷ À¯¿ëÇϸç, ¸í·É¾î ¶óÀÎ ½ºÀ§Ä¡ µÚ¿¡´Â ´ÙÀ½°ú °°Àº À̹ÌÁö À̸§ÀÌ ¿Â´Ù.
java -splash:Hello.png HelloWorld -splash¿Í À̹ÌÁö À̸§ »çÀÌ¿¡´Â ÄÝ·ÐÀÌ µé¾î°£´Ù. ÀÌ·¸°Ô ÇÏ¸é ·±Å¸ÀÓ È¯°æÀÌ ¿ÏÀüÈ÷ ÃʱâȵDZâ Àü¿¡ À̹ÌÁö°¡ Áï½Ã µð½ºÇ÷¹À̵ȴÙ(ȸéÀÇ Áß¾Ó¿¡ µð½ºÇ÷¹À̵Ê). ½ºÇ÷¡½Ã ½ºÅ©¸° À̹ÌÁö¿¡´Â GIF, PNG, JPEG µîÀÇ Æ÷¸ËÀÌ »ç¿ëµÉ ¼ö ÀÖÀ¸¸ç, Åë»óÀûÀÎ Image Ŭ·¡½º¿Í ¸¶Âù°¡Áö·Î ½ºÇ÷¡½Ã ½ºÅ©¸° À̹ÌÁö´Â ¾Ö´Ï¸ÞÀ̼Ç, Åõ¸í(transparency), ¹ÝÅõ¸í(translucency. Microsoft Windows 2000 ¶Ç´Â XP¿¡¼¸¸ Áö¿ø) µîÀÇ È¿°ú¸¦ Áö¿øÇÑ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀÌ Ã¹ ¹øÂ° âÀ» »ý¼ºÇÏ¸é ½ºÇ÷¡½Ã ½ºÅ©¸°Àº »ç¶óÁø´Ù.
JAR ÆÄÀÏ Manifest ÀϹÝÀûÀ¸·Î ´ëºÎºÐÀÇ »ç¿ëÀÚ´Â ¸í·É¾î ¶óÀÎ ¿£Æ®¸®¿¡ -splash¸¦ »ðÀÔÇϱ⸦ ¿øÄ¡ ¾Ê´Â´Ù. µû¶ó¼, º¸´Ù È¿°úÀûÀ¸·Î ½ºÇ÷¡½Ã ½ºÅ©¸°À» µð½ºÇ÷¹ÀÌÇÏ´Â ¹æ¹ýÀº ¾ÖÇø®ÄÉÀ̼ÇÀ» À§ÇÑ manifest ÆÄÀÏÀ» »ý¼ºÇÑ ´ÙÀ½ ¾ÖÇø®ÄÉÀ̼ǿ¡ JAR ÆÄÀÏ ³»ÀÇ manifest¿Í À̹ÌÁö¸¦ °áÇÕÇÏ´Â °ÍÀÌ´Ù. »ç¿ëÀÚ°¡ JAR ÆÄÀϷκÎÅÍ ¾ÖÇø®ÄÉÀ̼ÇÀ» ·ÐÄ¡ÇÒ ¶§ ½ºÇ÷¡½Ã ½ºÅ©¸°ÀÌ Ç¥½ÃµÇ´Âµ¥, ÀÌ °æ¿ì¿¡´Â »ç¿ëÀÚ°¡ ¸í·É¾î ¶óÀÎ ¿É¼ÇÀ» ÁöÁ¤ÇÏÁö ¾Ê¾Æµµ µÈ´Ù.
manifest ÆÄÀÏ ¿É¼ÇÀº SplashScreen-Image·Î ¸í¸íµÇ°í, ¿É¼Ç µÚ¿¡´Â À̹ÌÁö ÆÄÀϸíÀÌ ¿Â´Ù. ÆÄÀÏÀÌ JAR ÆÄÀÏÀÇ Åé ·¹º§¿¡ ÀÖÁö ¾ÊÀ» °æ¿ì¿¡´Â ÆÄÀϸíÀÇ Àüü °æ·Î¸¦ ÁöÁ¤ÇÒ Çʿ䰡 ÀÖ´Ù.
´ÙÀ½Àº ÀÌ »õ·Î¿î ½ºÇ÷¡½Ã ½ºÅ©¸° ±â´ÉµéÀ» º¸¿©ÁÖ´Â °£´ÜÇÑ ¿¹Á¦ÀÌ´Ù . ¸ÕÀú, ´ÙÀ½ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϵµ·Ï ÇÑ´Ù.
import javax.swing.*;
import java.awt.*;
public class HelloSplash {
public static void main(String args[]) {
Runnable runner = new Runnable() {
public void run() {
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
}
JFrame frame = new JFrame("Splash Me");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel(
"Hello, Splash", JLabel.CENTER);
frame.add(label, BorderLayout.CENTER);
frame.setSize(300, 95);
frame.setVisible(true);
}
};
EventQueue.invokeLater(runner);
}
}
ÀÌ¾î¼ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÑ´Ù.
javac HelloSplash.java
±×·± ´ÙÀ½ ¸í·É¾î ¶óÀÎ -splash¸¦ ½ÃÇèÇØº»´Ù. ÀÛ¾÷À» ´Ü¼øÈ½Ã۱â À§ÇØ, ÇÁ·Î±×·¥°ú µ¿ÀÏÇÑ µð·ºÅ͸®¿¡ ÀÖ´Â ½ºÇ÷¡½Ã ½ºÅ©¸° À̹ÌÁö¸¦ »ç¿ëÇÑ´Ù.
java -splash:MyImage.png HelloSplash MyImage°¡ Áï½Ã ȸé Áß¾Ó¿¡ ¹èÄ¡µÇ°í, ÀÌ¾î¼ Java ·±Å¸ÀÓ È¯°æÀÌ ÃʱâÈµÇ°í ³ª¸é ¾ÖÇø®ÄÉÀÌ¼Ç È¸éÀÌ Ç¥½ÃµÇ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.
![]() ![]() ÀÌÁ¦ JAR ÆÄÀÏ ¹æ½ÄÀ» ½ÃÇèÇØ º¸±â·Î ÇÏÀÚ. ¸ÕÀú manifest¸¦ À§ÇÑ manifest.mf ÆÄÀÏÀ» »ý¼ºÇÑ´Ù. ÆÄÀÏÀÇ ³»¿ëÀº ´ÙÀ½°ú °°Àº ÇüÅÂÀ̾î¾ß ÇÑ´Ù.
Manifest-Version: 1.0 Main-Class: HelloSplash SplashScreen-Image: MyImage.pngÀÌ¾î¼ JAR ÆÄÀÏÀ» ÆÐŰÁöÇÑ´Ù. jar -mcvf manifest.mf Splash.jar HelloSplash*.class MyImage.png±×·± ´ÙÀ½ -splash ¸í·É¾î ¶óÀÎ ¿É¼ÇÀ» ÁöÁ¤ÇÏÁö ¾Ê°í JAR¸¦ ½ÇÇàÇÑ´Ù.
java -jar Splash.jarÀÌÀü°ú ¸¶Âù°¡Áö·Î ½ºÇ÷¡½Ã ½ºÅ©¸°¿¡ ÀÌ¾î¼ ¾ÖÇø®ÄÉÀÌ¼Ç È¸éÀÌ Ç¥½ÃµÇ¾î¾ß ÇÑ´Ù. ¿©·¯ºÐÀÇ JAR ÆÄÀÏÀÌ manifest¿¡ ÁöÁ¤µÈ ½ºÇ÷¡½Ã ½ºÅ©¸° À̹ÌÁö¸¦ °¡Áö°í ÀÖ°í, »ç¿ëÀÚ°¡ ¸í·É¾î ¶óÀο¡¼ ½ºÇ÷¡½Ã À̹ÌÁö¸¦ ÁöÁ¤ÇÏ´Â °æ¿ì¿¡´Â ¸í·É¾î ¶óÀÎ À̹ÌÁö¿¡ ¿ì¼±±ÇÀÌ ÁÖ¾îÁö°í ´ë½Å Ç¥½ÃµÈ´Ù. °í±Þ ±â´É ´ë°³ÀÇ °æ¿ì¿¡´Â ¸í·É¾î ¶óÀÎ -splash ¹× manifest SplashScreen-Image ¿É¼ÇÀ¸·Î ÃæºÐÇÏÁö¸¸, Mustang¿¡´Â ´õ ¸¹Àº ½ºÇ÷¡½Ã ½ºÅ©¸° ±â´ÉÀÌ µé¾î ÀÖ´Ù. java.awt ÆÐŰÁö´Â ´Ü¼øÈ÷ ½ºÇ÷¡½Ã ½ºÅ©¸° À̹ÌÁö¸¦ º¸¿©ÁÖ´Â °Í ÀÌ»óÀÇ Áøº¸µÈ ±â´ÉÀ» À§ÇÑ SplashScreen Ŭ·¡½º¸¦ Á¦°øÇÑ´Ù.
-splash ¸í·É¾î ¶óÀÎ ¿É¼ÇÀ̳ª manifestÀÇ SplashScreen-Image ¿É¼ÇÀ¸·Î À̹ÌÁö°¡ »ý¼ºµÈ °æ¿ì¿¡´Â SplashScreen Ŭ·¡½ºÀÇ getSplashScreen() ¸Þ¼Òµå°¡ »ý¼ºµÈ ȸéÀ» ¹ÝȯÇÑ´Ù. À̹ÌÁö°¡ »ý¼ºµÇÁö ¾Ê¾Ò´Ù¸é getSplashScreen()ÀÌ nullÀ» ¹ÝȯÇÑ´Ù.
´Ù¸¥ SplashScreen ¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ¼ ½ºÇ÷¡½Ã ½ºÅ©¸°°ú °ü·ÃµÈ ´Ù¾çÇÑ »ç½ÇÀ» ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù.
setImageURL() ¸Þ¼Òµå´Â µð½ºÇ÷¹ÀÌÇÒ »õ À̹ÌÁö¿¡ ´ëÇÑ URLÀ» Á¦°øÇÒ ¼ö ÀÖ°Ô ÇØÁÖ°í, ´õ ÀϹÝÀûÀÎ µÎ ¹øÂ° ¹æ¹ýÀº getGraphics() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© âÀÇ ±×·¡ÇÈ ÄÁÅØ½ºÆ®(java.awt.Graphics)¸¦ ¾ò´Â °ÍÀÌ´Ù. ±×·± ´ÙÀ½ Åë»óÀûÀÎ ±×·¡ÇȰú Java 2D API¸¦ ÅëÇØ À̹ÌÁö¸¦ ¾÷µ¥ÀÌÆ®Çϴµ¥, ±× ÀÌÀ¯´Â À̰ÍÀÌ ´Ü¼øÇÑ java.awt.Graphics°¡ ¾Æ´Ï¶ó Graphics2DÀÇ ÀνºÅϽºÀ̱⠶§¹®ÀÌ´Ù. ±×·¡ÇÈ ÄÁÅØ½ºÆ®¿¡ µå·Î¿ì(draw)ÇÑ ÈÄ SplashScreenÀÇ update() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© ¾÷µ¥ÀÌÆ®µÈ À̹ÌÁö¸¦ µå·Î¿ìÇÑ´Ù.´ÙÀ½Àº ½ºÇ÷¡½Ã ½ºÅ©¸°¿¡ Ç¥½ÃµÇ´Â ÀÏ·ÃÀÇ »ö»óÀ» ¼øÈ¯ÇÏ´Â ÈĹÝÀÇ µ¿ÀÛÀ» º¸¿©ÁÖ´Â ¿¹Á¦ÀÌ´Ù. À̰ÍÀÌ ÇÁ·Î±×·¹½º ¹Ù, ¶Ç´Â ¾ÖÇø®ÄÉÀÌ¼Ç ÃʱâÈÀÇ ÁøÇà »óŸ¦ ³ªÅ¸³»´Â ´Ù¸¥ »óÅ µ¥ÀÌÅ͸¦ µð½ºÇ÷¹ÀÌÇÏ´Â °ÍÀ» »ó»óÇØº¸¶ó.
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.util.*;
public class ExtendedSplash {
public static void main(String args[]) {
Runnable runner = new Runnable() {
public void run() {
Random random = new Random();
SplashScreen splash = SplashScreen.getSplashScreen();
Graphics2D g = (Graphics2D)splash.getGraphics();
Dimension dim = splash.getSize();
Color colors[] = {Color.RED, Color.ORANGE,
Color.YELLOW, Color.GREEN, Color.BLUE,
Color.MAGENTA};
for (int i=0; i<100; i++) {
g.setColor(colors[i % colors.length]);
g.fillRect(50, 50, dim.width-100, dim.height-100);
splash.update();
try {
Thread.sleep(250);
} catch (InterruptedException ignored) {
}
}
JFrame frame = new JFrame("Splash Me2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label =
new JLabel("Hello, Splash", JLabel.CENTER);
frame.add(label, BorderLayout.CENTER);
frame.setSize(300, 95);
frame.setVisible(true);
}
};
EventQueue.invokeLater(runner);
}
}
![]() ½ºÇ÷¡½Ã ½ºÅ©¸° À̹ÌÁö À§¿¡¼ ¾î¶»°Ô µå·ÎÀ×ÀÌ ÀÌ·ç¾îÁö´ÂÁö ÁÖ¸ñÇÒ °Í. ¿¹Á¦´Â »ö»ó ¼øÈ¯ÀÌ ¿Ï·áµÈ ÈÄÀÇ ÇÁ·¹ÀÓÀ» º¸¿©Áִµ¥, ÀÌ´Â ½Ãµ¿ °úÁ¤ÀÇ ÀüÇüÀûÀÎ ¾ç»óÀ¸·Î, ÃʱâȰ¡ ¿Ï·áµÈ ÈÄ ÇÁ·¹ÀÓÀÌ Ç¥½ÃµÇ¸é¼ ½ºÇ÷¡½Ã ½ºÅ©¸°À» °¡¸®°Ô µÈ´Ù. ¸¶Áö¸·À¸·Î ¾ð±ÞÇÒ SplashScreen ¿É¼ÇÀÇ °æ¿ì close() ¸Þ¼Òµå°¡ »ç¿ëµÇ´Âµ¥, âÀ» ´Ý°í °ü·ÃµÈ ¸®¼Ò½º¸¦ ÇØÁ¦ÇϰíÀÚ ÇÒ °æ¿ì¿¡ ÀÌ ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. ù ¹øÂ° âÀÌ °¡½ÃÀûÀ¸·Î µÇ¸é ÀÌ ¸Þ¼Òµå°¡ ÀÚµ¿À¸·Î È£ÃâµÇ±â ¶§¹®¿¡ ±»ÀÌ È£ÃâÇÒ ÇÊ¿ä´Â ¾ø´Ù.
½ºÇ÷¡½Ã ½ºÅ©¸°À» ÀÌ¿ëÇÏ´Â ¹æ¹ý¿¡ °üÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Å×Å©´ÏÄà ¾ÆÆ¼Å¬ ¡°MustangÀÇ »õ·Î¿î ½ºÇ÷¡½Ã ½ºÅ©¸° ±â´É(New Splash-Screen Functionality in Mustang)¡±À» ÂüÁ¶Çϱ⠹ٶõ´Ù. ¾Æ¿ï·¯, SplashScreen Ŭ·¡½º¸¦ À§ÇÑ javadocÀ» ÇÔ²² ÂüÁ¶ÇÒ °Í. À§·Î °¡±â |
||
| Å×À̺í Á¤·Ä ¹× ÇÊÅ͸µ | ||
Java SE 6.0(ÄÚµå¸í Mustang)¿¡´Â Swing JTableÀÇ ³»¿ëÀ» ÈξÀ ½±°Ô Á¤·ÄÇϰí ÇÊÅ͸µÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â ¸î °¡Áö ±â´ÉÀÌ Ãß°¡µÈ´Ù. (ÀÌ ±â´ÉµéÀÌ ÃÖÁ¾ÀûÀ¸·Î Æ÷ÇԵǷÁ¸é JCPÀÇ ½ÂÀÎÀ» °ÅÃÄ¾ß ÇÑ´Ù.) ÃÖ±ÙÀÇ Å×À̺í Á᫐ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º´Â ´ëºÎºÐ »ç¿ëÀÚ°¡ Å×À̺í Çì´õ¸¦ Ŭ¸¯ÇÏ¿© Ä®·³À» Á¤·ÄÇÒ ¼ö ÀÖµµ·Ï µÇ¾î Àִµ¥, ÀÌ´Â Mustang ÀÌÀü¿¡ Swing JTable Áö¿øÀ» ÅëÇØ °¡´ÉÇÏ°Ô µÇ¾ú´Ù. ÀÌ ±â´ÉÀ» ÇÊ¿ä·Î ÇÏ´Â °¢ Å×ÀÌºí¿¡ ÀÏÀÏÀÌ ¼öµ¿À¸·Î ±â´ÉÀ» Ãß°¡ÇØ ÁÖ¾î¾ß¸¸ ÇÏ´Â ºÒÆíÀÌ µû¶úÁö¸¸ MustangÀº ÃÖ¼ÒÇÑÀÇ ³ë·ÂÀ¸·Î ÀÌ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. ÇÊÅ͸µÀº »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¿¡¼ ÀϹÝÀûÀ¸·Î ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ¶Ç ´Ù¸¥ ¿É¼ÇÀ¸·Î¼, Å×ÀÌºí ³»¿¡¼ »ç¿ëÀÚ°¡ Á¦°øÇÏ´Â ±âÁØ¿¡ ºÎÇÕÇÏ´Â ÇุÀ» µð½ºÇ÷¹ÀÌÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. MustangÀ» ÀÌ¿ëÇϸé JTable ÄÁÅÙÃ÷ ÇÊÅ͸µÀÌ ÈξÀ ¿ëÀÌÇØÁø´Ù.
Çà Á¤·ÄÇϱâ Mustang¿¡¼ ÇàÀ» Á¤·ÄÇϰí ÇÊÅ͸µÇÏ´Â ±âÁØÀÌ µÇ´Â °ÍÀÌ ¹Ù·Î Ãß»ó RowSorter Ŭ·¡½º·Î¼, ÀÌ RowSorter´Â µÎ °¡Áö ¸ÅÇÎ-JTable ³»ÀÇ ÇÑ ÇàÀ» ±âº» ¸ðµ¨ÀÇ ¿¤¸®¸ÕÆ®·Î, ±×¸®°í ´Ù½Ã ¹Ý´ë·Î-À» À¯ÁöÇÑ´Ù. ÀÌ´Â ÇϳªÀÇ ÇàÀÌ Á¤·Ä°ú ÇÊÅ͸µÀ» ¼öÇàÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. ÀÌ Å¬·¡½º´Â TableModel °ú ListModel ¸ðµÎ¿¡ Àû¿ëµÉ ¸¸Å Æ÷°ýÀûÀ̱ä ÇÏÁö¸¸ TableRowSorter¿¡¸¸ JTable¿¡ Àû¿ëµÇ´Â Mustang ¶óÀ̺귯¸®°¡ Á¦°øµÈ´Ù.
°¡Àå °£´ÜÇÑ °æ¿ì¸¦ ¿¹·Î µé¸é, TableModelÀ» TableRowSorter »ý¼ºÀÚ¿¡ ÆÐ½ºÇÑ ´ÙÀ½ »ý¼ºµÈ RowSorter¸¦ JTableÀÇ setRowSorter() ¸Þ¼Òµå·Î ÆÐ½ºÇÑ´Ù. ´ÙÀ½Àº ÀÌ·± ¹æ½ÄÀ» º¸¿©ÁÖ´Â ¿¹Á¦ ÇÁ·Î±×·¥ SortTableÀÌ´Ù.
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
public class SortTable {
public static void main(String args[]) {
Runnable runner = new Runnable() {
public void run() {
JFrame frame = new JFrame("Sorting JTable");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rows[][] = {
{"AMZN", "Amazon", 41.28},
{"EBAY", "eBay", 41.57},
{"GOOG", "Google", 388.33},
{"MSFT", "Microsoft", 26.56},
{"NOK", "Nokia Corp", 17.13},
{"ORCL", "Oracle Corp.", 12.52},
{"SUNW", "Sun Microsystems", 3.86},
{"TWX", "Time Warner", 17.66},
{"VOD", "Vodafone Group", 26.02},
{"YHOO", "Yahoo!", 37.69}
};
String columns[] = {"Symbol", "Name", "Price"};
TableModel model =
new DefaultTableModel(rows, columns) {
public Class getColumnClass(int column) {
Class returnValue;
if ((column >= 0) && (column < getColumnCount())) {
returnValue = getValueAt(0, column).getClass();
} else {
returnValue = Object.class;
}
return returnValue;
}
};
JTable table = new JTable(model);
RowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
JScrollPane pane = new JScrollPane(table);
frame.add(pane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
}
};
EventQueue.invokeLater(runner);
}
}
![]() µð½ºÇ÷¹ÀÌµÈ Å×À̺íÀÇ Æ¯Á¤ Ä®·³À» Ŭ¸¯Çϰí Ä®·³ÀÇ ³»¿ëÀÌ ÀçÁ¤¸®µÇ´Â °ÍÀ» »ìÆìº»´Ù. ![]() Ä¿½ºÅÒ ¼ºêŬ·¡½º¸¦ »ý¼ºÇÏ´À´Ï Â÷¶ó¸® DefaultTableModelÀ» ÀÌ¿ëÇÏ¸é ¾È µÇ´À³Ä°í Áú¹®À» ´øÁúÁöµµ ¸ð¸¥´Ù. ±× ´ë´äÀº, TableRowSorter°¡ Ä®·³ Á¤·Ä ½Ã Àû¿ëµÇ´Â ÀÏ·ÃÀÇ ±ÔÄ¢À» °¡Áø´Ù´Â °ÍÀÌ´Ù. ±âº»°ªÀ¸·Î, Å×ÀÌºí ³»ÀÇ ¸ðµç Ä®·³Àº Object ŸÀÔÀ¸·Î °£ÁֵȴÙ. µû¶ó¼, toString()À» È£ÃâÇÔÀ¸·Î½á Á¤·ÄÀÌ ¼öÇàµÇ´Â °ÍÀÌ´Ù. DefaultTableModelÀÇ ±âº»°ª getColumnClass() ºñÇìÀ̺ñ¾î¸¦ ¿À¹ö¶óÀ̵åÇÔÀ¸·Î½á, RowSorter´Â ComparableÀ» ±¸ÇöÇÏ´Â °ÍÀ¸·Î °¡Á¤Çϰí ÇØ´ç Ŭ·¡½ºÀÇ ±ÔÄ¢¿¡ µû¶ó Á¤·ÄÇÑ´Ù. ¶ÇÇÑ, setComparator(int column, Comparator comparator)¸¦ È£ÃâÇÏ¿© ƯÁ¤ Ä®·³À» À§ÇÑ Ä¿½ºÅÒ Comparator¸¦ ¼³Ä¡ÇÒ ¼öµµ ÀÖ´Ù.
´ÙÀ½Àº Á¤·Ä°ú °ü·ÃÀÌ ÀÖ´Â SortTable ÇÁ·Î±×·¥ ³»ÀÇ ¼¼ °¡Áö ÁÖ¿ä ¶óÀÎÀÌ´Ù.
JTable table = new JTable(model);
RowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
ù ¹øÂ° ¶óÀÎÀº ¸ðµ¨À» Å×ÀÌºí¿¡ ¿¬°á½Ã۰í, µÎ ¹øÂ° ¶óÀÎÀº ¸ðµ¨¿¡ ƯÁ¤ RowSorter¸¦ »ý¼ºÇÑ´Ù. ¼¼ ¹øÂ° ¶óÀÎÀº RowSorter¸¦ JTable¿¡ ¿¬°á½ÃŲ´Ù. ÀÌ·Î½á »ç¿ëÀÚ´Â Ä®·³ Çì´õ¸¦ Ŭ¸¯ÇÏ¿© ÇØ´ç Ä®·³À» Á¤·ÄÇÒ ¼ö ÀÖ´Ù. °°Àº Ä®·³À» µÎ ¹ø Ŭ¸¯Çϸé Á¤·Ä ¼ø¼°¡ ¹Ý´ë·Î µÈ´Ù.
Á¤·Ä ¼ø¼°¡ ¹Ù²ð ¶§ °¢ÀÚÀÇ ¾×¼ÇÀ» Ãß°¡ÇÏ°í ½ÍÀ¸¸é RowSorter¿¡ RowSorterListener¸¦ ÷ºÎÇÏ¸é µÈ´Ù. ÀÎÅÍÆäÀ̽º´Â ´ÙÀ½°ú °°Àº ÇϳªÀÇ ¸Þ¼Òµå¸¦ °¡Áø´Ù.
void sorterChanged(RowSorterEvent e)ÀÌ ¸Þ¼Òµå´Â »óÅ ¹Ù¿¡¼ ÅØ½ºÆ®¸¦ ¾÷µ¥ÀÌÆ®Çϰųª ¸î °¡Áö Ãß°¡ ŽºÅ©¸¦ ¼öÇàÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. ÀÌ ¾×¼Ç¿¡ ´ëÇÑ RowSorterEvent´Â RowSorter°¡ ºä ¾ÈÆÆÀÇ ÇàÀ» ÇÊÅ͸µÇÑ °æ¿ì, Á¤·Ä Àü¿¡ ¾ó¸¶³ª ¸¹Àº ÇàÀÌ Á¸ÀçÇß¾ú´ÂÁö ¾Ë¾Æ³¾ ¼ö ÀÖ°Ô ÇØÁØ´Ù.
Å×À̺í Çà ÇÊÅ͸µÇϱâ RowFilter¸¦ TableRowSorter¿¡ ¿¬°á½ÃÄÑ Å×À̺íÀÇ ³»¿ëÀ» ÇÊÅ͸µÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, RowFilter¸¦ ÀÌ¿ëÇÏ¿© À̸§ÀÌ A ÀÚ·Î ½ÃÀÛÇϰųª ÁÖ°¡°¡ $50¸¦ ³Ñ´Â Çุ Å×ÀÌºí¿¡ µð½ºÇ÷¹À̵ǵµ·Ï ÇÏ´Â °æ¿ì°¡ ±×°ÍÀÌ´Ù. Ãß»ó RowFilter Ŭ·¡½ºÀÇ °æ¿ì ´ÙÀ½°ú °°ÀÌ ÇÊÅ͸µ¿¡ »ç¿ëµÇ´Â ÇϳªÀÇ ¸Þ¼Òµå¸¦ °¡Áø´Ù.
boolean include(RowFilter.Entry<? extends M,? extends I> entry) RowSorter¿¡ ¿¬°áµÈ ¸ðµ¨ ³»ÀÇ °¢ ¿£Æ®¸®¿¡ ´ëÇØ, ¸Þ¼Òµå´Â ÁöÁ¤µÈ ¿£Æ®¸®°¡ ¸ðµ¨ÀÇ ÇöÀç ºä¿¡ Ç¥½ÃµÇ¾î¾ß ÇÒÁö ¿©ºÎ¸¦ ¾Ë·ÁÁØ´Ù. ´ë°³ÀÇ °æ¿ì ¿©·¯ºÐÀº °¢ÀÚÀÇ RowFilter ±¸ÇöÀ» »ý¼ºÇÒ ÇÊ¿ä´Â ¾øÀ¸³ª, ´ë½Å RowFilter´Â ÇÊÅÍ »ý¼ºÀ» À§ÇÑ ¿©¼¸ °³ÀÇ Á¤Àû ¸Þ¼Òµå¸¦ Á¦°øÇÑ´Ù.
dateFilter, numberFilter, regexFilter)¸¦ °¡Áö´Â RowFilter ÆÑÅ丮 ¸Þ¼ÒµåÀÇ °æ¿ì¿¡´Â ¸ðµ¨¿¡¼ ÁöÁ¤µÈ À妽º¿¡ ÀÏÄ¡ÇÏ´Â ÀÏ·ÃÀÇ Ä®·³¸¸À» È®ÀÎÇϰí, ÁöÁ¤µÈ À妽º°¡ ¾øÀ¸¸é ¸ðµç Ä®·³¿¡ ´ëÇØ ÀÏÄ¡ ¿©ºÎ¸¦ È®ÀÎÇÑ´Ù.
dateFilter´Â ³¯Â¥ÀÇ ÀÏÄ¡ ¿©ºÎ¸¦ È®ÀÎÇÒ ¼ö ÀÖ°Ô ÇØÁÖ°í, numberFilter´Â ÀÏÄ¡ÇÏ´Â ¼ö¸¦ È®ÀÎÇÑ´Ù. notFilter´Â ´Ù¸¥ ÇÊÅ͸¦ ¹ÝÀü½ÃŰ´Â µ¥ »ç¿ëµÈ´Ù. Áï, Á¦°ø ÇÊÅÍ¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â ¿£Æ®¸®¸¦ Æ÷ÇÔÇÑ´Ù´Â ¸»Àε¥, ÀÌ ÇÊÅÍ´Â °¡·É 2005³â 12¿ù 25ÀϱîÁö ¿Ï·áµÇÁö ¾ÊÀº ¿£Æ®¸®¸¦ ã´Â´ÙµçÁö ÇÏ´Â ÀÏ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. andFilter¿Í orFilter´Â ´Ù¸¥ ÇÊÅ͵éÀ» ³í¸®ÀûÀ¸·Î °áÇÕÇÏ´Â µ¥ »ç¿ëµÇ°í, regexFilter´Â Á¤±Ô Ç¥Çö½ÄÀ» »ç¿ëÇÏ¿© ÇÊÅ͸µÀ» ¼öÇàÇÑ´Ù. ´ÙÀ½Àº regexFilter¸¦ ÀÌ¿ëÇÏ¿© Å×À̺íÀÇ ³»¿ëÀ» ÇÊÅ͸µÇÏ´Â ÇÁ·Î±×·¥ FilterTableÀÌ´Ù.
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.util.regex.*;
public class FilterTable {
public static void main(String args[]) {
Runnable runner = new Runnable() {
public void run() {
JFrame frame = new JFrame("Sorting JTable");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rows[][] = {
{"AMZN", "Amazon", 41.28},
{"EBAY", "eBay", 41.57},
{"GOOG", "Google", 388.33},
{"MSFT", "Microsoft", 26.56},
{"NOK", "Nokia Corp", 17.13},
{"ORCL", "Oracle Corp.", 12.52},
{"SUNW", "Sun Microsystems", 3.86},
{"TWX", "Time Warner", 17.66},
{"VOD", "Vodafone Group", 26.02},
{"YHOO", "Yahoo!", 37.69}
};
Object columns[] = {"Symbol", "Name", "Price"};
TableModel model =
new DefaultTableModel(rows, columns) {
public Class getColumnClass(int column) {
Class returnValue;
if ((column >= 0) && (column < getColumnCount())) {
returnValue = getValueAt(0, column).getClass();
} else {
returnValue = Object.class;
}
return returnValue;
}
};
JTable table = new JTable(model);
final TableRowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
JScrollPane pane = new JScrollPane(table);
frame.add(pane, BorderLayout.CENTER);
JPanel panel = new JPanel(new BorderLayout());
JLabel label = new JLabel("Filter");
panel.add(label, BorderLayout.WEST);
final JTextField filterText =
new JTextField("SUN");
panel.add(filterText, BorderLayout.CENTER);
frame.add(panel, BorderLayout.NORTH);
JButton button = new JButton("Filter");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String text = filterText.getText();
if (text.length() == 0) {
sorter.setRowFilter(null);
} else {
try {
sorter.setRowFilter(
RowFilter.regexFilter(text));
} catch (PatternSyntaxException pse) {
System.err.println("Bad regex pattern");
}
}
}
});
frame.add(button, BorderLayout.SOUTH);
frame.setSize(300, 250);
frame.setVisible(true);
}
};
EventQueue.invokeLater(runner);
}
}
µð½ºÇ÷¹ÀÌ´Â ¾îµò°¡¿¡ SUNÀ̶ó´Â ¹®ÀÚ°¡ Æ÷ÇÔµÈ ¸ðµç ¹®ÀÚ¿¿¡ ´ëÇØ ÇÊÅ͸¦ ¼³Á¤Çϴµ¥, ÀÌ´Â ¹®ÀÚ¿ "SUN"¡¯¿¡ ÀÇÇØ ¸í½ÃµÈ´Ù. ÀÏÄ¡ ¿©ºÎ¸¦ Á¤È®ÇÏ°Ô °Ë»çÇÏ·Á¸é ¹®ÀÚ¿ÀÇ ½ÃÀÛ°ú ³¡ °¢°¢¿¡ '^'¿Í '$'ÀÇ ¹®ÀÚ¸¦ ÀÌ¿ëÇÑ´Ù.
![]() »ç¿ëÀÚ°¡ ¾Æ·¡ÂÊÀÇ " Filter" ¹öưÀ» ´©¸£¸é ÇÊÅÍ´Â ÀÚüÀûÀ¸·Î Matcher.find()¸¦ »ç¿ëÇÏ¿© Æ÷ÇÔ ¿©ºÎ¸¦ °Ë»çÇÑ´Ù.
![]() Å×ÀÌºí¿¡ Ç¥½ÃµÈ ÀÏ·ÃÀÇ ÇàÀ» º¯°æÇÏ·Á¸é ÇÊÅÍ ÅØ½ºÆ®¸¦ º¯°æÇϰí, Å×ÀÌºí ³»ÀÇ ¸ðµç ÇàÀ» º¸°í ½ÍÀ¸¸é ÇÊÅÍ ÅØ½ºÆ®¸¦ »èÁ¦ÇÑ´Ù. ¸¶Áö¸·À¸·Î »©³õÀ» ¼ö ¾ø´Â °ÍÀº, Á¤·ÄÀ̳ª ÇÊÅ͸µ ½Ã ¼±ÅÃÀº ºäÀÇ °üÁ¡¿¡¼ ÀÌ·ç¾îÁø´Ù´Â Á¡ÀÌ´Ù. µû¶ó¼, ±âº» ¸ðµ¨¿¡ ¸ÅÇÎÇÒ Çʿ䰡 ÀÖ´Ù¸é convertRowIndexToModel() ¸Þ¼Òµå¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ¸¶Âù°¡Áö·Î, ¸ðµ¨¿¡¼ ºä·Î ÀüȯÇÒ °æ¿ì¿¡´Â convertRowIndexToView()¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
RowSorter, TableRowSorter,
RowFilter µî¿¡ °üÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº °¢ Ŭ·¡½º¿¡ °üÇÑ javadocÀ» ÂüÁ¶Çϱ⠹ٶõ´Ù.
RowSorter TableRowSorter RowFilter À§·Î °¡±â |
||
º»
¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù.
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϰųª ¼ö½ÅÁÖ¼Ò¸¦ º¯°æÇÏ·Á¸é SKDN@Sun.comÀ¸·Î ¹®ÀÇ Áֽñ⠹ٶø´Ï´Ù. SKDN(Sun Korea Developers Network)¿¡¼ J2EE/J2SE Å×Å©ÆÁ µî ´Ù¾çÇÑ ¾ÆÆ¼Å¬µéÀ» Âü°íÇϼ¼¿ä. Copyright 2003-2005 Sun Korea, Ltd. All rights reserved. |