Hallo zusammen
Ich bin wirklich am verzweifeln und komme nicht weiter. Habe einen Quellcode welcher 2 JList auf einer Swing_form hat. Den Code habe ich so umgeschreiben, dass die JLists alphabetisch sortiert werden. Durch 'ADD' sollte ein Eintrag von der JList1 in die JList2 verschoben werden. Das Zufügen geht auch, aber der Eintrag wird in der alten JList dann jeweils nicht enfernt.
Kann mir jemand von Euch bei der Umschreibung des Codes helfen? Wäre sehr dankbar für Hilfestellungen und Tipps
Grüsse Sundal
Ich bin wirklich am verzweifeln und komme nicht weiter. Habe einen Quellcode welcher 2 JList auf einer Swing_form hat. Den Code habe ich so umgeschreiben, dass die JLists alphabetisch sortiert werden. Durch 'ADD' sollte ein Eintrag von der JList1 in die JList2 verschoben werden. Das Zufügen geht auch, aber der Eintrag wird in der alten JList dann jeweils nicht enfernt.
Kann mir jemand von Euch bei der Umschreibung des Codes helfen? Wäre sehr dankbar für Hilfestellungen und Tipps
Grüsse Sundal
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.activation.ActivationDataFlavor;
import javax.activation.DataHandler;
import javax.swing.AbstractListModel;
import javax.swing.DefaultListModel;
import javax.swing.DropMode;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.TransferHandler;
public class Sorted_JList extends JFrame
{
private static final long serialVersionUID = 1L;
private Sorted_JList() {
super("JList");
createContents();
}
private void createContents() {
SortedListModel left = new SortedListModel();
SortedListModel right = new SortedListModel();
left.add("Schwarz");
left.add("Orange");
left.add("Rot");
left.add("Blau");
left.add("Grün");
left.add("Weiss");
JList list1 = new JList(left);
JScrollPane scroll1 = new JScrollPane(list1);
scroll1.setPreferredSize(new Dimension(200, 200));
JButton buttonRight = new JButton("ADD");
JButton buttonLeft = new JButton("REMOVE");
JList list2 = new JList(right);
JScrollPane scroll2 = new JScrollPane(list2);
scroll2.setPreferredSize(new Dimension(200, 200));
MoveItem actionMoveLeft = new MoveItem(list2, list1);
MoveItem actionMoveRight = new MoveItem(list1, list2);
TransferHandler transferHandler = new ListItemTransferHandler();
list1.setDragEnabled(false);
list1.setDropMode(DropMode.INSERT);
list1.setTransferHandler(transferHandler);
list1.addKeyListener(new ListKeyListener(list1, list2, 39));
list2.setDragEnabled(false);
list2.setDropMode(DropMode.INSERT);
list2.setBackground(Color.green);
list2.setTransferHandler(transferHandler);
list2.addKeyListener(new ListKeyListener(list2, list1, 37));
buttonLeft.addActionListener(actionMoveLeft);
buttonRight.addActionListener(actionMoveRight);
JPanel content = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.weighty = 1.0;
c.gridx = 0;
c.gridy = 0;
c.gridheight = 2;
c.insets = new Insets(5, 5, 5, 5);
content.add(scroll1, c);
c.gridx = 2;
content.add(scroll2, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.0;
c.weighty = 0.0;
c.gridx = 1;
c.gridheight = 1;
c.insets = new Insets(5, 0, 0, 0);
content.add(buttonLeft, c);
c.weightx = 0.0;
c.weighty = 1.0;
c.gridy = 1;
c.anchor = GridBagConstraints.NORTH;
content.add(buttonRight, c);
setContentPane(content);
}
public static void main(String[] args) {
JFrame window = new Sorted_JList();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.pack();
window.setLocationRelativeTo(null);
window.setVisible(true);
}
}
class SortedListModel extends AbstractListModel {
SortedSet model;
public SortedListModel() {
model = new TreeSet();
}
public int getSize() {
return model.size();
}
public Object getElementAt(int index) {
return model.toArray()[index];
}
public void add(Object element) {
if (model.add(element)) {
fireContentsChanged(this, 0, getSize());
}
}
public void addAll(Object elements[]) {
Collection c = Arrays.asList(elements);
model.addAll(c);
fireContentsChanged(this, 0, getSize());
}
public void clear() {
model.clear();
fireContentsChanged(this, 0, getSize());
}
public boolean contains(Object element) {
return model.contains(element);
}
public Object firstElement() {
return model.first();
}
public Iterator iterator() {
return model.iterator();
}
public Object lastElement() {
return model.last();
}
public boolean removeElement(Object element) {
boolean removed = model.remove(element);
if (removed) {
fireContentsChanged(this, 0, getSize());
}
return removed;
}
}
class ListKeyListener implements KeyListener {
private JList source;
private JList destination;
private int moveKey;
public ListKeyListener(JList source, JList destination, int moveKey) {
this.source = source;
this.destination = destination;
this.moveKey = moveKey;
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode() == this.moveKey){
MoveItem moveItem = new MoveItem(this.source, this.destination);
moveItem.actionPerformed(null);
}
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
class MoveItem implements ActionListener {
private JList source;
private JList destination;
public MoveItem(JList source, JList destination) {
this.destination = destination;
this.source = source;
}
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
int[] index = this.source.getSelectedIndices();
Object[] values = this.source.getSelectedValues();
for(Object value : values){
((SortedListModel)this.destination.getModel()).add(value);
}
for(int counter = (index.length -1); counter >= 0; counter--){
// ((SortedListModel)this.source.getModel()).removeElement(index[counter]);
}
}
}
class ListItemTransferHandler extends TransferHandler {
private int[] indices = null;
private int addIndex = -1; //Location where items were added
private int addCount = 0; //Number of items added.
private final DataFlavor localObjectFlavor;
private Object[] transferedObjects = null;
private JList source = null;
public ListItemTransferHandler() {
localObjectFlavor = new ActivationDataFlavor(Object[].class, DataFlavor.javaJVMLocalObjectMimeType, "Array of items");
}
@Override
protected Transferable createTransferable(JComponent c) {
source = (JList) c;
indices = source.getSelectedIndices();
transferedObjects = source.getSelectedValues();
return new DataHandler(transferedObjects, localObjectFlavor.getMimeType());
}
@Override
public boolean canImport(TransferHandler.TransferSupport info) {
return info.isDrop() && info.isDataFlavorSupported(localObjectFlavor);
}
@Override
public int getSourceActions(JComponent c) {
return TransferHandler.MOVE; //TransferHandler.COPY_OR_MOVE;
}
@Override
public boolean importData(TransferHandler.TransferSupport info) {
if (!canImport(info)) {
return false;
}
JList target = (JList)info.getComponent();
JList.DropLocation dl = (JList.DropLocation)info.getDropLocation();
SortedListModel listModel = (SortedListModel)target.getModel();
int index = dl.getIndex();
//boolean insert = dl.isInsert();
int max = listModel.getSize();
if(index<0 || index>max) {
index = max;
}
addIndex = index;
try{
Object[] values = (Object[])info.getTransferable().getTransferData(localObjectFlavor);
for(int i=0;i<values.length;i++) {
int idx = index++;
//listModel.addElement(idx, values[i]);
target.addSelectionInterval(idx, idx);
}
addCount = (target==source)? values.length : 0;
return true;
}catch(UnsupportedFlavorException ufe) {
ufe.printStackTrace();
}catch(java.io.IOException ioe) {
ioe.printStackTrace();
}
return false;
}
@Override
protected void exportDone(JComponent c, Transferable data, int action) {
cleanup(c, action == TransferHandler.MOVE);
}
private void cleanup(JComponent c, boolean remove) {
if(remove && indices != null) {
JList source = (JList)c;
SortedListModel model = (SortedListModel)source.getModel();
//If we are moving items around in the same list, we
//need to adjust the indices accordingly, since those
//after the insertion point have moved.
if(addCount > 0) {
for(int i=0;i<indices.length;i++) {
if(indices[i]>=addIndex) {
indices[i] += addCount;
}
}
}
for(int i=indices.length-1;i>=0;i--) {
//model.remove(indices[i]);
}
}
indices = null;
addCount = 0;
addIndex = -1;
}
}
Zuletzt bearbeitet: