JPanels vergleichen

  • Themenstarter Themenstarter Matthias86
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
M

Matthias86

Gast
Hallo,
ich möchte in meinem java programm sowas ähnliches wie eine drag and drop funktion realisieren, ich habe auch schon eine idee wie ich das machen kann nur funktionier meine if-Bedingung nicht so wie sie sollte. Das ganze sieht so aus, ich habe mehrere panel deren kinder am anfang unsichtbar sind. wenn nun ein panel gedraggt wird und auf einer splitpane released wird, sollen die kinder des panels sichtbar werden. dafür speicher ich das panel beim draggen in eiener variablen und mache dann beim mousereleased eine überprüfung. das ganze sieht so aus:
Code:
private void jPanel13MouseDragged(java.awt.event.MouseEvent evt) {
    draggedPanel = evt.getComponent();
}

private void jSplitPane3MouseReleased(java.awt.event.MouseEvent evt) {
   if(draggedPanel.equals(jPanel13)){
       bpmButtonTrigger = !bpmButtonTrigger;
       jButton3.setVisible(bpmButtonTrigger);
       bpmTrigger = !bpmTrigger;
       jPanel15.setVisible(bpmTrigger);
   }
}

wie gesagt funktioniert es nicht und ich denke dass es an der bedingung liegt. bin mir aber auch nicht sicher wie man panels auf gleichheit überprüfen kann. danke schon mal für die hilfe.
Gruß Matthias
 
Ich hab jetzt festgestellt, dass es nicht an der if Bedingung liegt, vielmehr wird das MouseReleased nicht erkannt. Kann mir jemand dabei weiterhelfen?
 
Zeig doch bitte etwas mehr Code. 😉 Und daneben guckst du dir noch mal die Definitionen von Schnittstelle und Signatur an.

Ark
 
Wir können das lösen mit DragGestureListener und DropTarget. Beispiel:
Code:
/*
 * DndTest.java
 *
 */

import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import javax.swing.*;

public class DndTest extends JFrame implements DragGestureListener {

    private JPanel jPanel1, jPanel2, jPanel3, dragged;
    private JSplitPane jSplitPane1;
    private JButton bt2, bt3;

    public DndTest() {
        super("DndTest");
        initComponents();
        DragSource dragSource = DragSource.getDefaultDragSource();
        dragSource.createDefaultDragGestureRecognizer(jPanel2,
                DnDConstants.ACTION_MOVE, this);
        dragSource.createDefaultDragGestureRecognizer(jPanel3,
                DnDConstants.ACTION_MOVE, this);
        jSplitPane1.setDropTarget(new DropTarget() {

            @Override
            public synchronized void drop(DropTargetDropEvent dtde) {
                int x = (int) dtde.getLocation().getX();
                int d = jSplitPane1.getDividerLocation();
                JComponent parent = (JComponent) dragged.getParent();
                parent.remove(dragged);
                parent.revalidate();
                parent.repaint();
                if(dragged == jPanel2){
                    bt2.setVisible(true);
                }else{
                    bt3.setVisible(true);
                }
                if (x < d) {
                    jSplitPane1.setLeftComponent(dragged);
                } else {
                    jSplitPane1.setRightComponent(dragged);
                }
                super.drop(dtde);
            }
        });
    }

    private void initComponents() {
        jPanel1 = new JPanel();
        jPanel2 = new JPanel();
        jPanel3 = new JPanel();
        jSplitPane1 = new JSplitPane();
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jPanel1.setBackground(new Color(255, 0, 0));
        jPanel1.setPreferredSize(new Dimension(0, 150));
        jPanel2.setBackground(new Color(255, 255, 0));
        jPanel2.setPreferredSize(new Dimension(120, 120));
        jPanel2.addMouseListener(new MouseAdapter() {

            @Override
            public void mousePressed(MouseEvent evt) {
                dragged = jPanel2;
            }
        });
        jPanel1.add(jPanel2);
        jPanel3.setBackground(new Color(0, 0, 255));
        jPanel3.setPreferredSize(new Dimension(120, 120));
        jPanel3.addMouseListener(new MouseAdapter() {

            @Override
            public void mousePressed(MouseEvent evt) {
                dragged = jPanel3;
            }
        });
        jPanel1.add(jPanel3);
        bt2 = new JButton("bt2");
        bt2.setVisible(false);
        jPanel2.add(bt2);
        bt3 = new JButton("bt3");
        bt3.setVisible(false);
        jPanel3.add(bt3);
        getContentPane().add(jPanel1, BorderLayout.PAGE_START);
        getContentPane().add(jSplitPane1, BorderLayout.CENTER);
        setSize(400, 300);
        setLocationRelativeTo(null);
    }

    public void dragGestureRecognized(DragGestureEvent event) {
        event.startDrag(null, new StringSelection(""), null);
    }

    public static void main(final String[] args) {
        Runnable gui = new Runnable() {

            public void run() {
                new DndTest().setVisible(true);
            }
        };
        //GUI must start on EventDispatchThread:
        SwingUtilities.invokeLater(gui);
    }
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben