import javax.swing.*;

import javax.swing.event.*;

import javax.swing.table.*;

 

import java.util.*;

import java.awt.*;

import java.awt.event.*;

 

public class ListSelectionDemo extends JApplet {

    JTextArea output;

    JList list;

    JTable table;

    String newline = "\n";

    ListSelectionModel listSelectionModel;

 

    private boolean inAnApplet = true;

 

    //bazı sistemlerde ana kurucu metod olmayınca hata verebileceği

    // için tanımlandı.

    public ListSelectionDemo()

    {

        this(true);

    }

 

    public ListSelectionDemo(boolean inAnApplet) {

        this.inAnApplet = inAnApplet;

        if (inAnApplet) {

            getRootPane().putClientProperty("defeatSystemEventQueueCheck",

                                            Boolean.TRUE);

       }

    }

 

    public void init() {

 

        String[] listData = { "bir", "iki", "üç", "dört",

                              "beş", "altı", "yedi" };

        String[] columnNames = { "Fransızca", "İngilizce", "Italyanca" };

        String[][] tableData = {{"un",     "obe",     "uno"     },

                                {"deux",   "two",     "due"     },

                                {"trois",  "three",    "tre"     },

                                { "quatre", "four",  "quattro"},

                                { "cinq",   "five",   "cinque" },

                                { "six",    "six",    "sei"    },

                                { "sept",   "seven",   "sette"  } };

 

        list = new JList(listData);

 

        listSelectionModel = list.getSelectionModel();

        listSelectionModel.addListSelectionListener(

                                new SharedListSelectionHandler());

        JScrollPane listPane = new JScrollPane(list);

 

        table = new JTable(tableData, columnNames);

        table.setSelectionModel(listSelectionModel);

        JScrollPane tablePane = new JScrollPane(table);

 

        //Kontrol alanını JPAnel olarak oluştur (FlowLayout kullan)

        JPanel controlPane = new JPanel();

        String[] modes = { "SINGLE_SELECTION",

                           "SINGLE_INTERVAL_SELECTION",

                           "MULTIPLE_INTERVAL_SELECTION" };

 

        final JComboBox comboBox = new JComboBox(modes);

        comboBox.setSelectedIndex(2);

        comboBox.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                String newMode = (String)comboBox.getSelectedItem();

                if (newMode.equals("SINGLE_SELECTION")) {

                    listSelectionModel.setSelectionMode(

                        ListSelectionModel.SINGLE_SELECTION);

                } else if (newMode.equals("SINGLE_INTERVAL_SELECTION")) {

                    listSelectionModel.setSelectionMode(

                        ListSelectionModel.SINGLE_INTERVAL_SELECTION);

                } else {

                    listSelectionModel.setSelectionMode(

                        ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

                }

                output.append("----------"

                              + "Liste seçim türü: " + newMode

                              + "----------" + newline);

            }

        });

        controlPane.add(new JLabel("Liste Türü :"));

        controlPane.add(comboBox);

        //Çıktı alanı oluştur

        output = new JTextArea(10, 40);

        output.setEditable(false);

        JScrollPane outputPane = new JScrollPane(output,

                         ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,

                         ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

 

        //JFrame'i Split pane kullanarak ikiye böl

        JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);

        getContentPane().add(splitPane, BorderLayout.CENTER);

 

        //

        JPanel topHalf = new JPanel();

        topHalf.setLayout(new BoxLayout(topHalf, BoxLayout.X_AXIS));

        JPanel listContainer = new JPanel(new GridLayout(1,1));

        listContainer.setBorder(BorderFactory.createTitledBorder(

                                                "Türkçe Liste"));

        listContainer.add(listPane);

        JPanel tableContainer = new JPanel(new GridLayout(1,1));

        tableContainer.setBorder(BorderFactory.createTitledBorder(

                                                "Tablo"));

        tableContainer.add(tablePane);

        tablePane.setPreferredSize(new Dimension(300, 100));

        topHalf.setBorder(BorderFactory.createEmptyBorder(5,5,0,5));

        topHalf.add(listContainer);

        topHalf.add(tableContainer);

 

        topHalf.setMinimumSize(new Dimension(400, 50));

        topHalf.setPreferredSize(new Dimension(400, 110));

        splitPane.add(topHalf);

 

        JPanel bottomHalf = new JPanel(new BorderLayout());

        bottomHalf.add(controlPane, BorderLayout.NORTH);

        bottomHalf.add(outputPane, BorderLayout.CENTER);

        //XXX: the next line is necessary if bottomHalf is a scroll pane:

        //bottomHalf.setMinimumSize(new Dimension(400, 50));

        bottomHalf.setPreferredSize(new Dimension(450, 135));

        splitPane.add(bottomHalf);

    }

 

    public static void main(String[] args) {

        JFrame frame = new JFrame("Listeden seçme örneği");

        frame.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {

                System.exit(0);

            }

        });

 

        ListSelectionDemo listDemo = new ListSelectionDemo(false);

        listDemo.init();

        frame.setContentPane(listDemo);

        frame.pack();

        frame.setVisible(true);

    }

 

    class SharedListSelectionHandler implements ListSelectionListener {

        public void valueChanged(ListSelectionEvent e) {

            ListSelectionModel lsm = (ListSelectionModel)e.getSource();

 

            int firstIndex = e.getFirstIndex();

            int lastIndex = e.getLastIndex();

            boolean isAdjusting = e.getValueIsAdjusting();

            output.append("Seçilen indeks bölgesi: "

                          + firstIndex + " - " + lastIndex

                          + "; isAdjusting  " + isAdjusting

                          + "; Listeden seçilen indeks sayısı:");

 

            if (lsm.isSelectionEmpty()) {

                output.append(" <none>");

            } else {

                // Find out which indexes are selected.

                int minIndex = lsm.getMinSelectionIndex();

                int maxIndex = lsm.getMaxSelectionIndex();

                for (int i = minIndex; i <= maxIndex; i++) {

                    if (lsm.isSelectedIndex(i)) {

                        output.append(" " + i);

                    }

                }

            }

            output.append(newline);

        }

    }

}

