Forum İçeriği > Çekirdek Java > JList Drag Drop ile ilgili orenek bir calisma

Abdulkadir Selcukoglu 20 ay önce
Aktivite Puanı: 186
Selamun aleykum arkadaslar;
Ben bir kac hafta evel JListte drag drop olayini arastiriyordum bunula ilgili bir cok ornek vardi ama tam istenilen sekilde calismiyordu kendim bir ornek yaptim ve sizlerle paylasmak istedim belki isinize yarar diye

Olusturdugum frame su sekilde


ve Drog drog olmus liste



Size kod bolumunu yolluyorum cok basit bir yapisi var

package az.risk;

import javax.swing.*;
import java.awt.datatransfer.*;
import java.util.ArrayList;
import java.util.List;

public class ListTransferHandler extends TransferHandler {

    private int[] indices = null;
    private int index;
    private int listCount;

    @Override
    public boolean canImport(TransferHandler.TransferSupport info) {
        if (!info.isDataFlavorSupported(DataFlavor.stringFlavor)) {
            return false;
        }
        return true;
    }

    //Tutulan deger uzerunde  Transferable islemi yapmak icin
    @Override
    protected Transferable createTransferable(JComponent c) {
        return new StringSelection(exportString(c));
    }

    // Drag Drog olayini gerceklestiriyor
    @Override
    public int getSourceActions(JComponent c) {
        return TransferHandler.COPY_OR_MOVE;
    }

    @Override
        public boolean importData(TransferHandler.TransferSupport info) {
            if (!info.isDrop()) {
                return false;
            }

            JList list = (JList) info.getComponent();
            DefaultListModel listModel = (DefaultListModel) list.getModel();

        JList.DropLocation dl = (JList.DropLocation) info.getDropLocation();
        index = dl.getIndex();
        boolean insert = dl.isInsert();

        Transferable t = info.getTransferable();
        String data;
        try {
            data = (String) t.getTransferData(DataFlavor.stringFlavor);
        } catch (Exception e) {
            return false;
        }
        if (insert) {
            listModel.add(index, data);
        } else {
            for (int i = indices.length - 1; i >= 0; i--) {
                listCount = indices;
            }
            if (listCount > index) {

                List l = new ArrayList();
                for (int i = index; i < listCount; i++) {
                    l.add(listModel.get(i).toString());
                }
                listModel.set(index, data);
                int j = index + 1;
                for (String str : l) {
                    listModel.set(j, str);
                    j++;
                }
            } else {
                List l = new ArrayList();
                for (int i = (listCount+1); i <=index; i++) {
                    l.add(listModel.get(i).toString());
                }
                listModel.set(index, data);
                int j = listCount;
                for (String str : l) {
                    listModel.set(j, str);
                    j++;
                }
            }
        }
        return true;
    }


    //  Tutlan item'in degerini almak icin kullaniliyor
    protected String exportString(JComponent c) {
        JList list = (JList) c;
        indices = list.getSelectedIndices();
        return list.getSelectedValue().toString();
    }
}


Yukardaki class sayesinde bir drag drop olayini gerceklestiriyoruz yani bu class'imiz tutulan item aliyor ve birakakacagimiz yerdeki degeride aliyor ve tutugumuz item birakilinca birakilan yerden sonrakiler bir asagi kayiyor

Simdide size frame'de kodu yaziyom


package az.risk;

import javax.swing.DefaultListModel;
import javax.swing.DropMode;
import javax.swing.ListSelectionModel;

public class DropDeneme extends javax.swing.JFrame {

    /** Creates new form DropDeneme */
    DefaultListModel listModel = new DefaultListModel();
    public DropDeneme() {
        initComponents();
       
        for (int i = 0; i < 10; i++) {
            listModel.addElement("List Item " + i);
        }
        list.setModel(listModel);
        list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        list.setDropMode(DropMode.USE_SELECTION);
        list.setDragEnabled(true);
        list.setTransferHandler(new ListTransferHandler());
    }
   
    @SuppressWarnings("unchecked")
    //                          
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        list = new javax.swing.JList();
        btnListShow = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jScrollPane1.setViewportView(list);

        btnListShow.setText("List Show");
        btnListShow.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnListShowActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 380, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnListShow, javax.swing.GroupLayout.Alignment.TRAILING))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 263, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(btnListShow)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }//                        

    private void btnListShowActionPerformed(java.awt.event.ActionEvent evt) {                                           

        for (int i = 0; i < listModel.size(); i++) {
            System.out.println(listModel.getElementAt(i));

        }
                                             

 
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new DropDeneme().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                    
    private javax.swing.JButton btnListShow;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JList list;
    // End of variables declaration                  

}

Insallah isinize yarar Herkese hayirli gunler...


omerolmez 20 ay önce
Aktivite Puanı: 12
[konu dışı] kodlar okunma konusunda renklendirilmediğinden zor okunuyor. Kod renklendirmek için bir plugin portala eklenemezmi acaba ?

Örnek ;
http://bit.ly/cKEEj9
Abdulkadir Selcukoglu 20 ay önce
Aktivite Puanı: 186
Ya aslinda haklisin bekli boyle daha anlasilir olmustur Mavi ile yazilan yerlen Netbeans platformu tarafindan otomatik atiliyor benim yaptigim ve ornegin drag drop olayini gerceklestirdigi yer yesil kisimdir  Hayirli gunler 
wicket_id_tolga 20 ay önce
Aktivite Puanı: 66
bu güzel paylaşım için kendim adına teşekkur ediyorum  hocam

Latest Activity

yeni bir mesaj yolladı. TopLink EclipseLink
5 ay önce
mesaja yanıt verdi RE: HttpClient.
6 ay önce
mesaja yanıt verdi RE: HttpClient.
7 ay önce
yeni bir mesaj yolladı. HttpClient
7 ay önce
yeni bir mesaj yolladı. HttpClient
7 ay önce
yeni bir mesaj yolladı. Birt ile Raporlarma
10 ay önce
mesaja yanıt verdi RE: Hibernate.
10 ay önce
mesaja yanıt verdi RE: wicket kendi sayfama yonlendirme.
10 ay önce
yeni bir mesaj yolladı. wicket kendi sayfama yonlendirme
11 ay önce
yeni bir mesaj yolladı. wicket kendi sayfama yonlendirme
11 ay önce

Top Contributors

71
ertugrula
53
Abdulkadir Selcukoglu
49
Altuğ Bilgin Altıntaş
32
wicket_id_tolga
30
Taner Diler