Java Swing တွင် JTextArea အသုံးပြုခြင်း
Java Swing မှာ JTextArea ဆိုတာဟာ စာကြောင်းများစွာပါဝင်တဲ့ စာသား (multiple-line text) input တွေကို user ဆီကနေ ရယူဖို့အတွက် အသုံးပြုတဲ့ component တစ်ခု ဖြစ်ပါတယ်။ JTextArea ကို အသုံးပြုပြီး ရိုးရှင်းတဲ့ text area တွေကို ဖန်တီးနိုင်သလို၊ အဲ့ဒီထဲမှာ ရိုက်ထည့်ထားတဲ့ စာသားတွေကို ပြန်ဖတ်တာ၊ ပြုပြင်တာနဲ့ event handling တွေကိုလည်း လုပ်ဆောင်နိုင်ပါတယ်။ အောက်မှာ JTextArea ကို အသုံးပြုပြီး ရိုးရှင်းတဲ့ example တစ်ခုကို ဖော်ပြထားပါတယ်။
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TextAreaExample {
public static void main(String[] args) {
// JFrame ဖြင့် window တစ်ခုကို ဖန်တီးပါ။
JFrame frame = new JFrame("JTextArea Example");
// JTextArea ဖြင့် text area တစ်ခုကို ဖန်တီးပါ။
JTextArea textArea = new JTextArea(10, 30); // 10 rows နှင့် 30 columns ပါသော text area
textArea.setLineWrap(true); // Text ကို လိုင်းအဆုံးတွင် အလိုအလျောက် wrap လုပ်ပါ။
// JScrollPane ဖြင့် text area ကို scrollable ဖြစ်အောင် ပြုလုပ်ပါ။
JScrollPane scrollPane = new JScrollPane(textArea);
// JButton ဖြင့် Button တစ်ခုကို ဖန်တီးပါ။
JButton button = new JButton("Submit");
// Button ကို နှိပ်သောအခါ လုပ်ဆောင်မည့် event listener ကို ထည့်ပါ။
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Text area ထဲမှ text ကို ဖတ်ပြီး message dialog ဖြင့် ပြပါ။
String inputText = textArea.getText();
JOptionPane.showMessageDialog(frame, "You entered:\n" + inputText);
}
});
// JPanel ဖြင့် components များကို စီစဉ်ပါ။
JPanel panel = new JPanel();
panel.add(scrollPane);
panel.add(button);
// Panel ကို frame ထဲသို့ ထည့်ပါ။
frame.add(panel);
// Window ကို close လုပ်သောအခါ program ကို အလိုအလျောက် ရပ်ပါ။
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Window ၏ size ကို သတ်မှတ်ပါ။
frame.setSize(400, 300);
// Window ကို မြင်နိုင်အောင် ပြပါ။
frame.setVisible(true);
}
}Code ရှင်းလင်းချက်
ဒီ code exampleထဲက အဓိကကျတဲ့ အစိတ်အပိုင်းတွေကို တစ်ခုချင်းစီ ထပ်ပြီး ရှင်းပြပါမယ်။
JTextArea
JTextAreaဟာ စာကြောင်းများစွာပါဝင်တဲ့ စာသား input တွေကို လက်ခံရယူဖို့အတွက် အသုံးပြုတဲ့ component ပါ။new JTextArea(10, 30)ဆိုတာက 10 rows (စာကြောင်း ၁၀ ကြောင်းစာ အမြင့်) နဲ့ 30 columns (စာလုံး ၃၀ လုံးစာ အကျယ်) ရှိတဲ့ text area တစ်ခုကို ဖန်တီးတာ ဖြစ်ပါတယ်။javaJTextArea textArea = new JTextArea(10, 30);

setLineWrap(true):ဒီ method ကို ခေါ်လိုက်ရင် စာသားတွေဟာ text area ရဲ့ အကျယ်ဘောင်ကို ရောက်တာနဲ့ နောက်တစ်ကြောင်းကို အလိုအလျောက် ဆင်းသွားပါလိမ့်မယ်။ ဒါဟာ စာသားရှည်တွေ ရိုက်တဲ့အခါ မရှိမဖြစ်လိုအပ်တဲ့ feature ပါ။
JScrollPane
JTextAreaဟာ သူ့အလိုလို scrollbar တွေ ပေါ်မလာပါဘူး။ ဒါကြောင့် text area ထဲမှာ စာသားတွေ အများကြီး ရိုက်ထည့်တဲ့အခါ အောက်ဘက်ကို ဆက်မြင်နိုင်ဖို့JScrollPaneကို အသုံးပြုပြီး scrollbar တွေ ထည့်သွင်းပေးရပါတယ်။JScrollPaneကို ဖန်တီးတဲ့အခါ သူ့ထဲမှာ ထည့်သွင်းလိုတဲ့ component (ဒီနေရာမှာ textArea) ကို constructor မှာ ပေးပို့ရပါတယ်။javaJScrollPane scrollPane = new JScrollPane(textArea);

JPanel
JPanelဟာ Swing မှာ components တွေကို စီစဉ်ပေးဖို့ အသုံးပြုတဲ့ container တစ်ခု ပါ။ ဒီexampleမှာJScrollPane(သူ့ထဲမှာJTextAreaပါဝင်ပြီးသား) နဲ့JButtonကိုJPanelထဲကို ထည့်သွင်းထားပါတယ်။javaJPanel panel = new JPanel(); panel.add(scrollPane); panel.add(button);
JTextArea ၏ အခြား Features များ
JTextArea သည် multiple-line text input များကို ရယူရုံသာမက၊ အောက်ပါ features များကိုလည်း support ပေးပါသည်။
Text Wrapping
JTextAreaထဲမှာ စာသားတွေ ဘောင်ကျော်သွားတဲ့အခါ အလိုအလျောက် နောက်တစ်ကြောင်းကို ဆင်းစေဖို့setLineWrap(true)ကို သုံးနိုင်ပါတယ်။ ပိုပြီး စနစ်တကျ wrap လုပ်ချင်ရင်တော့setWrapStyleWord(true)ကို တွဲသုံးနိုင်ပါတယ်။ ဒါက စာလုံးအလယ်ကနေ မဖြတ်ဘဲ စာလုံးရဲ့ အဆုံးမှာမှ အောက်ဆင်းစေတာ ဖြစ်ပါတယ်။javatextArea.setLineWrap(true); // Text ကို wrap လုပ်ပါ။ textArea.setWrapStyleWord(true); // စာလုံးအဆုံးတွင် wrap လုပ်ပါ။Text Alignment
JTextAreaထဲမှာ ရိုက်ထည့်ထားတဲ့ စာသားတွေကို ဘယ်ဘက်၊ ညာဘက်၊ အလယ် စသဖြင့် ချိန်ညှိနိုင် ပါတယ်။JTextFieldမှာလိုsetHorizontalAlignment()method တိုက်ရိုက်မရှိဘဲsetAlignmentX()သို့မဟုတ်setAlignmentY()ကို အသုံးပြုရတာ ပုံစံနည်းနည်းကွဲပြားပါတယ်။ ဒါပေမဲ့ Layout Manager တွေနဲ့ ပေါင်းစပ်ပြီး နေရာချထားတာက ပိုပြီးထိရောက်ပါတယ်။javatextArea.setAlignmentX(JTextArea.CENTER); // Text ကို အလယ်တွင် ချိန်ညှိပါ။
TIP
- မှတ်ချက်
JTextArea၏ internal text alignment သည်JLabelသို့မဟုတ်JTextFieldကဲ့သို့ တိုက်ရိုက်setHorizontalAlignmentမရှိပါ။ ၎င်းကိုJTextPaneသို့မဟုတ်JEditorPaneကဲ့သို့သော ပိုမိုအဆင့်မြင့်သော text component များတွင် ထိန်းချုပ်နိုင်သည်။ သို့မဟုတ်JTextAreaကိုJTextPaneထဲတွင်ထည့်၍StyledDocumentဖြင့် ချိန်ညှိနိုင်သည်။ ယေဘုယျအားဖြင့်JTextArea၏ alignment ကို ၎င်းပါဝင်သော Layout Manager ဖြင့် ထိန်းချုပ်ရခြင်းက ပို၍ များသည်။
- Text Limit
JTextArea ထဲမှာ ရိုက်ထည့်နိုင်တဲ့ စာလုံးရေ အရှည်ကို ကန့်သတ်ချင်ရင် setDocument method ကို JTextField မှာလိုပဲ အသုံးပြုနိုင်ပါတယ်။
textArea.setDocument(new PlainDocument() {
@Override
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
if (getLength() + str.length() <= 100) { // Maximum 100 characters
super.insertString(offs, str, a);
}
}
});TIP
- မှတ်ချက်။ ဒီ code snippet ဟာ
javax.swing.text.PlainDocument,javax.swing.text.AttributeSet,javax.swing.text.BadLocationExceptionစတဲ့ class တွေကို import လုပ်ဖို့ လိုအပ်ပါတယ်။