下面列出了javax.swing.JList#DropLocation ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private Boolean reorderProjects(TransferHandler.TransferSupport support) {
JList list = (JList) support.getComponent();
try {
int[] selectedIndices = (int[]) support.getTransferable().getTransferData(INDICES);
DefaultListModel model = (DefaultListModel) list.getModel();
JList.DropLocation dl = (JList.DropLocation) support.getDropLocation();
if (dl.getIndex() != -1) {
for (int selectedIndex : selectedIndices) {
Object value = model.get(selectedIndex);
model.removeElement(value);
model.add(dl.getIndex(), value);
}
return true;
} else {
LOG.warning("Invalid Drop Location");
}
} catch (UnsupportedFlavorException | IOException ex) {
LOG.log(Level.SEVERE, ex.getMessage(), ex);
}
return false;
}
@Override
public boolean canImport(final TransferHandler.TransferSupport support) {
if (!support.isDataFlavorSupported(DataFlavor.stringFlavor)) {
return false;
}
JList.DropLocation dl = (JList.DropLocation) support.getDropLocation();
return dl.getIndex() != -1;
}
@Override
public boolean importData(final TransferHandler.TransferSupport support) {
if (!canImport(support)) {
return false;
}
final Transferable transferable = support.getTransferable();
String indexString;
try {
indexString = (String) transferable.getTransferData(DataFlavor.stringFlavor);
} catch (Exception ex) {
return false;
}
final int index = Integer.parseInt(indexString);
JList.DropLocation dl = (JList.DropLocation) support.getDropLocation();
final int dropTargetIndex = dl.getIndex();
// Drop the dragged element into the correct place.
if (index < dropTargetIndex) {
// If the dragged element is being dropped at a higher target index,
// add the element at the indicated index, remove the element from the source,
// and select the dragged element (at a different position due to the removal).
list.model.addMyElement(dropTargetIndex, list.model.getMyElementAt(index));
list.model.removeMyElement(index);
list.setSelectedIndex(dropTargetIndex - 1);
} else {
// If the dragged element is being dropped at a lower target index,
// remove the element from the source, add it at the indicated index,
// and select it.
final MyElement element = list.model.removeMyElement(index);
list.model.addMyElement(dropTargetIndex, element);
list.setSelectedIndex(dropTargetIndex);
}
return true;
}
@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();
int index = dl.getIndex();
boolean insert = dl.isInsert();
// Get the string that is being dropped.
Transferable t = info.getTransferable();
String data;
try {
data = (String) t.getTransferData(DataFlavor.stringFlavor);
} catch (Exception e) {
return false;
}
// Perform the actual import.
if (insert) {
listModel.add(index, data);
} else {
listModel.set(index, data);
}
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean importData(TransferSupport info) {
TransferHandler.DropLocation dropLocation = info.getDropLocation();
if (!canImport(info) || !(dropLocation instanceof JList.DropLocation)) {
return false;
}
JList.DropLocation dl = (JList.DropLocation) dropLocation;
JList target = (JList) info.getComponent();
DefaultListModel listModel = (DefaultListModel) target.getModel();
int max = listModel.getSize();
int index = dl.getIndex();
index = index < 0 ? max : index;
// make sure to append at the end if index > size
index = Math.min(index, max);
addIndex = index;
try {
Object[] values = (Object[]) info.getTransferable().getTransferData(localObjectFlavor);
for (Object value : values) {
int idx = index++;
listModel.add(idx, value);
target.addSelectionInterval(idx, idx);
}
addCount = values.length;
return true;
} catch (UnsupportedFlavorException | IOException e) {
// should never happen, log anyway to be safe
LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.tools.dnd.ExtendedJListTransferHandler.unexpected_error", e);
}
return false;
}
@SuppressWarnings("unchecked")
@Override
public boolean importData(TransferSupport info) {
TransferHandler.DropLocation tdl = info.getDropLocation();
if (!canImport(info) || !(tdl instanceof JList.DropLocation)) {
return false;
}
JList.DropLocation dl = (JList.DropLocation) tdl;
JList<?> target = (JList) info.getComponent();
DefaultListModel<Object> listModel = (DefaultListModel) target.getModel();
int max = listModel.getSize();
int index = dl.getIndex();
index = index < 0 ? max : index; // If it is out of range, it is appended to the end
index = Math.min(index, max);
addIndex = index;
try {
Object[] values = (Object[]) info.getTransferable().getTransferData(localObjectFlavor);
for (Object value : values) {
int idx = index++;
listModel.add(idx, value);
target.addSelectionInterval(idx, idx);
}
addCount = values.length;
return true;
} catch (UnsupportedFlavorException | IOException ex) {
LOG.error(ex.getMessage(), ex);
return false;
}
}
@Override
public Component getListCellRendererComponent (
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus
) {
setComponentOrientation (list.getComponentOrientation ());
Color bg = null;
Color fg = null;
JList.DropLocation dropLocation = list.getDropLocation ();
if (dropLocation != null && !dropLocation.isInsert () && dropLocation.getIndex () == index) {
bg = UIManager.getColor ("List.dropCellBackground");
fg = UIManager.getColor ("List.dropCellForeground");
isSelected = true;
}
String line = (String) value;
Link link = StackLineAnalyser.analyse (line);
if (isSelected) {
setBackground (bg == null ? list.getSelectionBackground () : bg);
setForeground(fg == null ? list.getSelectionForeground() : fg);
} else {
setBackground (list.getBackground ());
// if (link != null)
// setForeground (foreground);
// else
setForeground (list.getForeground ());
}
if (link != null) {
StringBuilder sb = new StringBuilder ();
sb.append ("<html>");
if (isSelected)
sb.append("<style> a.val {text-decoration: underline; color: " + toRgbText(getForeground().getRGB()) + "} </style><body>");
sb.append (line.substring (0, link.getStartOffset ()));
sb.append ("<a class=\"val\" href=\"\">");
sb.append (line.substring (link.getStartOffset (), link.getEndOffset ()));
sb.append ("</a>");
sb.append (line.substring (link.getEndOffset ()));
sb.append ("</body></html>");
setText (sb.toString ());
} else
setText (line.trim ());
setEnabled (list.isEnabled ());
Border border = null;
if (cellHasFocus) {
if (isSelected) {
border = UIManager.getBorder ("List.focusSelectedCellHighlightBorder");
}
if (border == null) {
border = UIManager.getBorder ("List.focusCellHighlightBorder");
}
} else {
border = getNoFocusBorder ();
}
setBorder (border);
return this;
}
public Component getListCellRendererComponent (
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus
) {
setComponentOrientation (list.getComponentOrientation ());
Color bg = null;
Color fg = null;
JList.DropLocation dropLocation = list.getDropLocation ();
if (dropLocation != null && !dropLocation.isInsert () && dropLocation.getIndex () == index) {
bg = UIManager.getColor("List.dropCellBackground");
fg = UIManager.getColor("List.dropCellForeground");
isSelected = true;
}
if (isSelected) {
setBackground (bg == null ? list.getSelectionBackground () : bg);
setForeground (fg == null ? list.getSelectionForeground () : fg);
} else {
setBackground (list.getBackground ());
setForeground (list.getForeground ());
}
String name = (String) value;
setText (name.substring (1));
setSelected (name.charAt (0) == '+');
setEnabled (list.isEnabled ());
setFont (list.getFont ());
Border border = null;
if (cellHasFocus) {
if (isSelected) {
border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");
}
if (border == null) {
border = UIManager.getBorder("List.focusCellHighlightBorder");
}
} else {
border = getNoFocusBorder ();
}
if (border != null) { //#189786: rarely, the border is null - reasons are unknown
setBorder (border);
} else {
Logger.getLogger(CheckBoxRenderrer.class.getName()).log(Level.INFO, "Cannot set any border");
}
return this;
}
public Component getListCellRendererComponent (
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus
) {
setComponentOrientation (list.getComponentOrientation ());
Color bg = null;
Color fg = null;
JList.DropLocation dropLocation = list.getDropLocation ();
if (dropLocation != null && !dropLocation.isInsert () && dropLocation.getIndex () == index) {
bg = UIManager.getColor("List.dropCellBackground");
fg = UIManager.getColor("List.dropCellForeground");
isSelected = true;
}
if (isSelected) {
setBackground (bg == null ? list.getSelectionBackground () : bg);
setForeground (fg == null ? list.getSelectionForeground () : fg);
} else {
setBackground (list.getBackground ());
setForeground (list.getForeground ());
}
String name = (String) value;
setText (name.substring (1));
setSelected (name.charAt (0) == '+');
setEnabled (list.isEnabled ());
setFont (list.getFont ());
Border border = null;
if (cellHasFocus) {
if (isSelected) {
border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");
}
if (border == null) {
border = UIManager.getBorder("List.focusCellHighlightBorder");
}
} else {
border = getNoFocusBorder ();
}
if (border != null) { //#189786: rarely, the border is null - reasons are unknown
setBorder (border);
} else {
Logger.getLogger(CheckBoxRenderrer.class.getName()).log(Level.INFO, "Cannot set any border");
}
return this;
}