Java。將ImageIcon從面板1的JLabel拖放到面板2的JLabel。添加計(jì)數(shù)器功能
這基本上是@Andrew的評(píng)論的概述-由于您的SSCCE,很容易實(shí)現(xiàn):-)
子類TransferHandler,重寫(xiě)canImport以檢查源標(biāo)簽是否在imageSelect面板上,如果不是,則拒絕。
// custom transferHandler which decides about imports based on source TransferHandler handler = new TransferHandler('icon') {@Overridepublic boolean canImport(TransferSupport support) { return super.canImport(support) && support.getComponent().getParent() != imageSelectPanel;} }; // use the handler on all labels (handlers can be shared, btw) // for each label on imageSelectPanel imageSelectLabel.setTransferHandler(handler) // for each label on the target panel (aka storyPanel) storyLabel.setTransferHandler(handler)解決方法
我已經(jīng)在兩個(gè)JPanel之間實(shí)現(xiàn)了這種非常基本的拖放操作,但這并不能真正滿足我的要求!
public class test extends JFrame {{ JPanel mainpanel,storypanel,imageselect; public test(){ mainpanel = new JPanel(new BorderLayout()); storypanel = new JPanel(); imageselect = new JPanel(); MouseListener listener = new MouseAdapter(){ public void mousePressed(MouseEvent e){ JComponent c = (JComponent) e.getSource(); TransferHandler handler = c.getTransferHandler(); handler.exportAsDrag(c,e,TransferHandler.COPY);}}; int j = 0; BufferedImage myImages; JLabel imgselect = new JLabel(); try { myImages = ImageIO.read(new File('four.jpg')); //myImages[j] = resize(myImages[j]); imgselect= new JLabel(new ImageIcon(myImages)); System.out.println(j); imageselect.add(imgselect); imgselect.addMouseListener(listener); imgselect.setTransferHandler(new TransferHandler('icon')); } catch(Exception e) {}; int i = 0; BufferedImage storyimages; JLabel storylabel = new JLabel(); //targetImg = new ImageIcon('lmkpackage/base/TargetImg.jpg'); try{ storyimages = ImageIO.read(new File('TargetImg.jpg')); //storyimages[i] = resize(storyimages[i]); storylabel = new JLabel(new ImageIcon(storyimages)); System.out.println(i); storypanel.add(storylabel); storylabel.addMouseListener(listener); storylabel.setTransferHandler(new TransferHandler('icon')); } catch(Exception e) {}; mainpanel.add(imageselect,BorderLayout.NORTH); mainpanel.add(storypanel,BorderLayout.SOUTH); getContentPane().add(mainpanel);}public static void main(String[] args){System.out.println('Application Running');JFrame mainframe = new test(); mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);mainframe.setSize(1000,1000); mainframe.setVisible(true);} }
對(duì)不起,我在這里不太清楚。我試圖將ImageIcon從imageselect面板上的JLabel拖動(dòng)到故事情節(jié)面板上的另一個(gè)JLabel。我可以使用上面的代碼來(lái)做到這一點(diǎn)。但是,當(dāng)我這樣做時(shí),可以從imageselect面板中拖動(dòng)一個(gè)ImageIcon,然后在同一面板上替換另一個(gè)ImageIcon。我不希望這種情況發(fā)生。我也可以從故事情節(jié)面板拖到不需要的圖像選擇面板。
我并不是要成為傻瓜式的代碼,我只是在尋找正確的方向!
編輯:我想知道有什么方法可以計(jì)算成功的拖放操作,下面的解決方案回答了我的原始問(wèn)題。
相關(guān)文章:
1. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問(wèn)題2. java - 關(guān)于File的問(wèn)題?3. java - instance method中 static后的<K>是什么意思?4. debian - docker依賴的aufs-tools源碼哪里可以找到啊?5. 錯(cuò)誤:java.lang.NoSuchMethodError:org.objectweb.asm.ClassWriter。<init>(I)V6. python3.x - python連oanda的模擬交易api獲取json問(wèn)題第五問(wèn)7. java - SSH框架中寫(xiě)分頁(yè)時(shí)service層中不能注入分頁(yè)類8. docker - 如何修改運(yùn)行中容器的配置9. javascript - QWebEngineView 如何爬 angular 的動(dòng)態(tài)數(shù)據(jù)?10. docker-machine添加一個(gè)已有的docker主機(jī)問(wèn)題
