Drag and Drop, Panel eine MP3 abspielen

Simon Berger

Grünschnabel
Hallo Freunde, ein frohes neues Jahr wünsch ich euch.

habe ein folgendes Problem. Ich bin dabei in der Uni ein Projekt zu starten, dass folgende Funktionalität besitzen soll.
Der User soll in der Lage sein, per Drag&Drop ein Musikstück auf eines der erstellten Panels zu setzen.

Diese werden dann gespeichert. Falls der User dann auf das entsprechende Panel klickt, soll das Lied abgespielt werden.

Besitze die Klasse
  • Mp3Player (Benutze die play Funktionalitäten von Player, javazoom bib)
  • Gui (indem ich die Panels erstelle)
  • Track ( was mir Trackinformation gibt, wie id3tag)
  • MyTransferHandler implements TransferHandler

Code:
public class MyTransferHandler extends TransferHandler {

    MP3Player mp3Player;
    Track track;

    public boolean canImport(TransferSupport info) {
        boolean coppySupported;

        if (!info.isDrop()) {
            return false;
        }
        if (!info.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
            return false;
        }
        coppySupported = (COPY_OR_MOVE & info.getSourceDropActions()) == COPY_OR_MOVE;
        if (coppySupported) {
            info.setDropAction(MOVE);
            return true;
        }
        return false;


    }

    public boolean importData(TransferSupport info) {
        if (!canImport(info)) {
            return false;
        }
        //Transferobjekt holen
        Transferable transfer = info.getTransferable();
        
        try {
            List<File> listFile = (List<File>) transfer
                    .getTransferData(DataFlavor.javaFileListFlavor);
            
            
            for (File file : listFile) {
                
                Track importedTrack = track.importTrack(file.getPath());
                
                
            }
            
        } catch (UnsupportedFlavorException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
     
        return false;
    }
}

Wie schaff ich es, dass wenn ich nun auf ein Panel klicke, dass er mir das Lied abspielt?

Vielen Dank für eure Hilfe vorab
 
Hi, auch dir ein frohes neues Jahr.

Was genau verwendest du denn für deine Gui? Awt? Swing? Swt?

Damit dein Panel registriert, dass ein Klick erfolgt ist, musst du diesem einen MouseListener verpassen. Dann kannst du bei einem Klick das Lied deiner Wahl abspielen. Das abspielen der Mp3-Datei funktioniert via javazoom. (falls du das nicht eh schon weißt)

Gruß

Fabio
 
Hallo Danke, ja diese benutz ich auch

Java:
package GUI;

import BuisnessLogik.MP3Player;
import Data.MyTransferHandler;
import Data.Track;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import org.jaudiotagger.audio.exceptions.CannotReadException;
import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException;
import org.jaudiotagger.audio.exceptions.ReadOnlyFileException;
import org.jaudiotagger.tag.TagException;

public class Gui extends javax.swing.JFrame implements MouseListener, DropTargetListener {

    JPanel panel;
    MP3Player mp3Player = new MP3Player();
    Track track = new Track();
 

    public Gui() {
        initComponents();
        los();
        changeBG();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel_music = new javax.swing.JPanel();
        jPanel8 = new javax.swing.JPanel();
        btn_play = new javax.swing.JButton();
        lbl_titelAusgabe = new javax.swing.JLabel();
        lbl_albumTitel = new javax.swing.JLabel();
        lbl_genreAusgabe = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jPanel9 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(237, 237, 237));

        jPanel_music.setMinimumSize(new java.awt.Dimension(0, 0));
        jPanel_music.setPreferredSize(new java.awt.Dimension(350, 350));

        org.jdesktop.layout.GroupLayout jPanel_musicLayout = new org.jdesktop.layout.GroupLayout(jPanel_music);
        jPanel_music.setLayout(jPanel_musicLayout);
        jPanel_musicLayout.setHorizontalGroup(
            jPanel_musicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 350, Short.MAX_VALUE)
        );
        jPanel_musicLayout.setVerticalGroup(
            jPanel_musicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 0, Short.MAX_VALUE)
        );

        jPanel8.setPreferredSize(new java.awt.Dimension(180, 350));

        btn_play.setText("Play");
        btn_play.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn_playActionPerformed(evt);
            }
        });

        lbl_titelAusgabe.setText("Künstler");

        lbl_albumTitel.setText("Album");

        lbl_genreAusgabe.setText("Genre");

        jLabel1.setText("jLabel1");

        org.jdesktop.layout.GroupLayout jPanel8Layout = new org.jdesktop.layout.GroupLayout(jPanel8);
        jPanel8.setLayout(jPanel8Layout);
        jPanel8Layout.setHorizontalGroup(
            jPanel8Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel8Layout.createSequentialGroup()
                .add(jPanel8Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel8Layout.createSequentialGroup()
                        .addContainerGap(117, Short.MAX_VALUE)
                        .add(btn_play))
                    .add(jPanel8Layout.createSequentialGroup()
                        .add(15, 15, 15)
                        .add(jPanel8Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                            .add(lbl_titelAusgabe, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 148, Short.MAX_VALUE)
                            .add(lbl_albumTitel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .add(lbl_genreAusgabe, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .add(0, 0, Short.MAX_VALUE))
                    .add(jPanel8Layout.createSequentialGroup()
                        .addContainerGap()
                        .add(jLabel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addContainerGap())
        );
        jPanel8Layout.setVerticalGroup(
            jPanel8Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel8Layout.createSequentialGroup()
                .addContainerGap()
                .add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 140, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(lbl_titelAusgabe, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 16, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(lbl_albumTitel)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(lbl_genreAusgabe)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .add(btn_play)
                .addContainerGap())
        );

        jPanel9.setPreferredSize(new java.awt.Dimension(250, 350));

        org.jdesktop.layout.GroupLayout jPanel9Layout = new org.jdesktop.layout.GroupLayout(jPanel9);
        jPanel9.setLayout(jPanel9Layout);
        jPanel9Layout.setHorizontalGroup(
            jPanel9Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 258, Short.MAX_VALUE)
        );
        jPanel9Layout.setVerticalGroup(
            jPanel9Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 350, Short.MAX_VALUE)
        );

        jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/media/rahmen2.gif"))); // NOI18N

        jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/media/rahmen_unten.gif"))); // NOI18N
        jLabel3.setText("jLabel3");

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(152, 152, 152)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jLabel3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 801, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(layout.createSequentialGroup()
                        .add(jPanel_music, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jPanel8, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jPanel9, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 258, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                    .add(jLabel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 809, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(33, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(32, 32, 32)
                .add(jLabel2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jPanel8, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jPanel_music, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(jPanel9, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jLabel3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 67, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(55, 55, 55))
        );

        pack();
    }// </editor-fold>                        

    private void btn_playActionPerformed(java.awt.event.ActionEvent evt) {                                         
        
        if (btn_play.getText().equals("Play")) {
            mp3Player.play();
            btn_play.setText("Stop");

        } else {
            mp3Player.stop();            
            btn_play.setText("Play");
        }
    }                                        
    // Variables declaration - do not modify                     
    private javax.swing.JButton btn_play;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JPanel jPanel8;
    private javax.swing.JPanel jPanel9;
    private javax.swing.JPanel jPanel_music;
    private javax.swing.JLabel lbl_albumTitel;
    private javax.swing.JLabel lbl_genreAusgabe;
    private javax.swing.JLabel lbl_titelAusgabe;
    // End of variables declaration                   

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Gui().setVisible(true);
            }
        });
    }

    private void changeBG() {
    }

    private void los() {
        int nRows = 3;
        int nCols = 3;

        jPanel_music.setLayout(new GridLayout(nRows, nCols));

        for (int i = 0; i < nRows; i++) {
            for (int j = 0; j < nCols; j++) {
                panel = new JPanel();
                //panel.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));

                panel.setForeground(new Color(237,237,237));
                panel.setOpaque(true);
                panel.setName("x=" + j + ", y=" + i);
                panel.setTransferHandler(new MyTransferHandler());
                panel.setSize(100, 100);
                panel.addMouseListener(this);
                jPanel_music.add(panel);
            }
        }
        jPanel_music.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
    }

    public void mouseClicked(MouseEvent e) {
        panel = (JPanel) e.getSource();
        System.out.print("Wurde geklickt");

        // Reihe 1 ----------------------------------------- 
        
        // Panel 1, Genre: 
        if (panel.getName().equals("x=0, y=0")) {
            panel.setBackground(new Color(86, 144, 153));
            
            try {
                try {
                    track.getId3Tags();
                } catch (IOException ex) {
                    Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);
                }
                
            } catch (CannotReadException ex) {
                Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);
            } catch (TagException ex) {
                Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ReadOnlyFileException ex) {
                Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InvalidAudioFrameException ex) {
                Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);
            }
            

            this.lbl_titelAusgabe.setText(" " + track.getTitle());
            this.lbl_genreAusgabe.setText(" " + track.getGenre());
            this.lbl_albumTitel.setText(" " + track.getAlbumTitle());
            
        }
        
        // Panel 2, Genre: 
        if (panel.getName().equals("x=1, y=0")) {
            panel.setBackground(new Color(122, 74, 57));
        }
        
        // Panel 3, Genre: 
        if (panel.getName().equals("x=2, y=0")) {
            panel.setBackground(new Color(182, 85, 24));
        }

        // Reihe 2 ----------------------------------------- 

        if (panel.getName().equals("x=0, y=1")) {
            panel.setBackground(new Color(87, 81, 123));
        }
        if (panel.getName().equals("x=1, y=1")) {
            panel.setBackground(new Color(132, 53, 73));
        }
        if (panel.getName().equals("x=2, y=1")) {
            panel.setBackground(new Color(72, 107, 96));
        }

        // Reihe 3 ----------------------------------------- 

        if (panel.getName().equals("x=0, y=2")) {
            panel.setBackground(new Color(82, 75, 38));
        }
        if (panel.getName().equals("x=1, y=2")) {
            panel.setBackground(new Color(138, 105, 124));
        }
        if (panel.getName().equals("x=2, y=2")) {
            panel.setBackground(new Color(180, 148, 0));
        }
        
        if(btn_play.getText().equals("Play")){
        mp3Player.play();
        btn_play.setText("Stop");
        }

        //--------------------------------------------------
    }

    public void mousePressed(MouseEvent e) {
        System.out.println("MousePressed");
    }

    public void mouseReleased(MouseEvent e) {
        System.out.println("MouseReleased");
    }

    public void mouseEntered(MouseEvent e) {
        panel = (JPanel) e.getSource();

        if (panel.getName().equals("x=0, y=0")) {
            panel.setBackground(new Color(86, 144, 153));
        }
        if (panel.getName().equals("x=1, y=0")) {
            panel.setBackground(new Color(122, 74, 57));
        }
        if (panel.getName().equals("x=2, y=0")) {
            panel.setBackground(new Color(182, 85, 24));
        }

        //--------------------------------------------------- 

        if (panel.getName().equals("x=0, y=1")) {
            panel.setBackground(new Color(87, 81, 123));
        }
        if (panel.getName().equals("x=1, y=1")) {
            panel.setBackground(new Color(132, 53, 73));
        }
        if (panel.getName().equals("x=2, y=1")) {
            panel.setBackground(new Color(72, 107, 96));
        }

        //--------------------------------------------------

        if (panel.getName().equals("x=0, y=2")) {
            panel.setBackground(new Color(82, 75, 38));
        }
        if (panel.getName().equals("x=1, y=2")) {
            panel.setBackground(new Color(138, 105, 124));
        }
        if (panel.getName().equals("x=2, y=2")) {
            panel.setBackground(new Color(180, 148, 0));
        }

        //--------------------------------------------------
    }

    public void mouseExited(MouseEvent e) {
        ((JPanel) e.getSource()).setBackground(new Color(237, 237, 237));
    }

    @Override
    public void dragEnter(DropTargetDragEvent dtde) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void dragOver(DropTargetDragEvent dtde) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void dropActionChanged(DropTargetDragEvent dtde) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void dragExit(DropTargetEvent dte) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void drop(DropTargetDropEvent dtde) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
 
Zurück