在一个JLIST里面的图片,通过拖放可以在另一个JLIST里面显示? 我现在在做一个项目,其功能是首先在一个JList里面显示图像,然后可能通过鼠标拖放可能将图片拖到另一个JList里面显示,这个功能如何实现,答案正确,我多给分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 JList通过设置JList的CellRender实现,注意往JList填充的是对应的Object,我这里是都实现了ListdispInterface接口的对象public class ListCellRenderWithIcon extends DefaultListCellRenderer{ @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { if(!(value instanceof ListdispInterface)) return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); JLabel jl = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); ListdispInterface ldi = (ListdispInterface) value; jl.setIcon(new javax.swing.ImageIcon(getClass().getResource(ldi.getPicUrl()))); jl.setText(ldi.getDispname()); jl.setToolTipText(ldi.getTruename()); return jl; }}jList = new JList( new DefaultListModel()){ ListCellRenderWithIcon lcr = new ListCellRenderWithIcon(); @Override public ListCellRenderer getCellRenderer() { return lcr; } };拖放首先要设置TransferHandlerimport java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorException;import java.io.IOException;import javax.swing.JComponent;import javax.swing.TransferHandler;public abstract class StringTransferHandler extends TransferHandler { protected abstract String exportString(JComponent c); protected abstract void importString(JComponent c, String str); protected abstract void cleanup(JComponent c, boolean remove); protected Transferable createTransferable(JComponent c) { return new StringSelection(exportString(c)); } public int getSourceActions(JComponent c) { return COPY; } public boolean importData(JComponent c, Transferable t) { if (canImport(c, t.getTransferDataFlavors())) { try { String str = (String)t.getTransferData(DataFlavor.stringFlavor); importString(c, str); return true; } catch (UnsupportedFlavorException ufe) { } catch (IOException ioe) { } } return false; } protected void exportDone(JComponent c, Transferable data, int action) { // cleanup(c, action == MOVE); } public boolean canImport(JComponent c, DataFlavor[] flavors) { for (int i = 0; i < flavors.length; i++) { if (DataFlavor.stringFlavor.equals(flavors[i])) { return true; } } return false; }}上面那个是基础的TransferHandler,下面这个例子是我Table中的,修改下即可变成JList的,在exportString中按照自己定义的格式修改成String串(如果要图片就把图片URL附上),importString中按照那个String格式处理,canImport限制是否允许拖曳到package com.hsipcc.wfBuilder.util;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.UnsupportedFlavorException;import java.io.IOException;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.JComponent;import javax.swing.JTable;import javax.swing.table.DefaultTableModel;public class TableRowTransferHandler extends StringTransferHandler{ protected String exportString(JComponent c) { JTable jt = (JTable) c; if(jt.getSelectedRow()!=-1 && jt.getSelectedColumn()!=-1) { return "tabrow:"+jt.getSelectedRow(); } return ""; } protected void importString(JComponent c, String str) { JTable jt = (JTable) c; DefaultTableModel dtm = (DefaultTableModel) jt.getModel(); dtm.moveRow(Integer.parseInt(str.substring(7)), Integer.parseInt(str.substring(7)), jt.getSelectedRow()); } protected void cleanup(JComponent c, boolean remove) { } public boolean canImport(TransferSupport support) { String str; try { str = (String) (support.getTransferable().getTransferData(DataFlavor.stringFlavor)); if (str.startsWith("tabrow:")) { return true; } } catch (UnsupportedFlavorException ex) { Logger.getLogger(TableRowTransferHandler.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(TableRowTransferHandler.class.getName()).log(Level.SEVERE, null, ex); } return false; } }jList.setDragEnabled(true);//设置允许jList拖曳jList.setTransferHandler(new TableRowTransferHandler());//绑定TransferHandler 布局一个计算器界面 数据库中的表打不开了? 寻求体积最小版的jre版本.......现在的jre大都在70MB左右,感觉太大了,,各们有小的吗 滚动条例题的一段程序不理解 读取properties文件问题 关于JSP的一个很简单的问题 怎么把一个随机数显示在按钮上 !!!main 方法问题!!! 请问怎么在java程序里执行外部命令(linux)? 怎样运行另一个进程? 关于加密的问题?? 利用swing+管道实现与cmd通信 一道练习题提问,面向对象部分!
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if(!(value instanceof ListdispInterface))
return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
JLabel jl = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
ListdispInterface ldi = (ListdispInterface) value;
jl.setIcon(new javax.swing.ImageIcon(getClass().getResource(ldi.getPicUrl())));
jl.setText(ldi.getDispname());
jl.setToolTipText(ldi.getTruename());
return jl;
}
}
jList = new JList( new DefaultListModel()){
ListCellRenderWithIcon lcr = new ListCellRenderWithIcon();
@Override
public ListCellRenderer getCellRenderer() {
return lcr;
}
};
拖放首先要设置TransferHandlerimport java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;import javax.swing.JComponent;
import javax.swing.TransferHandler;public abstract class StringTransferHandler extends TransferHandler {
protected abstract String exportString(JComponent c);
protected abstract void importString(JComponent c, String str);
protected abstract void cleanup(JComponent c, boolean remove);
protected Transferable createTransferable(JComponent c) {
return new StringSelection(exportString(c));
}
public int getSourceActions(JComponent c) {
return COPY;
}
public boolean importData(JComponent c, Transferable t) {
if (canImport(c, t.getTransferDataFlavors())) {
try {
String str = (String)t.getTransferData(DataFlavor.stringFlavor);
importString(c, str);
return true;
} catch (UnsupportedFlavorException ufe) {
} catch (IOException ioe) {
}
} return false;
}
protected void exportDone(JComponent c, Transferable data, int action) {
// cleanup(c, action == MOVE);
}
public boolean canImport(JComponent c, DataFlavor[] flavors) {
for (int i = 0; i < flavors.length; i++) {
if (DataFlavor.stringFlavor.equals(flavors[i])) {
return true;
}
}
return false;
}
}
上面那个是基础的TransferHandler,下面这个例子是我Table中的,修改下即可变成JList的,在exportString中按照自己定义的格式修改成String串(如果要图片就把图片URL附上),importString中按照那个String格式处理,canImport限制是否允许拖曳到
package com.hsipcc.wfBuilder.util;import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;public class TableRowTransferHandler extends StringTransferHandler
{ protected String exportString(JComponent c)
{
JTable jt = (JTable) c;
if(jt.getSelectedRow()!=-1 && jt.getSelectedColumn()!=-1)
{
return "tabrow:"+jt.getSelectedRow();
}
return "";
} protected void importString(JComponent c, String str)
{
JTable jt = (JTable) c;
DefaultTableModel dtm = (DefaultTableModel) jt.getModel();
dtm.moveRow(Integer.parseInt(str.substring(7)), Integer.parseInt(str.substring(7)), jt.getSelectedRow());
} protected void cleanup(JComponent c, boolean remove)
{
}
public boolean canImport(TransferSupport support) {
String str;
try {
str = (String) (support.getTransferable().getTransferData(DataFlavor.stringFlavor));
if (str.startsWith("tabrow:")) {
return true;
} } catch (UnsupportedFlavorException ex) {
Logger.getLogger(TableRowTransferHandler.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(TableRowTransferHandler.class.getName()).log(Level.SEVERE, null, ex);
}
return false;
}
}jList.setDragEnabled(true);//设置允许jList拖曳
jList.setTransferHandler(new TableRowTransferHandler());//绑定TransferHandler