Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Utilizzo TransferHandler per Immagini in java

    Ciao ragazzi!Vorrei sfruttare TransferHandler per creare "al volo" un bottone a partire da un ImageIcon trascinata in un pannello!Cioè dato un frame con delle ImageIcon e un altro frame con un pannello vuoto,trascinando un ImageIcon nel pannello vuoto vorrei la creazione di un bottone con icona quella ImageIcon trascinata!C'è qualcuno ke può darmi una mano?Vi ringrazio anticipatamente =)

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Utilizzo TransferHandler per Immagini in java

    Originariamente inviato da claujava
    Cioè dato un frame con delle ImageIcon
    Sì ok ma queste ImageIcon sono messe ... dove? In un JLabel? JButton? Altro?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Posso metterle nel component ke preferisco...ad esempio poteri mettere ogni immagine in una JLabel..

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ecco un esempio completo:

    codice:
    import java.awt.*;
    import java.awt.datatransfer.*;
    import java.awt.event.*;
    import java.net.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame {
        private StartDragMouseListener startDragMouseListener;
    
        public TestFrame() {
            super("Test Icon to Button Drag&Drop");
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setSize(400, 300);
    
            startDragMouseListener = new StartDragMouseListener();
    
            JPanel sourcePanel = new JPanel(new FlowLayout());
            sourcePanel.add(createIconLabel("http://img383.imageshack.us/img383/4245/iconwink5sx.gif"));
            sourcePanel.add(createIconLabel("http://img471.imageshack.us/img471/6554/iconasdhf7.gif"));
            sourcePanel.add(createIconLabel("http://img214.imageshack.us/img214/4246/mame.gif"));
    
            JPanel destinationPanel = new JPanel(new FlowLayout());
            destinationPanel.setTransferHandler(new IconToPanelButtonTransferHandler());
    
            JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, sourcePanel, destinationPanel);
    
            getContentPane().add(splitPane);
        }
    
        private JLabel createIconLabel(String urlStr) {
            JLabel l = new JLabel();
    
            try {
                l.setIcon(new ImageIcon(new URL(urlStr)));
                l.setTransferHandler(new TransferHandler("icon"));
                l.addMouseListener(startDragMouseListener);
            } catch (Exception e) {
                System.err.println(e);
            }
    
            return l;
        }
    
        private class StartDragMouseListener extends MouseAdapter {
            public void mousePressed(MouseEvent e) {
                JComponent comp = (JComponent) e.getSource();
                TransferHandler handler = comp.getTransferHandler();
                handler.exportAsDrag(comp, e, TransferHandler.COPY);
            }
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new TestFrame().setVisible(true);
                }
            });
        }
    }
    
    
    class IconToPanelButtonTransferHandler extends TransferHandler {
        public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
            for (int i = 0; i < transferFlavors.length; i++) {
                if (transferFlavors[i].getRepresentationClass() == Icon.class) {
                    return true;
                }
            }
    
            return false;
        }
    
        public boolean importData(JComponent comp, Transferable t) {
            DataFlavor[] transferFlavors = t.getTransferDataFlavors();
    
            for (int i = 0; i < transferFlavors.length; i++) {
                if (transferFlavors[i].getRepresentationClass() == Icon.class) {
                    try {
                        Icon receivedIcon = (Icon) t.getTransferData(transferFlavors[i]);
    
                        JButton button = new JButton(receivedIcon);
    
                        JPanel panel = (JPanel) comp;
                        panel.add(button);
                        panel.validate();
    
                        return true;
                    } catch (Exception e) {
                        System.err.println(e);
                    }
                }
            }
    
            return false;
        }
    }
    Il codice è un po' lungo ma spero chiaro. Vengono caricate (da URL su internet ... non sapevo cosa altro mettere ... ) delle ImageIcon messe dentro JLabel. Su questi JLabel viene impostato il drag della proprietà "icon" (quindi appunto un javax.swing.Icon).

    Sul pannello di destinazione (quello sotto) viene semplicemente impostato uno speciale TransferHandler che accetta oggetti Icon e nel momento dell'import crea il JButton con la icona che poi aggiunge nel pannello (di cui ha il reference passato come JComponent).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Grazie mille,era proprio quello ke cercavo!! =) Ora ci sto lavorando sopra,inserendo componenti ecc..javascript:void(0);

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da claujava
    Grazie mille,era proprio quello ke cercavo!!
    Prego. Ma toglimi una curiosità: cosa devi fare realmente con un drag&drop così "particolare"?

    Originariamente inviato da claujava
    Ora ci sto lavorando sopra,inserendo componenti ecc..javascript:void(0);
    Cosa centra Javascript?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Per un esame universitario (3 miseri crediti *_*) devo portare un progettino usando solo tecnologia Java ke simula un interfaccia di un palmare,con relative applicazioni..quindi avevo bisogno del drag and drop per spostare le icone da un menu all'altro (vedi funzionamento samsung touch screen non ricordo il modello) per usarle poi come bottoni dai quali lanciare le applicazioni che ho sviluppato(rubrica,galleria multimediale,bloccoNote,piccola salagiochi,pannello impostazioni desktop ecc)..non so se sn stato abbastanza chiaro nella spiegazione =)
    Anzi,ti volevo kiedere se sai come rendere la barra delle finestre (in windows blu cn icona a sinistra) trasparente/lucida tramite l'uso delle swingX...ho scaricato queste librerie evolute ma non sortisco gli effetti desiderati! =(

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.