0

画像を移動できるコードがあります。すべてがうまく機能します。

ここでは、フレームに ImagePanel (JPanel の子) が 1 つだけあります。

質問:

  1. ある JPanel から別の JPanel に画像をドラッグ アンド ドロップ する必要があります。
  2. 次に、ドラッグした画像を現在のパネルに移動する必要があります。

サンプルコードを教えてください。

class ImagePanel extends JPanel {
    int x, y;
        BufferedImage image;

        ImagePanel() {
                setBackground(Color.white);
                setSize(450, 400);
                addMouseMotionListener(new MouseMotionHandler());

                Image img = getToolkit().getImage("C:\\2.png");

                MediaTracker mt = new MediaTracker(this);
                mt.addImage(img, 1);
                try {
                        mt.waitForAll();
                } catch (Exception e) {
                        System.out.println("Image not found.");
                }
                image = new BufferedImage(img.getWidth(this), img.getHeight(this),BufferedImage.TYPE_INT_ARGB);
                Graphics2D g2 = image.createGraphics();
                g2.drawImage(img, 0, 0, this);
        }

        public void paintComponent(Graphics g) {
                super.paintComponent(g);
                Graphics2D g2D = (Graphics2D) g;
                g2D.drawImage(image, x, y, this);
        }

        class MouseMotionHandler extends MouseMotionAdapter {
                public void mouseDragged(MouseEvent e) {
                        x = e.getX();
                        y = e.getY();
                        repaint();
                }

                public void mouseMoved(MouseEvent e) {
                    
                }
        }
}

この次の設計で、そのコードを実行する必要があります。いくつかのレイアウトで画像を追加する必要があります (ポイント ピクセルでこれを行う必要はありません)。または、いくつかのレイアウトで画像を追加する方法は? たとえば、グリッドバッグのレイアウト。ポイント(x、y)は必要ありません。別のコンポーネントも追加する必要があるためです。

public class DragAndDrop {
     
    private JFrame frame;        
        /* .. another component here .. */
    
    private JPanel leftPanel;  // here is my image
    public JPanel rightContentPanel; // destination of dragable image

 
    public static void main(String[] args) {              
        DragAndDrop window = new DragAndDrop();
             
    }


    public DragAndDrop() {
        initialize();
    }


    private void initialize() {
        frame = new JFrame();
        frame.getContentPane().setLayout(new BorderLayout(0, 0));
                
        leftPanel = new leftPanel();
        /* add components to left panel */

     
        rightContentPanel =  new rightPanel();
        /* add component to right panel */
        
         
         
        
        frame.getContentPane().add(rightContentPanel, BorderLayout.CENTER);
                frame.getContentPane().add(leftPanel, BorderLayout.WEST);
        
            frame.setVisible(true);
            frame.setResizable(false);
    }
} 

class leftPanel extends JPanel {
    / ... /
}

class rightPanel extends JPanel{
    / ... / 
}
4

1 に答える 1