![]() |
||||||
|
||||||
Java 2 Platform, Standard Edition (J2SE)¿¡ ±â¹ÝÇÑ core Java technologies ¿Í APIsÀÇ »ç¿ë¿¡ °üÇÑ ÃֽŠÁ¤º¸¸¦ ¾ò¾î °¡½Ã±â ¹Ù¶ø´Ï´Ù. À̹ø È£¿¡¼´Â, » ÅØ½ºÆ® À¯È¿¼º °Ë»ç·Î ¹®¼ ÇÊÅ͸µÇϱ⠻ º¸Á¶ °øÇаú Java ¾×¼¼½º ºê¸´Áö À» ´Ù·ç°Ô µË´Ï´Ù. ÀÌ ±Û¿¡¼´Â Java 2 Platform Standard Edition Development Kit 5.0(JDK 5.0)À» »ç¿ëÇÕ´Ï´Ù. Download JDK 5.0 ÀúÀÚ John Zukowski |
||
| ÅØ½ºÆ® À¯È¿¼º °Ë»çÇÏ¿© ¹®¼ ÇÊÅ͸µÇϱâ | ||
ÀÚ¹Ù Ç÷§Æû¿ë À¯Àú ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé ¶§ À¯ÀúÀÇ ÅØ½ºÆ® ÀÔ·ÂÀÌ À¯È¿ÇÑÁö ±×¸®°í Á¶°Ç¿¡ ¸Â´ÂÁö °Ë»ç Çϴ°ÍÀº ¾ðÁ¦³ª Áß¿äÇÏ´Ù. »ç¿ëÀÚÀÇ J2SE ¹öÀü¿¡ µû¶ó ´Ù¸¥ validation ¿É¼ÇÀ» ÀÌ¿ëÇÏ°Ô µÇ´Âµ¥, ÀϹÝÀûÀ¸·Î ¿¹Àü ¿É¼ÇµéÀº »õ·Î¿î ¹öÀü¿¡µµ »ç¿ë °¡´ÉÇÏÁö¸¸ ´ëºÎºÐÀÇ °æ¿ì ´õ ³ªÀº ±â´ÉÀ» Á¦°øÇÏ´Â »õ·Î¿î ¿É¼ÇµéÀ» »ç¿ëÇϰíÀÚ ÇÒ °ÍÀÌ´Ù. À̹ø Å×Å©ÆÁ¿¡¼´Â J2SE 1.4 ¹öÀü¿¡¼ »ç¿ëÇÑ DocumentFilter Ŭ·¡½º¸¦ Æ÷ÇÔ, °¢ J2SE
¹öÀüµé¿¡¼ »ç¿ëÇÑ ¿É¼Çµé¿¡ ´ëÇØ¼ ¼³¸íÇÑ´Ù. Ű&Æ÷Ä¿½º ¸®½º³Ê·Î À¯È¿¼º °Ë»ç ¿¹Àü ¹öÀü¿¡¼ Swing ÄÄÆ÷³ÍÆ® ¼³Á¤¿¡´Â Á÷Á¢ÀûÀ̰ųª °£´ÜÈ÷ ÀÔ·ÂÀ» °Ë»çÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾ø¾ú´Ù. Ű ·¹º§¿¡¼ ÅØ½ºÆ® ÇʵåÀÇ ÀÔ·ÂÀ» Á¦ÇÑÇÏ·Á¸é ÄÄÆÛ³ÍÆ®¿¡ KeyListener¸¦ Ãß°¡Çϰí consume()¸¦
ÀÌ¿ëÇÏ¿© ÀÔ·Â À̺¥Æ®¸¦ ó¸®ÇؾßÇß´Ù(ÅØ½ºÆ® Çʵ忡 Ãß°¡µÇ±æ ¿øÄ¡ ¾ÊÀ» °æ¿ì). À̷νá Çʵ忡 ¼ýÀÚ¸¸ ÀÔ·Â °¡´ÉÇϵµ·Ï Á¦ÇÑÇÏ´Â µîÀÇ
±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÊµå ·¹º§ÀÇ À¯È¿È °Ë»ç¸¦ À§Çؼ´Â Æ÷Ä¿½º ¸®½º³Ê¸¦ ÷ºÎÇØ¾ß Çß´Ù. ÀÔ·ÂÀÌ À¯È¿ÇÏÁö ¾ÊÀ¸¸é, Æ÷Ä¿½º°¡ Çʵ带
¶°³¯ ¶§ Æ÷Ä¿½º¸¦ ¿òÁ÷À̵µ·Ï ÇÏ´Â ¿äûÀ» °ÅºÎÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¿É¼Çµé Áß ¾î´À°Íµµ Á¦´ë·Î ÃøÁ¤ÀÌ µÇÁö ¾ÊÁö¸¸, ÀÔ·ÂÀ» À¯È¿ÈÇÏ´Â
¹æ¹ýÀ» Á¦°øÇÏ´Â µµ±¸¿´´Ù. ÀÌ ¿É¼ÇµéÀº ÇöÀç »ç¿ëÀÌ ±ÇÀåµÇÁö ¾Ê´Â´Ù. °ËÁõ±â·Î À¯È¿¼º °Ë»ç J2SE 1.3¿¡´Â InputVerifier Ãß»ó Ŭ·¡½º°¡ Ãß°¡µÇ¾ú´Ù. JComponentÀÇ
setInputVerifier() ¸Þ¼Òµå·Î °ËÁõ±â(verifier)¸¦ ¾î´À ÄÄÆ÷³ÍÆ®¿¡³ª ÷ºÎÇÏ¿© InputVerifierÀÇ
boolean verify(JComponent input) ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵ùÇÒ ¼ö ÀÖ´Ù. ÄÄÆ÷³ÍÆ®¿¡ ÇöÀç
ÀÔ·ÂÀÌ À¯È¿ÇÏ´Ù¸é, tabŰ³ª shift-tab¸¦ ´·¶À» ¶§ verify()°¡ 'true'¸¦ ¸®ÅÏÇÑ´Ù. ±×·¯¸é
Æ÷Ä¿½º´Â ¼øÈ¯ ¼ø¼¿¡ µû¶ó ´ÙÀ½ ȤÀº ÀÌÀü ÄÄÆ÷³ÍÆ®·Î ¿òÁ÷ÀÌ°Ô µÈ´Ù. verify()°¡ 'false'¸¦ ¸®ÅÏÇϸé
ÇöÀç Çʵ忡 ¸ØÃçÀÖ°Ô µÈ´Ù. JComponent¿¡´Â ¶ÇÇÑ getVerifyInputWhenFocusTarget()
¸Þ¼Òµå°¡ ÀÖ´Ù. ÀÌ ¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ Help¿Í °°Àº ¸Þ´º¸¦ ¼±ÅÃÇϱâ Àü¿¡´Â °ËÁõÇÏÁö ¸øÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. À¯È¿È °Ë»ç¿¡ ´ëÇÑ ÀÌ ¹æ¹ýÀÇ µ¥¸ð·Î, ´ÙÀ½ÀÇ ÇÁ·Î±×·¥ NumericVerifier¿¡´Â ¼¼°³ÀÇ ÅØ½ºÆ® Çʵ尡
Æ÷ÇԵǾî ÀÖ´Ù. ¸Ç À§/¸Ç ¾Æ·¡ ÅØ½ºÆ® Çʵ忡¼´Â À¯È¿ÇÑ ¼ýÀÚ°ªÀÌ ÀÔ·ÂÀÌ µÇ¾î¾ß ´ÙÀ½ Çʵå·Î ³Ñ¾î°¥ ¼ö ÀÖ´Ù. Áß°£ ÅØ½ºÆ® Çʵ忡´Â
ÀÔ·Â Á¦ÇÑÀÌ ¾ø´Ù.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class NumericVerifier{
public static void main(String args[]) {
Runnable runner = new Runnable() {
public void run() {
JFrame frame = new JFrame("Numeric Verifier");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel1 = new JPanel(new BorderLayout());
JLabel label1 = new JLabel("Numeric-only");
JTextField textField1 = new JTextField();
panel1.add(label1, BorderLayout.WEST);
panel1.add(textField1, BorderLayout.CENTER);
JPanel panel2 = new JPanel(new BorderLayout());
JLabel label2 = new JLabel("Anything");
JTextField textField2 = new JTextField();
panel2.add(label2, BorderLayout.WEST);
panel2.add(textField2, BorderLayout.CENTER);
JPanel panel3 = new JPanel(new BorderLayout());
JLabel label3 = new JLabel("Numeric-only");
JTextField textField3 = new JTextField();
panel3.add(label3, BorderLayout.WEST);
panel3.add(textField3, BorderLayout.CENTER);
InputVerifier verifier = new InputVerifier() {
public boolean verify(JComponent comp) {
boolean returnValue;
JTextField textField = (JTextField)comp;
try {
Integer.parseInt(textField.getText());
returnValue = true;
} catch (NumberFormatException e) {
Toolkit.getDefaultToolkit().beep();
returnValue = false;
}
return returnValue;
}
};
textField1.setInputVerifier(verifier);
textField3.setInputVerifier(verifier);
frame.add(panel1, BorderLayout.NORTH);
frame.add(panel2, BorderLayout.CENTER);
frame.add(panel3, BorderLayout.SOUTH);
frame.setSize(300, 95);
frame.setVisible(true);
}
};
EventQueue.invokeLater(runner);
}
}
![]() »ç¿ëÀÚÁ¤ÀÇ ¹®¼·Î À¯È¿¼º °Ë»ç ÀÔ·ÂÀÌ ÀÌ·ç¾îÁø ÈÄ¿¡ ÇÊµå ·¹º§¿¡¼ À¯È¿¼ºÀ» °Ë»çÇÏ´Â ´ë½Å, ÅØ½ºÆ® ÄÄÆ÷³ÍÆ®¿¡ ±ÛÀÚ Çϳª¾¿ ÀÔ·Â/Á¦°ÅÇÒ ¶§ ¸Å¹ø À¯È¿¼ºÀ» °Ë»çÇÒ ¼ö ÀÖ´Ù. Document ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù. Model-View-Controller (MVC)
µðÀÚÀÎ ÆÐÅÏ¿¡ µû¶ó¼ Swing ÅØ½ºÆ® ÄÄÆ÷³ÍÆ®ÀÇ ¸ðµ¨ ÆÄÆ®°¡ Document ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ¿© °ü¸®µÈ´Ù.
J2SE 5.0 ¹öÀü ÀÌÀü¿¡´Â À¯È¿ÇÏ´Ù°í ¿©°ÜÁö´Â ÀÔ·ÂÀ» Á¦ÇÑÇϱâ À§ÇØ »ç¿ëÀÚ Document ±¸ÇöÀ» »ý¼ºÇؾßÇß´Ù.
Swing¿¡¼´Â PlainDocument, DefaultStyledDocument,
HTMLDocument Çü½ÄÀÇ ÅØ½ºÆ® ÄÄÆ÷³ÍÆ®¿¡ ´ëÇØ Ç¥ÁØ Document°¡ ±¸ÇöµÈ´Ù.
ÀÌ ±¸Çöµé Áß Çϳª¸¦ È®ÀåÇÏ¿©µµ ¼Ò¿ëÀÌ ¾øÀ¸¸é, AbstractDocument(»ç¿ëÀÚ ±¸ÇöÀÇ ±âÃʸ¦ Á¦°ø)¸¦
¼ºêŬ·¡½ºÇصµ µÈ´Ù. PlainDocument Ŭ·¡½º´Â JTextField¿Í JTextArea°°Àº
´ÜÀÏ ¼Ó¼º ÅØ½ºÆ®(´ÜÀÏ ÆùÆ®,»ö)·Î ÀÌ·ç¾îÁø ÅØ½ºÆ® ÄÄÆ÷³ÍÆ®¿¡ »ç¿ëµÇ°í, DefaultStyledDocument
Ŭ·¡½º´Â JTextPane¿¡ »ç¿ëµÈ´Ù. HTMLDocument Ŭ·¡½º´Â JEditorPaneÀÇ
ÅØ½ºÆ®/HTML ŸÀÔ ÄÁÅÙÃ÷¸¦ ¸¸µç´Ù. À̰ÍÀº Document ±¸ÇöÀÌ ÀÌ¿ëµÈ ¹æ¹ý°ú ¶§¸¦ º¸¿©ÁÖ´Â Ãß»óÀûÀÎ
¿¹ÀÌ´Ù. ÀÌ ¹®¼ ŸÀÔµéÀº ´Ù¸¥ °÷¿¡¼µµ ÀÌ¿ëµÈ´Ù. JTextField¿¡ ¼ýÀÚ¸¸ ÀԷµǵµ·Ï Á¦ÇÑÇÏ°í ½ÍÀ¸¸é, PlainDocument¸¦
¼ºêŬ·¡½ºÇϰí, ±× Ŭ·¡½ºÀÇ insertString()¿Í remove() ¸Þ¼ÒµåÀÇ
ºñÇìÀ̺ñ¾î¸¦ »ç¿ëÀÚÁ¤ÀÇ ÇßÀ» °ÍÀÌ´Ù. insertString() ¸Þ¼Òµå´Â ij¸¯Å͸¸ÀÌ ¾Æ´Ñ StringÀ» ÀÔ·ÂÇÏ·Á°í
Çϰí, µû¶ó¼ °á°ú°¡ À¯È¿ÇÑÁö Å×½ºÆ®°¡ ÇÊ¿äÇÏ´Ù. ºÙÀ̱â(paste) ¿¬»êÀÇ °æ¿ì, ÇÑ °³ ÀÌ»óÀÇ Ä³¸¯ÅͰ¡ »ðÀԵǾî ÀÖÀ» °ÍÀÌ´Ù.
´ÙÀ½Àº ±× ¿¹Á¦ÀÌ´Ù.
import javax.swing.text.*;
public class IntegerDocument extends PlainDocument {
int currentValue = 0;
public IntegerDocument() {
}
public int getValue() {
return currentValue;
}
public void insertString(int offset, String string,
AttributeSet attributes) throws BadLocationException {
if (string == null) {
return;
} else {
String newValue;
int length = getLength();
if (length == 0) {
newValue = string;
} else {
String currentContent = getText(0, length);
StringBuffer currentBuffer =
new StringBuffer(currentContent);
currentBuffer.insert(offset, string);
newValue = currentBuffer.toString();
}
currentValue = checkInput(newValue, offset);
super.insertString(offset, string, attributes);
}
}
public void remove(int offset, int length)
throws BadLocationException {
int currentLength = getLength();
String currentContent = getText(0, currentLength);
String before = currentContent.substring(0, offset);
String after = currentContent.substring(length+offset,
currentLength);
String newValue = before + after;
currentValue = checkInput(newValue, offset);
super.remove(offset, length);
}
public int checkInput(String proposedValue, int offset)
throws BadLocationException {
if (proposedValue.length() > 0) {
try {
int newValue = Integer.parseInt(proposedValue);
return newValue;
} catch (NumberFormatException e) {
throw new BadLocationException(proposedValue, offset);
}
} else {
return 0;
}
}
}
»õ·Î¿î IntegerDocument¸¦ Å×½ºÆ®Çϱâ À§ÇØ À̸¦ »ç¿ëÀÚ°¡ ÀÔ·ÂÀ» Á¦ÇÑÇϰíÀÚ ÇÏ´Â JTextField¿¡ ÷ºÎÇÑ´Ù. ÀÌ¿¡ ´ëÇÑ µ¥¸ð·Î, ´ÙÀ½ÀÇ ÇÁ·Î±×·¥ NumericInput¿¡¼´Â µÎ°³ÀÇ ÅØ½ºÆ® Çʵ带 º¸¿©ÁÖ°í ÀÖ´Ù. ÀÂÊÀÇ Çʵå´Â ¼ýÀÚ ÀԷ¸¸ÀÌ °¡´ÉÇϸç, ¹ØÀÇ Çʵå´Â »ó°üÀÌ ÀÔ·Â °¡´ÉÇÏ´Ù. À̹ø ¿¹Á¦¿Í ¾ÕÀÇ ¿¹Á¦ÀÇ Áß¿äÇÑ Â÷ÀÌÁ¡Àº ÀÌÀü ¿¹Á¦ÀÇ ÇÁ·Î±×·¥¿¡¼´Â Æ÷Ä¿½º¸¦ ÀÒ¾úÀ» ¶§¸¸ À¯È¿È °Ë»ç¸¦ ½Ç½ÃÇÏÁö¸¸ À̹ø ¿¹Á¦¿¡¼´Â ÇÊµå ³»¿¡ À¯È¿ÇÏÁö ¾ÊÀº °ªÀ» ÀüÇô ³ªÅ¸³»Áö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù.
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
public class NumericInput {
public static void main(String args[]) {
Runnable runner = new Runnable() {
public void run() {
JFrame frame = new JFrame("Numeric Input");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(2, 2));
frame.add(new JLabel("Number"));
JTextField textFieldOne = new JTextField();
Document textDocOne = new IntegerDocument();
textFieldOne.setDocument(textDocOne);
frame.add(textFieldOne);
frame.add(new JLabel("All"));
JTextField textFieldTwo = new JTextField();
frame.add(textFieldTwo);
frame.setSize(250, 90);
frame.setVisible(true);
}
};
EventQueue.invokeLater(runner);
}
}
![]() ¹®¼ ÇÊÅÍ·Î À¯È¿¼º °Ë»ç J2SE 1.4¿¡¼´Â ¹®¼¸¦ ÇÊÅ͸µÇÏ´Â ¹æ¹ý¿¡ º¯È°¡ »ý°å´Ù. ¸ðµ¨ÀÇ ÄÁÅÙÃ÷¸¦ Á¦ÇÑÇϱâ À§ÇØ Document
±¸ÇöÀ» ¼ºêŬ·¡½ºÇÏ´Â ´ë½Å, »õ·Î¿î DocumentFilter Ŭ·¡½º¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀÚ´Â ´Ü¼øÈ÷
setDocumentFilter ¸Þ¼Òµå·Î DocumentFilter¸¦ AbstractDocument¿¡
ºÙÀ̱⸸ ÇÏ¸é µÈ´Ù. DocumentFilter Ŭ·¡½º¿¡´Â ¼¼°³ÀÇ ¿À¹ö¶óÀ̵ù µÉ ¼ö ÀÖ´Â ¸Þ¼Òµå°¡ ÀÖ´Ù. Document¿¡¼ º¸¿©ÁØ µÎ°³ ¿Ü¿¡ replace ¸Þ¼Òµå°¡ ÀÖ´Ù. ÀÌÁ¦´Â replace ¸Þ¼Òµå°¡ °ÅÀÇ ¸Å¹ø È£ÃâµÈ´Ù. ºÙÀ̱⠿¬»êÀÌ remove()¿Í insertString()À» °¢°¢ È£ÃâÇÏ´Â ´ë½Å replace·Î ½ÇÇàµÈ´Ù°í »ý°¢ÇÏ¸é µÈ´Ù. ´ÙÀ½Àº ±× ¼¼°³ÀÇ ¸Þ¼ÒµåÀÌ´Ù.
public void insertString(DocumentFilter.FilterBypass fb,
int offset,
String string,
AttributeSet attr)
throws BadLocationException
public void remove(DocumentFilter.FilterBypass fb,
int offset,
int length)
throws BadLocationException
public void replace(DocumentFilter.FilterBypass fb,
int offset,
int length,
String text,
AttributeSet attrs)
throws BadLocationException
´ÙÀ½Àº ÀÌÀüÀÇ IntegerDocument¿Í °°Àº ±â´ÉÀ» Á¦°øÇÏ´Â DocumentFilter¿¡ ´ëÇÑ ¿¹Á¦ÀÌ´Ù. ´ëºÎºÐÀÇ ÀÛ¾÷Àº replace() ¸Þ¼Òµå·Î ·¡ÇεȴÙ.
import javax.swing.text.*;
import java.awt.Toolkit;
public class IntegerDocumentFilter extends DocumentFilter {
int currentValue = 0;
public IntegerDocumentFilter() {
}
public void insertString(DocumentFilter.FilterBypass fb,
int offset, String string, AttributeSet attr)
throws BadLocationException {
if (string == null) {
return;
} else {
replace(fb, offset, 0, string, attr);
}
}
public void remove(DocumentFilter.FilterBypass fb,
int offset, int length)
throws BadLocationException {
replace(fb, offset, length, "", null);
}
public void replace(DocumentFilter.FilterBypass fb,
int offset, int length, String text, AttributeSet attrs)
throws BadLocationException {
Document doc = fb.getDocument();
int currentLength = doc.getLength();
String currentContent = doc.getText(0, currentLength);
String before = currentContent.substring(0, offset);
String after = currentContent.substring(
length+offset, currentLength);
String newValue = before +
(text == null ? "" : text) + after;
currentValue = checkInput(newValue, offset);
fb.replace(offset, length, text, attrs);
}
private int checkInput(String proposedValue, int offset)
throws BadLocationException {
int newValue = 0;
if (proposedValue.length() > 0) {
try {
newValue = Integer.parseInt(proposedValue);
} catch (NumberFormatException e) {
throw new BadLocationException(
proposedValue, offset);
}
}
return newValue;
}
}
¾÷µ¥ÀÌÆ®µÈ Å×½ºÆ® ÇÁ·Î±×·¥ÀÎ NumericInputFilter´Â ½ÇÁ¦ÀûÀ¸·Î´Â ÀÌÀüÀÇ Å×½ºÆ® ÇÁ·Î±×·¥ÀÎ NumericInput°ú µ¿ÀÏÇÏ´Ù. Â÷ÀÌÁ¡Àº ÅØ½ºÆ® ÄÄÆ÷³ÍÆ®¸¦ ¹®¼ÈÇϴµ¥ ÇÊÅ͸¦ »ç¿ëÇÑ´Ù´Â °Í°ú À©µµ¿ì Á¦¸ñÀÌ ´Þ¶óÁ³´Ù´Â °ÍÀÌ´Ù.
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
public class NumericInputFilter {
public static void main(String args[]) {
Runnable runner = new Runnable() {
public void run() {
JFrame frame = new JFrame("Numeric Input Filter");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(2, 2));
frame.add(new JLabel("Number"));
JTextField textFieldOne = new JTextField();
Document textDocOne = textFieldOne.getDocument();
DocumentFilter filterOne =
new IntegerDocumentFilter();
((AbstractDocument)
textDocOne).setDocumentFilter(filterOne);
textFieldOne.setDocument(textDocOne);
frame.add(textFieldOne);
frame.add(new JLabel("All"));
JTextField textFieldTwo = new JTextField();
frame.add(textFieldTwo);
frame.setSize(250, 90);
frame.setVisible(true);
}
};
EventQueue.invokeLater(runner);
}
}
![]() °á·Ð ÀÔ·ÂÀ» À¯È¿ÈÇÏ´Â µ¥¿¡´Â ¸¹Àº ¹æ¹ýÀÌ ÀÖ´Ù. À̹ø ÆÁ¿¡¼ º¸¿©ÁØ InputVerifier, Document, DocumentFilter ¿Ü¿¡µµ JFormattedTextField¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ÀÌ ÄÄÆ÷³ÍÆ®´Â ¿¹Àü Å×Å©ÆÁ JFORMATTEDTEXTFIELD¸¦ ÀÌ¿ëÇØ¼ ÅØ½ºÆ® ÀԷ°ª Æ÷¸ËÇϱ⿡ ¼³¸íµÇ¾î ÀÖ´Ù.
InputVerifier°ú DocumentFilterÀÇ Å« Â÷ÀÌÁ¡Àº InputVerifier´Â ¸ðµç ÄÄÆ÷³ÍÆ®¿¡¼ »ç¿ëµÇ°í, DocumentFilter´Â ÅØ½ºÆ® ÄÄÆ÷³ÍÆ®¿¡¸¸ Á¦ÇѵǾî ÀÖ´Ù´Â Á¡ÀÌ´Ù.
|
||
| º¸Á¶ °øÇаú Java ¾×¼¼½º ºê¸´Áö | ||
|
º¸Á¶ °øÇÐ(Assistive technology)¶õ ½ÅüÀûÀ¸·Î ºÎÀÚÀ¯½º·± »ç¶÷µéÀÌ ÄÄÇ»Å͸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï µ½´Â Çϵå¿þ¾î/¼ÒÇÁÆ®¿þ¾î ¼Ö·ç¼ÇÀ» ¸»ÇÑ´Ù. º¸Á¶ °øÇÐÀº À½¼º ÀÔ·Â ±â±â, Á¡ÀÚ Ç¥½Ã ´Ü¸»±â, TTS ½ºÅ©¸°¸®´õ(À¥ ÆäÀÌÁö ³» ¹®ÀÚ¸¦ ÆÇµ¶ÇØ »ç¿ëÀÚ¿¡°Ô ÀоîÁÖ´Â ÇÁ·Î±×·¥) µîÀ» ¾Æ¿ì¸¥´Ù. Java Foundation Class¿¡¼´Â javax.accessibility
ÆÐŰÁö¿¡¼ Á¦°øÇÏ´Â Accessibility API¸¦ ÅëÇØ º¸Á¶ °øÇÐÀ» Áö¿øÇϴ ǥÁØ ¹æ½ÄÀ» Á¦°øÇÑ´Ù. ÀÌ API´Â Swing ±â¹Ý
ÇÁ·Î±×·¥¿¡ ½ÅüÀûÀ¸·Î ºÎÀÚÀ¯½º·± »ç¶÷µéÀÌ ¾×¼¼½ºÇÒ ¼ö ÀÖµµ·Ï ¸¸µé¾îÁØ´Ù. ½ÅüÀûÀ¸·Î ºÎÀÚÀ¯½º·± »ç¶÷ÀÌ ¾Æ´Ï´õ¶óµµ ÀÌ·± ¾×¼¼½º ¿É¼ÇÀÌ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ÀÌ ¿É¼Ç¿¡´Â »ç¿ëÀÚ°¡ ¸¶¿ì½º¸¦ °®´Ù´ë¾î ÄÄÆ÷³ÍÆ®¸¦ ³ªÅ¸³¾ ¼ö ÀÖ´Â ÅøÆÁ ÅØ½ºÆ® µî °£´ÜÇÑ ±â´Éµµ Æ÷ÇԵǾî ÀÖ´Ù. ½Ã·ÂÀÌ ÁÁÁö ¾ÊÀº »ç¿ëÀÚ´Â ÄÄÆ÷³ÍÆ®ÀÇ ÅøÆÁÅØ½ºÆ®¸¦ À½¼ºÀ¸·Î ¸»ÇØÁְųª Å×ÀÌºí ¼¿À» üũ¹Ú½º·Î Ç¥ÇöÇØÁÖ´Â ½ºÅ©¸°¸®´õ °°Àº ±â±â¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ´Ù¸¥ ¿É¼Çµé¿¡´Â »ç¿ëÀÚ°¡ ÃÖ¼ÒÇÑÀÇ ¸¶¿ì½º Ŭ¸¯À¸·Î ½ºÅ©¸°À» ³×ºñ°ÔÀÌÆ® Çϰųª ÃÖ¼ÒÇÑÀÇ µ¿ÀÛÀ¸·Î ÀÛ¾÷ÀÌ ½ÇÇàµÉ ¼ö ÀÖµµ·Ï Çϴ Űº¸µå °¡¼Ó±â³ª ¸Þ´º ´ÜÃàŰ µîÀÌ Æ÷ÇԵǾî ÀÖ´Ù. »ç¿ëÀÚÀÇ Swing ÄÄÆ÷³ÍÆ®´Â ÄÁÇDZԾîÇÑ´Ù°í Çϸé, javax.accessibility ÆÐŰÁö¿¡ °ü·ÃµÈ ¸ðµç °ÍÀº º¸ÀÌÁö ¾Ê°í ÀϾÙ. ¾×¼¼½º º¸Á¶±â´Â Ç÷§Æû »óÀÇ Java Virtual Machine (JVM)*°ú ¿¬°áµÇ¾î ÀÖ´Ù. »ç¿ëÀÚ°¡ ÷ºÎµÈ º¸Á¶±â·Î JVM*À» ÅëÇØ ÇÁ·Î±×·¥À» ·ÎµùÇϸé Java Accessibility API°¡ ÇÊ¿äÇÑ Á¤º¸¸¦ ±â±â¿¡ Á¦°øÇÏ°Ô µÈ´Ù. ¿¹¸¦ µé¾î »ç¿ëÀÚÀÇ ÇÁ·Î±×·¥¿¡ ImageIconÀ» »ý¼ºÇÏ¿© Accessibility API¸¦ ÅëÇØ ImageIcon¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ°Ô ¸¸µé°íÀÚ ÇÑ´Ù¸é, ImageIconÀ» ±â¼úÇÏ¿© À̸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ImageIcon¿¡ ´ëÇÑ µÎ ½ÖÀÇ ÄÁ½ºÆ®·°ÅͰ¡ ÀÖ´Ù. ±× Áß ÇÑ ½Ö¿¡´Â ±â¼ú µ¶¸³º¯¼ö°¡ ¾ø´Ù.
// Without description argument public ImageIcon() public ImageIcon(Image image) public ImageIcon(String filename) public ImageIcon(URL location) public ImageIcon(byte imageData[])´Ù¸¥ ÇÑ ½Ö¿¡´Â ±â¼ú µ¶¸³º¯¼ö°¡ ÀÖ´Ù. // With description argument public ImageIcon(Image image, String description) public ImageIcon(String filename, String description) public ImageIcon(URL location, String description) public ImageIcon(byte imageData[], String description) ImageIconÀ» ¸¸µé ¶§ descriptionÀ» ³Ö´Â ´Ù¸é, ¾ÆÀÌÄÜÀ» º¼ ¼ö ¾ø´Â »ç¿ëÀÚ¿¡°Ô Á¤º¸¸¦ ³ªÅ¸³»±â
À§ÇØ º¸Á¶±â¼úÀÌ ÅØ½ºÆ®¸¦ ¹¦»çÇÒ ¼ö ÀÖÀ¸¹Ç·Î ±× ÇÁ·Î±×·¥Àº Á» ´õ ¾×¼¼½º°¡ ½±°Ô µÈ´Ù. ´ÙÀ½Àº º¸Á¶ °øÇÐÀ» »ç¿ëÇϰíÀÚ ÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» »ý¼ºÇÒ ¶§ ÇÊ¿äÇÑ ¸î°¡Áö Áú¹®°ú ´Ü°èµéÀÌ´Ù.(¿Ïº®ÇÑ ¸®½ºÆ®´Â ¾Æ´Ï´Ù.)
´Ù¸¥ ¾×¼¼½º ÇÁ·Î±×·¥À» »ý¼ºÇÏ´Â Å×Å©ÆÁÀº Java Æ©Å丮¾óÀÇ How to Support Assistive Technologies¸¦ Âü°íÇϱ⠹ٶõ´Ù. ¾×¼¼½º ÇÁ·Î±×·¥À» »ý¼ºÇÏ´Â °£´ÜÇÑ ¹ýÄ¢À» ³Ñ¾î¼¼ Sun»ç´Â Java Access Bridge¶ó°í ºÒ¸®´Â À©µµ¿ì Ç÷§Æû¿ë ÅøÀ» Á¦°øÇϰí ÀÖ´Ù. Java Access Bridge¿¡´Â »ç¿ëÀÚÀÇ ÇÁ·Î±×·¥ÀÌ ¾ó¸¶³ª ¾×¼¼½º °¡´ÉÇÑÁö È®ÀÎÇϰí, º¸Á¶ °øÇеéÀ» µ¥¸ðÇÒ ¼ö Àִ ȣȯ°¡´É Java VMÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Â ÅøÀ» Æ÷ÇÔÇϰí ÀÖ´Ù. Java Access Bridge¸¦ ´Ù¿î·ÎµåÇÏ·Á¸é Java Access Bridge ÆäÀÌÁö¸¦ ¿°í ´Ù¿î·Îµå ¸µÅ©¸¦ Ŭ¸¯ÇÑ´Ù. ¶óÀ̼¾½º µ¿ÀǼ¸¦ ÀÐ°í µ¿ÀÇÇϸé Accept°ú Continue¸¦ Ŭ¸¯ÇÏ¸é µÈ´Ù. accessbridge-1_2.zip¸¦ ÀúÀåÇϰí, zip ÆÄÀÏÀ» Ç®°í µð·ºÅ丮 ±¸Á¶¸¦ ÀúÀåÇÑ´Ù. ÀÌ·Î½á »ç¿ëÀÚÀÇ ¼³Ä¡ µð·ºÅ丮¿¡ AccessBridge_1.2_GA¶ó´Â À̸§ÀÇ µð·ºÅ丮°¡ »ý¼ºµÈ´Ù.
´ÙÀ½À¸·Î ÀνºÅç·¯ ¼ºê µð·ºÅ丮¿¡¼ ã¾Æ ¼³Ä¡ ÇÁ·Î±×·¥À» ±¸µ¿ÇÑ´Ù. JVM ȣȯÀ» À§ÇØ ÀνºÅç·¯´Â Àüü ½Ã½ºÅÛÀ» üũÇÑ´Ù. À̸¦ ÅëÇØ Bridge°¡ »ç¿ëÀÚ°¡ ¿øÇÏ´Â JVMÀ» ¼³Ä¡Çϵµ·Ï ÇÑ´Ù. °¡Àå »ç¿ëÇÏ°í ½ÍÀº JVMÀ» °í¸¥´Ù. »ç¿ëÀÚÀÇ ±â±âÀÇ ±âÁ¸ JVM ¹öÀüÀ» »èÁ¦ÇؾßÇÒ ¼öµµ ÀÖ´Ù. c:\program files\java·Î ½ÃÀ۵Ǵ µð·ºÅ丮´Â ºê¶ó¿ìÀú¸¦ À§ÇÑ
Java Plug-inÀÇ ´Ù¸¥ ¹öÀüÀÌ´Ù. ![]() Install À» ´©¸£¸é ¼³Ä¡°¡ ¿Ï¼ºµÇ¾úÀ½À» ¾Ë¸®´Â âÀÌ ¶á´Ù. ![]() ÀÌÁ¦ Access Bridge¿¡ ÆÐŰÁöµÈ µÎ°³ÀÇ ¿¹Á¦ ÇÁ·Î±×·¥, : Java Monkey°ú Java FerretÀ» ±¸µ¿ÇÒ ¼ö ÀÖ´Ù. Çѹø ±¸µ¿ µÇ¸é, ÀÌ ÇÁ·Î±×·¥µéÀº °°Àº JVMÀ» ±¸µ¿ÇÏ´Â ¾î¶² ÀÚ¹Ù ÇÁ·Î±×·¥¿¡µçÁö ÷ºÎµÇ¾î¼ ¿©·¯ °³ÀÇ Java Access Bridge ±â´ÉÀ» »ç¿ëÇÏ°Ô µÈ´Ù. Java Monkey¸¦ »ç¿ëÇØº¸ÀÚ. ¸ÕÀú ¾Æ¹« Java ¾ÖÇø®ÄÉÀ̼ÇÀ̳ª ½ÇÇàÇÑ´Ù. ¿¹¸¦ µé¾î, ÅØ½ºÆ® À¯È¿¼º °Ë»ç·Î ¹®¼ ÇÊÅ͸µÇϱâ Å×Å©ÆÁ¿¡¼ º¸¿©ÁØ NumericVerifier ÇÁ·Î±×·¥À» ±¸µ¿ÇÒ ¼ö ÀÖ´Ù. µÎ¹øÂ° À©µµ¿ì¿¡¼ JavaMonkey¸¦ ±¸µ¿ÇÑ´Ù. Java Monkey¸¦ ½ÃÀÛÇÏ¸é »ç¿ëÀÚÀÇ ½Ã½ºÅÛ ³»ÀÇ ¸ðµç JVM¿¡¼ ±¸µ¿µÇ°í ÀÖ´Â ¸ðµç Java ¾ÖÇø®ÄÉÀ̼ǵéÀÇ ÄÄÆ÷³ÍÆ® Æ®¸®¸¦ º¸¿©ÁÖ´Â À©µµ¿ì¸¦ º¼ ¼ö ÀÖ´Ù. ÄÄÆ÷³ÍÆ® Æ®¸®°¡ Áï½Ã ³ªÅ¸³ªÁö ¾ÊÀ¸¸é File ¸Þ´º ¾ÈÀÇ Refresh Tree ¿É¼ÇÀ» Ŭ¸¯Çϵµ·Ï ÇÑ´Ù.
![]() Panel ¸Þ´º¿¡¼ Accessibility API Panel ¿É¼ÇÀ» ¼±ÅÃÇÏ¸é Æ¯Á¤ ÄÄÆ÷³ÍÆ®ÀÇ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù. Æ®¸®¿¡¼ ÄÄÆ÷³ÍÆ®¸¦ ¼±ÅÃÇÏ¿© À̸§, Á¤ÀÇ, ¿ªÇÒ µîÀÇ Á¤º¸¸¦ º¸µµ·Ï ÇÏÀÚ. ![]() Java FerretÀº Æ®·¡Å· ÇÁ·Î±×·¥¿¡ Á» ´õ °¡±õ´Ù. ¸¶¿ì½º, Æ÷Ä¿½º, ¸Þ´º ¼±Åà µî ¼·Î ´Ù¸¥ À̺¥Æ®µéÀÇ Æ®·¡Å·ÀÌ °¡´ÉÇÏ´Ù. JaVa FerretÀ» ±¸µ¿ÇÏ´Â °ÍÀº Java Monkey¸¦ ±¸µ¿ÇÏ´Â °Í°ú ¸Å¿ì Èí»çÇÏ´Ù. Numeric Verifier ÇÁ·Î±×·¥°ú °°ÀÌ ¾î¶² Java ¾ÖÇø®ÄÉÀ̼ÇÀ̳ª ù¹øÂ° À©µµ¿ì¿¡ ½ÇÇàÇϰí Java FerretÀ» µÎ¹øÂ° À©µµ¿ì¿¡ ½ÃÀÛÇÑ´Ù. Java FerretÀ» ½ÃÀÛÇÒ ¶§ UpdateSettings, JavaEvents, AccessibilityEvents°¡ Æ÷ÇÔµÈ ¸Þ´º°¡ ÀÖ´Â À©µµ¿ì¸¦ ºÁ¾ßÇÑ´Ù. JavaFerretÀ¸·Î ÇÒ ¼ö ÀÖ´Â °ÍÀ» º¸¿©ÁÖ±â À§ÇÑ ¿¹Á¦·Î½á, JavaEventsMenu ³»ÀÇ TrackMouseEvent¸¦ ¼±ÅÃÇÏÀÚ. ÀÌ´Â '¸¶¿ì½º·Î ÀÔ·Â'ÇÏ´Â ¸ðµç À̺¥Æ®¸¦ Java Access Bridge·Î µî·ÏÇÏ°í °¢ ¸¶¿ì½º À̺¥Æ®¿¡ ´ëÇÑ Á¤º¸¸¦ º¸¿©ÁØ´Ù. ![]() »ç¿ëÀÚÀÇ ÇÁ·Î±×·¥¿¡¼ Java Monkey¿Í Java Ferret ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© ÇØ´ç ÇÁ·Î±×·¥¿¡ ¾ó¸¶³ª ¾×¼¼½º °¡´ÉÇÑÁö ¾Ë¾Æº¸±â ¹Ù¶õ´Ù. Monkey¿Í Ferret À̿ܿ¡µµ netBeans.orgÀÇ Accessibility Developer Corner¿¡¼´Â a11y(11Àº accessibilityÀÇ ¿µ¹®¾ËÆÄºª 'a'¿Í 'y'»çÀÌÀÇ 11ÀÚ¸¦ ³ªÅ¸³½´Ù)·Î ºÒ¸®´Â Å×½ºÆ® ÅøÀ» Á¦°øÇϰí ÀÖ´Ù. ÀÌ Åø¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº a11y project ȨÀ» Âü°íÇϱ⠹ٶõ´Ù. UNIX¿¡¼µµ ¶ÇÇÑ Gnopernicus¿Í GOK·Î ºÒ¸®´Â º¸Á¶ °øÇÐÀ» Á¦°øÇϰí ÀÖ´Ù. À̵éÀº Solaris 10¿¡ ±¸ÃàµÇ¾î ÀÖÀ¸¸ç, ¹«·á·Î À̿밡´ÉÇÏ´Ù. accessibility¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â ÀÚ¹Ù Æ©Å丮¾óÀÇ How to Support Assistive Technologies°ú State, Federal, and International Legal Resources for IT related Accessibility Issues¸¦ Âü°íÇϱ⠹ٶõ´Ù. |
||
º»
¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù.
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϰųª ¼ö½ÅÁÖ¼Ò¸¦ º¯°æÇÏ·Á¸é SKDN@Sun.comÀ¸·Î ¹®ÀÇ Áֽñ⠹ٶø´Ï´Ù. SKDN(Sun Korea Developers Network)¿¡¼ J2EE/J2SE Å×Å©ÆÁ µî ´Ù¾çÇÑ ¾ÆÆ¼Å¬µéÀ» Âü°íÇϼ¼¿ä. Copyright 2003-2005 Sun Korea, Inc. All rights reserved. |