package com.frinika.midi; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import javax.swing.JPanel; import com.frinika.sequencer.gui.pianoroll.VirtualPianoVert; public class DrumMapperPanel extends JPanel { /** * */ private static final long serialVersionUID = 1L; VirtualPianoVert inPiano; VirtualPianoVert outPiano; OverLay overlay; DrumMapper dm; DrumMapperPanel(VirtualPianoVert inPiano, VirtualPianoVert outPiano, DrumMapper dm) { this.dm = dm; this.inPiano = inPiano; this.outPiano = outPiano; overlay = new OverLay(); setLayout(null);// new OverlayLayout(this)); add(inPiano); add(outPiano); add(overlay); inPiano.setLocation(0,0); inPiano.setSize(inPiano.getPreferredSize()); // setMap.setLocation(50,0); // setMap.setSize(setMap.getPreferredSize()); outPiano.setLocation(100,0); outPiano.setSize(outPiano.getPreferredSize()); overlay.setLocation(0,0); overlay.setSize(new Dimension(200,1000)); //TODO work pout the real size setComponentZOrder(overlay,0); // setComponentZOrder(setMap,1); setComponentZOrder(inPiano,1); setComponentZOrder(outPiano,2); // addComponentListener(this); } public Dimension getPreferredSize() { return new Dimension(inPiano.getPreferredSize()); } class OverLay extends JPanel { OverLay() { setOpaque(false); } public void paintComponent(Graphics g) { super.paintComponent(g); Point inO = inPiano.getLocation(); Point outO = outPiano.getLocation(); g.setColor(Color.GREEN); for (int i = 0; i < 128; i++) { DrumMapper.NoteMap nm = dm.getNoteMap(i); int j=nm.note; if ( j== i) continue; VirtualPianoVert.Key inKey = inPiano.getKey(i); VirtualPianoVert.Key outKey = outPiano.getKey(j); int x1 = inO.x + inKey.x + inKey.width / 2; int y1 = inO.y + inKey.y + inKey.height / 2; int x2 = outO.x + outKey.x + outKey.width / 2; int y2 = outO.y + outKey.y + outKey.height / 2; g.drawLine(x1, y1, x2, y2); } } } }