Forum İçeriği > Çekirdek Java > JList Drag Drop ile ilgili orenek bir calisma
|
|
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
|
Aktivite Puanı: 186
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...