Skip to content

Java Swing တွင် JList အသုံးပြုခြင်း

Java Swing တွင် JList သည် user အား list ထဲမှ item တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော item များကို ရွေးချယ်နိုင်စေရန် အသုံးပြုသော component တစ်ခုဖြစ်ပါသည်။ JList သည် JComboBox နှင့် ဆင်တူသော်လည်း၊ ၎င်းသည် list items အားလုံးကို တစ်ပြိုင်နက်တည်း ပြသပေးပြီး၊ scrollable ဖြစ်စေရန် JScrollPane နှင့် တွဲဖက်အသုံးပြုလေ့ရှိပါသည်။ အောက်တွင် JList ကို အသုံးပြု၍ ရိုးရှင်းသော example တစ်ခုကို ဖော်ပြထားပါသည်။

java
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ListExample {
    public static void main(String[] args) {
        // JFrame ဖြင့် window တစ်ခုကို ဖန်တီးပါ။
        JFrame frame = new JFrame("JList Example");
        frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS)); // Vertical layout

        // JList အတွက် data model ကို ဖန်တီးပါ။
        // DefaultListModel သည် list items များကို dynamically ထည့်သွင်းခြင်း၊ ဖယ်ရှားခြင်း ပြုလုပ်နိုင်စေပါသည်။
        DefaultListModel<String> listModel = new DefaultListModel<>();
        listModel.addElement("Apple");
        listModel.addElement("Banana");
        listModel.addElement("Orange");
        listModel.addElement("Grape");
        listModel.addElement("Mango");
        listModel.addElement("Pineapple");

        // JList ကို ဖန်တီးပါ။
        JList<String> fruitList = new JList<>(listModel);

        // Selection Mode ကို သတ်မှတ်ပါ။ (Default က SINGLE_SELECTION)
        // SINGLE_SELECTION: တစ်ခုတည်းသာ ရွေးချယ်နိုင်ပါသည်။
        // SINGLE_INTERVAL_SELECTION: ဆက်တိုက်ရှိသော item များကို ရွေးချယ်နိုင်ပါသည်။
        // MULTIPLE_INTERVAL_SELECTION: မည်သည့် item ကိုမဆို ရွေးချယ်နိုင်ပါသည်။
        fruitList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

        // JList သည် scrollable မဖြစ်သောကြောင့် JScrollPane ဖြင့် ထုပ်ပိုးပါ။
        JScrollPane scrollPane = new JScrollPane(fruitList);
        scrollPane.setPreferredSize(new java.awt.Dimension(200, 150)); // Scroll pane ၏ size ကို သတ်မှတ်ပါ။

        // JButton ဖြင့် Button တစ်ခုကို ဖန်တီးပါ။
        JButton submitButton = new JButton("Submit");

        // Button ကို နှိပ်သောအခါ လုပ်ဆောင်မည့် event listener ကို ထည့်ပါ။
        submitButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // JList မှ ရွေးချယ်ထားသော item များကို ရယူပါ။
                java.util.List<String> selectedFruits = fruitList.getSelectedValuesList();
                if (selectedFruits.isEmpty()) {
                    JOptionPane.showMessageDialog(frame, "No fruit selected.");
                } else {
                    JOptionPane.showMessageDialog(frame, "Selected Fruits: " + String.join(", ", selectedFruits));
                }
            }
        });

        // JPanel ဖြင့် components များကို စီစဉ်ပါ။
        JPanel panel = new JPanel();
        panel.add(new JLabel("Select fruits:"));
        panel.add(scrollPane);
        panel.add(submitButton);

        // Panel ကို frame ထဲသို့ ထည့်ပါ။
        frame.add(panel);

        // Window ကို close လုပ်သောအခါ program ကို အလိုအလျောက် ရပ်ပါ။
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Window ၏ size ကို သတ်မှတ်ပါ။
        frame.pack(); // Components များ၏ preferred size အတိုင်း window size ကို ချိန်ညှိပါ။
        frame.setVisible(true);
    }
}

Code ရှင်းလင်းချက်

ဒီ code example ထဲက အဓိကကျတဲ့ အစိတ်အပိုင်းတွေကို တစ်ခုချင်းစီ ထပ်ပြီး ရှင်းပြပါမယ်။

  1. JFrameJFrame သည် Java Swing တွင် window တစ်ခုကို ကိုယ်စားပြုသော class ဖြစ်ပါသည်။ ဤနေရာတွင် JFrame object တစ်ခုကို "JList Example" ဟူသော title ဖြင့် ဖန်တီးထားပါသည်။ BoxLayout ကို အသုံးပြု၍ components များကို ဒေါင်လိုက် (vertical) စီစဉ်ထားပါသည်။

    java
    JFrame frame = new JFrame("JList Example");
    frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
  2. DefaultListModelJList တွင် ပြသလိုသော items များကို စီမံခန့်ခွဲရန် ListModel interface ကို implement လုပ်ထားသော class တစ်ခု လိုအပ်ပါသည်။ DefaultListModel သည် အသုံးအများဆုံး model ဖြစ်ပြီး၊ items များကို dynamically ထည့်သွင်းခြင်း (addElement()) သို့မဟုတ် ဖယ်ရှားခြင်း (removeElement()) ပြုလုပ်နိုင်စေပါသည်။

    java
    DefaultListModel<String> listModel = new DefaultListModel<>();
    listModel.addElement("Apple");
    // ...
  3. JList CreationJList object ကို ဖန်တီးရာတွင် DefaultListModel object ကို constructor ထဲသို့ ထည့်သွင်းပေးရပါသည်။ <String> သည် Generic type ဖြစ်ပြီး၊ JList တွင် String type item များကို ထည့်သွင်းမည်ဟု ဆိုလိုပါသည်။

    java
    JList<String> fruitList = new JList<>(listModel);

JList Example

  1. Selection Mode

    setSelectionMode() method ကို အသုံးပြု၍ JList ၏ selection mode ကို သတ်မှတ်နိုင်ပါသည်။

    • ListSelectionModel.SINGLE_SELECTION:

    တစ်ကြိမ်လျှင် item တစ်ခုတည်းသာ ရွေးချယ်နိုင်ပါသည်။

    • ListSelectionModel.SINGLE_INTERVAL_SELECTION:

    ဆက်တိုက်ရှိသော item များကိုသာ ရွေးချယ်နိုင်ပါသည်။

    • ListSelectionModel.MULTIPLE_INTERVAL_SELECTION:

    မည်သည့် item ကိုမဆို (Ctrl/Cmd သို့မဟုတ် Shift နှိပ်၍) ရွေးချယ်နိုင်ပါသည်။

    java
    fruitList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

JList Example

  1. JScrollPane

    JList သည် items များပြားလာသောအခါ scrollbar များ အလိုအလျောက် ပေါ်လာခြင်း မရှိပါ။ ထို့ကြောင့် JScrollPane ဖြင့် ထုပ်ပိုးခြင်းဖြင့် scrollable ဖြစ်စေပါသည်။ setPreferredSize() ဖြင့် scroll pane ၏ အကြိုက်ဆုံး size ကို သတ်မှတ်နိုင်ပါသည်။

    java
    JScrollPane scrollPane = new JScrollPane(fruitList);
    scrollPane.setPreferredSize(new java.awt.Dimension(200, 150));
  2. JButton

    JButton သည် user interaction ကို ကိုင်တွယ်ရန် အသုံးပြုသော component ဖြစ်ပါသည်။ ဤနေရာတွင် "Submit" ဟူသော text ပါသော Button တစ်ခုကို ဖန်တီးထားပါသည်။

    java
    JButton submitButton = new JButton("Submit");
  3. Event Handling with ActionListener

    Button ကို နှိပ်သောအခါ JList မှ ရွေးချယ်ထားသော item များကို getSelectedValuesList() method ဖြင့် ရယူပြီး message dialog ဖြင့် ပြသရန် ActionListener interface ကို အသုံးပြုထားပါသည်။ getSelectedValuesList() သည် java.util.List ကို ပြန်ပေးပါသည်။

    java
    submitButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            java.util.List<String> selectedFruits = fruitList.getSelectedValuesList();
            if (selectedFruits.isEmpty()) {
                JOptionPane.showMessageDialog(frame, "No fruit selected.");
            } else {
                JOptionPane.showMessageDialog(frame, "Selected Fruits: " + String.join(", ", selectedFruits));
            }
        }
    });

JList Example

  1. JPanel

    JPanel သည် components များကို စီစဉ်ရန် အသုံးပြုသော container တစ်ခုဖြစ်ပါသည်။ ဤနေရာတွင် JLabel, JScrollPane (JList ကို ထုပ်ပိုးထားသော), နှင့် JButton ကို JPanel ထဲသို့ ထည့်သွင်းထားပါသည်။

    java
    JPanel panel = new JPanel();
    panel.add(new JLabel("Select fruits:"));
    panel.add(scrollPane);
    panel.add(submitButton);

JList ၏ အခြား Features များ

  • ListSelectionListener:

    JList တွင် selection ပြောင်းလဲတိုင်း event ကို ကိုင်တွယ်လိုပါက addListSelectionListener() method ကို အသုံးပြုနိုင်ပါသည်။

  • Custom Renderer:

    JList ၏ items များကို ပုံမှန် text အပြင် ပုံများ သို့မဟုတ် ပိုမိုရှုပ်ထွေးသော UI များဖြင့် ပြသလိုပါက ListCellRenderer ကို အသုံးပြု၍ custom rendering ပြုလုပ်နိုင်ပါသည်။