0

非常に簡単な例があります。これを計画したより複雑なプログラムに適用する前に、作業を開始しようとしています。しかし、フローまたは垂直レイアウトにある JPanels をドラッグ アンド ドロップできるようにしようとしています。

これは私がこれまで扱ったことのないものであるため、どこから始めればよいかわかりません。しかし、私が調査したことから、クリックをリッスンするリスナーが各 JPanel に確実に必要であるように思われます。ここから、mousePressed から初期データを収集し、オーバーライドされた を実行repaint()して、コンテナー内のパネルの座標を更新します。次に、座標が配置されている場所に応じて、 repack() し、うまくいけばパネルのサイズを変更します。

私は正しい軌道に乗っていますか?

import java.awt.FlowLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;


public class DraggablePanels extends JFrame {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    Border raisedbevel = BorderFactory.createRaisedBevelBorder();
    int px, py;
    JPanel main = new JPanel();

    public DraggablePanels(){
        this.setLayout(new FlowLayout());
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setResizable(false);

        JPanel p1 = new JPanel();
        p1.addMouseListener(new MouseListener(){
            @Override
            public void mousePressed(MouseEvent e) {
                // TODO Auto-generated method stub
                px = e.getX();
                py = e.getY();
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseEntered(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseClicked(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseExited(MouseEvent e) {
                // TODO Auto-generated method stub

            }
        });
        p1.setBorder(raisedbevel);
        JPanel p2 = new JPanel();

        p2.addMouseListener(new MouseListener(){
            @Override
            public void mousePressed(MouseEvent e) {
                // TODO Auto-generated method stub
                px = e.getX();
                py = e.getY();
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseEntered(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseClicked(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseExited(MouseEvent e) {
                // TODO Auto-generated method stub

            }
        });
        p2.setBorder(raisedbevel);
        p1.add(new JLabel("Thing 1"));
        p2.add(new JLabel("Thing 2"));

        main.add(p1);
        main.add(p2);

        add(main);
        pack();
        setVisible(true);
    }

    public static void main (String args[]){
        DraggablePanels d = new DraggablePanels();
    }

}
4

1 に答える 1