Drag and Drop Workbench

kiCk_mAsTer

Mitglied
Liebe Community,

Ich wollte fragen, ob es möglich ist, in Java etwas zu programmieren, wo man Attribute in einer Workbench setzen kann (Buttons, Eingabefelder). Ich möchte einen WYSIWYG Editor programmieren.
Ich möchte, dass es möglich ist, Buttons einfach in das Hauptpanel zu ziehen und dort einfach die Größe und Position dieser zu verändern. Ist das möglich? Wenn ja, könntet ihr mir vielleicht ein bisschen genauer erläutern WIE?
 
Ich möchte, dass es möglich ist, Buttons einfach in das Hauptpanel zu ziehen und dort einfach die Größe und Position dieser zu verändern. Ist das möglich? Wenn ja, könntet ihr mir vielleicht ein bisschen genauer erläutern WIE?

Ja, das ist möglich, wobei das hinzufügen und ändern von Components während der Laufzeit ein bißchen Sorgfalt erfordert. Du musst hierzu mit MouseListern und MouseMotionListenern arbeiten. Vielleicht mal ein paar Beispiele (quick and dirty). Ich habe ein JPanel dem ich einen MouseListener und einen MouseMotionListener hinzufüge:

Java:
ml = new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                if (e.getSource() instanceof JButton) {
                    
                } else {
                    addComponent(e.getPoint().getLocation());
                }
            }

            @Override
            public void mousePressed(MouseEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                selectedComponent = null;
                posOld = null;
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");
            }

            @Override
            public void mouseExited(MouseEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");
            }

            @Override
            public void mouseDragged(MouseEvent e) {
                super.mouseDragged(e);
                if (e.getSource() instanceof JButton){
                    selectedComponent = (Component) e.getSource();
                }
                if ((selectedComponent != null) && (posOld != null)){
                    moveComponent(selectedComponent,posOld, e.getLocationOnScreen());
                }
                posOld = e.getLocationOnScreen();
            }

            @Override
            public void mouseMoved(MouseEvent e) {
                super.mouseMoved(e);
            }

        };

        this.getContentPane().addMouseListener(ml);
        this.getContentPane().addMouseMotionListener(ml);


Folgende Methode fügt bei Click einen JButton hinzu:

Java:
private void addComponent(Point pos) {
        JButton newComp = new JButton();
        newComp.setBounds(pos.x, pos.y, 50, 25);
        newComp.addMouseListener(ml);
        newComp.addMouseMotionListener(ml);
        this.getContentPane().add(newComp);
        pack();
    }

Folgende Methode verschiebt den JButton

Java:
private void moveComponent(Component comp, Point oldLoc, Point newLoc){
        int dX = newLoc.x - oldLoc.x;
        int dY = newLoc.y - oldLoc.y;
        int x = comp.getLocation().x + dX;
        int y = comp.getLocation().y + dY;
        comp.setLocation(x, y);

    }

Bei der Übergabe von einem Panel in ein anderes wird es natürlich komplexer.
 

Neue Themen


Zurück
Oben