Swing Drag and Drop mit Objekten in einem Fenster.

compuwurml

Mitglied
Hallo liebes Forum,

ich und ein Freund versuchen für unser Koreanistik Studium einen Vokabeltrainer zu programmieren, der uns in Zukunft beim lernen helfen soll. Dazu haben wir uns (wahrscheinlich zu schnell) durch die Java Insel gelesen und stoßen dabei auf ein Problem.

Wir haben uns zuerst eine Klasse geschrieben, welche eine Vokabelkarte als Objekt beschreibt. Darunter verschiedene Instanz Variablen für Wort, Übersetzung, Merksatz, Redewendung usw. usf. Als Oberfläche benutzen wir Swing. Bislang ist alles wenig spektakulär, man wird nach dem Wort gefragt und wenn man das richtig eintippt (oder auch falsch) werden eben Dinge wie der Merksatz etc. angezeigt.

Nun dauert es aber zu lange die Wörter immer in eine Textbox zu schreiben und das ganze dann mit Button zu bestätigen.

Wir haben daher überlegt, dass man quasi eine Art Feld haben soll , in der mehrere Kreise (oder auch Rechteckte) aufploppen in der jeweils eine Vokabel steht. In der Mitte die Übersetzung, und links und Rechts am Rand jeweils verschiedene Vokabeln welche zutreffen könnten. Die außenstehenden Vokabeln soll man dann auf den mitteleren Kreis ziehen können um den Programm sein Ergebnis mitzuteilen.

Wir haben leider nur überhaupt keine Ahnung, ob man sowas mit Swing realisieren kann und was genau dafür in Frage kommen könnte.

Hat da jemand eine Idee?

Lg
 
Zuletzt bearbeitet:

André Uhres

Top Contributor
Hallo compuwurml,

willkommen bei java-forum.org.

Ich würde einfach eine JList nehmen für die Vokabeln und ein JLabel für die Übersetzung. Wenn man dann eine Vokabel auswählt, kann gleich das Ergebnis angezeigt werden. Das geht einfacher und schneller als mit dem umständlichen Drag&Drop.

Gruß,
André
 

compuwurml

Mitglied
Ok Danke für den Vorschlag. Allerdings würde ich gerne erstmal meine Idee umsetzen. Einfach davon abzulassen ist generell unbefriedigend ;) ...

Hat vielleicht noch jemand eine Idee wie sich das ganze mit dem Drag and Drop realisieren lassen würde? So schwierig kann das ja nicht zu implementieren sein(?).

Lg
 

GUI-Programmer

Top Contributor
OK, dann ist alles klar.
Mein Vorschlag:
Die unübersetzte Vokabel und die Übersetztungsvorschläge in Form von JLabels darstellen. All diese liegen auf ein JPanel mit NullLayout, auch wenn man das so gut wie nie verwenden sollte, würde es sich ausnahmsweise mal anbieten. Das JLabel in der mitte würde ich z.b. mit lblUnuebersetzt bennen (Variablennamen). Die Anderen JLabels werden in einer ArrayList<JLabel> abgespeichert. Falls du keine feste Anzahl an Übersetzungsvorschläge hast solltest du die ArrayList (und das JPanel) jedesmal leeren und mit den neuen JLabels, die die Vorschläge repräsentieren, befüllen.
Natürlich braucht jedes deiner äuseren JLabels einen Mouse- und einen MouseMotionListener. Der theoretische Teil:

Wenn der Benutzer nun auf eines der äuseren JLabel klickt (die Maus geklickt hält), kann er es auf das mittlere ziehen (per mouseDragged()). Wenn nun der Text des JLabels mit der Übersetzung übereinstimmt, dann ist alles in Ordnung und die nächste Vokabel kann angezeigt werden. Möglicher Ablauf wenn dem nicht so ist: Das JLabel bewegt sich beim loslassen der Maus wieder auf seine Ausgansposition zurück.

Beispiele zu Drag & Drop gibts ja genug (z.B hier im Forum)!
 

GUI-Programmer

Top Contributor
Hier noch nen kleines (!!!) Test-Applet:
Java:
import java.awt.Color;
import javax.swing.UIManager;

public class Mein_JApplet01 extends javax.swing.JApplet {
    private javax.swing.JMenuBar mBar_Menueleiste;
    private javax.swing.JMenu m_datei;
    private javax.swing.JMenu m_bearbeiten;
    private javax.swing.JMenu m_einstellungen;
    private javax.swing.JMenu m_hilfe;
    private javax.swing.JMenuItem mItem_dateiDrucken;
    private javax.swing.JMenuItem mItem_dateiOeffnen;
    private javax.swing.JMenuItem mItem_dateiSchliessen;
    private javax.swing.JMenuItem mItem_dateiSpeichern;
    private javax.swing.JToolBar ToolBar01;
    private javax.swing.JTextField tf_textfeld01;
    private javax.swing.JButton b_Knopf01;
    private javax.swing.JLabel lab_bild01;
    private javax.swing.JLabel lab_audiLogo;
    
    int h=100;
    
    boolean
    bildAngeklickt=false;
    
    
    
    public void init() {
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); }
                    catch(Exception ex) { }
                    initComponents();
                    setSize(800,600);
                    //addMouseMotionListener(new MausBewegung(Mein_JApplet01.this));
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private void initComponents() {

        /** Initialisierung der Komponenten: */
        mBar_Menueleiste = new javax.swing.JMenuBar();
        m_datei = new javax.swing.JMenu();
        m_bearbeiten = new javax.swing.JMenu();
        m_einstellungen = new javax.swing.JMenu();
        m_hilfe = new javax.swing.JMenu();
        mItem_dateiOeffnen = new javax.swing.JMenuItem();
        mItem_dateiSpeichern = new javax.swing.JMenuItem();
        mItem_dateiDrucken = new javax.swing.JMenuItem();
        mItem_dateiSchliessen = new javax.swing.JMenuItem();
        ToolBar01 = new javax.swing.JToolBar();
        tf_textfeld01 = new javax.swing.JTextField();
        b_Knopf01 = new javax.swing.JButton();
        lab_bild01 = new javax.swing.JLabel();
        lab_audiLogo = new javax.swing.JLabel();
        
        int
        width=getContentPane().getWidth(),
        height=getContentPane().getHeight();
        
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                formMousePressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                formMouseReleased(evt);
            }
        });
        
        addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseDragged(java.awt.event.MouseEvent evt) {
                formMouseDragged(evt);
            }
            public void mouseMoved(java.awt.event.MouseEvent evt) {
                formMouseMoved(evt);
            }
        });

        getContentPane().setLayout(null);
        getContentPane().setBackground(java.awt.Color.lightGray);
        
        /** Die Menüleiste: */
        //Die Menüleiste (an sich):
        mBar_Menueleiste.setInheritsPopupMenu(true);
        mBar_Menueleiste.add(m_datei);
           ///Das Menü Datei:
            m_datei.setText("Datei");
            m_datei.add(mItem_dateiSpeichern);
               ///Das Menüitem Datei speichern:
                mItem_dateiSpeichern.setText("Datei speichern");
            m_datei.add(mItem_dateiOeffnen);
               ///Das Menüitem Datei öffnen:
                mItem_dateiOeffnen.setText("Datei öffnen");
                mItem_dateiOeffnen.addActionListener(new java.awt.event.ActionListener() {
                    public void actionPerformed(java.awt.event.ActionEvent evt) {
                        mItem_dateiOeffnenActionPerformed(evt);
                    }
                });
            m_datei.add(mItem_dateiDrucken);
               ///Das Menüitem Datei drucken:
                mItem_dateiDrucken.setText("Datei drucken");
            m_datei.add(mItem_dateiSchliessen);
               ///Das Menüitem Datei schließen:
                mItem_dateiSchliessen.setText("Datei schließen");
                
        mBar_Menueleiste.add(m_bearbeiten);
           ///Das Menü Bearbeiten:
            m_bearbeiten.setText("Bearbeiten");
            
        mBar_Menueleiste.add(m_einstellungen);
           ///Das Menü Einstellungen:
            m_einstellungen.setText("Einstellungen");
            
        mBar_Menueleiste.add(m_hilfe);
           ///Das Menü Hilfe:
            m_hilfe.setText("Hilfe");
        
        setJMenuBar(mBar_Menueleiste);

        /** Die ToolBar: */
        ToolBar01.setBackground(new java.awt.Color(188, 245, 225));
        ToolBar01.setRollover(true);
        getContentPane().add(ToolBar01);
        ToolBar01.setBounds(0, 0, 884, 25);
        
        /** Das Textfeld */
        tf_textfeld01.setText("Textfeld01");
        tf_textfeld01.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tf_textfeld01ActionPerformed(evt);
            }
        });
        getContentPane().add(tf_textfeld01);
        tf_textfeld01.setBounds(134, 38, 100, 25);
        
        /** Der Knopf: */
        b_Knopf01.setText("Knopf01");
        b_Knopf01.setBorderPainted(false);
        b_Knopf01.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                b_Knopf01ActionPerformed(evt);
            }
        });
        getContentPane().add(b_Knopf01);
        b_Knopf01.setBounds(260, 340, 79, 25);
        
        /** Das Label des 1.Bildes */
        getContentPane().add(lab_bild01);
        lab_bild01.setOpaque(true);
        lab_bild01.setBackground(Color.RED);
        lab_bild01.setBounds(500, 340, 85, 52);
        lab_bild01.setVisible(true);
        
    }

    private void tf_textfeld01ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }                                        

    private void mItem_dateiOeffnenActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // TODO add your handling code here:
    }
    
    private void b_Knopf01ActionPerformed(java.awt.event.ActionEvent evt) {
        boolean bol;
        bol=true;
        if(bol) {
            m_datei.setText("DATEI");
            showStatus("Datei wurde zu DATEI");
            bol=false;
        }    
    }
    
    private void formMousePressed(java.awt.event.MouseEvent evt) {
        int mausX = evt.getX();
        int mausY = evt.getY()-25;
        double labX = lab_bild01.getBounds().getX();
        double labY = lab_bild01.getBounds().getY();
        int labW = lab_bild01.getWidth();
        int labH = lab_bild01.getHeight();
        if((mausX>=labX)&&(mausX<=labX+lab_bild01.getWidth())
          &&(mausY>=labY)&&(mausY<=labY+lab_bild01.getHeight())) {
              bildAngeklickt=true;
        }
    }
    
    private void formMouseReleased(java.awt.event.MouseEvent evt) {
        bildAngeklickt=false;
    }
    
    private void formMouseMoved(java.awt.event.MouseEvent evt) {
        showStatus("Position des Bildes:  ("+lab_bild01.getBounds().getX()+"|"+lab_bild01.getBounds().getY()+")");
    }
    
    private void formMouseDragged(java.awt.event.MouseEvent evt) {
        int mausX = evt.getX();
        int mausY = evt.getY()-15;
        double labX = lab_bild01.getBounds().getX();
        double labY = lab_bild01.getBounds().getY();
        int labW = lab_bild01.getWidth();
        int labH = lab_bild01.getHeight();
        boolean bol;
        bol=true;
        if(bildAngeklickt==true) {
            showStatus("Das Bild wird bewegt (per DRAG & DROP)");
            lab_bild01.setBounds(mausX-(labW/2), mausY-(labH/2)-10, labW, labH);
        }  
    }
}
 

compuwurml

Mitglied
Vielen Dank! Die ganze Schreibarbeit hättest du dir aber wirklich nicht machen brauchen. Das wird uns sicher zum Verständnis weiterhelfen :) !

Liebe Grüße

compuwurml
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Drag and Drop von eigenen Objekten AWT, Swing, JavaFX & SWT 3
T Drag&Drop mit Objekten! Grundsätzlich. AWT, Swing, JavaFX & SWT 3
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
AmsananKING ListView Drag And Drop AWT, Swing, JavaFX & SWT 0
AmsananKING Drag And Drop Filenames Inside A Listview AWT, Swing, JavaFX & SWT 1
DonBronson Java Graphics bewegbar machen (Drag&Drop) AWT, Swing, JavaFX & SWT 3
M Polygon per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 26
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
N Drag and Drop Fenster AWT, Swing, JavaFX & SWT 11
F Drag&Drop mit Transparenter Farbe bei PNG AWT, Swing, JavaFX & SWT 0
D JavaFX Pane per Drag&Drop bewegen? AWT, Swing, JavaFX & SWT 2
L JavaFX Drag and Drop funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
T Swing Drag and Drop für JComponents AWT, Swing, JavaFX & SWT 1
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
F Drag und Drop AWT, Swing, JavaFX & SWT 0
L JavaFX JavaFX Chart Drag and Drop AWT, Swing, JavaFX & SWT 3
D JavaFX Drag&Drop mehrerer TreeViews oder TableViews AWT, Swing, JavaFX & SWT 1
P Drag & Drop zwischen Panels AWT, Swing, JavaFX & SWT 0
U Drag and Drop mit imageview AWT, Swing, JavaFX & SWT 0
U Drag and Drop imageviews AWT, Swing, JavaFX & SWT 8
D SteelSeries in Netbeans als Drag-and-Drop einbinden AWT, Swing, JavaFX & SWT 0
C JTable Drag and Drop von Zeilen innerhalb einer Table AWT, Swing, JavaFX & SWT 2
S Swing Update eine JTabelle nach einer Drag&Drop Operation AWT, Swing, JavaFX & SWT 0
S Swing Suche Drag & Drop Beispiele AWT, Swing, JavaFX & SWT 1
A Drag and Drop mit JAVAFX- Scenebuilder AWT, Swing, JavaFX & SWT 1
R Performance Drag and Drop & Timer AWT, Swing, JavaFX & SWT 3
R Drag and Drop Problem auf Jpanel AWT, Swing, JavaFX & SWT 2
N Swing JTable und Drag und Drop AWT, Swing, JavaFX & SWT 2
A Drag and Drop eigener Objekte AWT, Swing, JavaFX & SWT 7
C Drag and Drop (inventar) AWT, Swing, JavaFX & SWT 15
F Swing Drag and Drop in JTree aus verschiedenen Listen AWT, Swing, JavaFX & SWT 6
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
Iron Monkey JFileChooser - Drag and Drop AWT, Swing, JavaFX & SWT 5
Iron Monkey Nach Drag & Drop die Datei auf Komponent darstellen AWT, Swing, JavaFX & SWT 2
M AWT Drag n Drop-Support für Component AWT, Swing, JavaFX & SWT 5
HaukeG Swing Drag & Drop in verschiedenen Varianten AWT, Swing, JavaFX & SWT 4
S Swing Drag&Drop mit TransferHandler und JPanels AWT, Swing, JavaFX & SWT 8
C Swing Simulation von Drag and Drop Events AWT, Swing, JavaFX & SWT 3
H Swing "Drag and Drop" eines JComponent über ein JPanel AWT, Swing, JavaFX & SWT 2
R Drag 'n Drop AWT, Swing, JavaFX & SWT 3
S Selektion bei Drag&Drop AWT, Swing, JavaFX & SWT 4
T SWT Drag&Drop: Eclipse FileTransfer mit Icons AWT, Swing, JavaFX & SWT 14
F Drag & Drop durch Verbindungslinien AWT, Swing, JavaFX & SWT 10
T Swing Drag and Drop - JLabels tauschen statt überschreiben AWT, Swing, JavaFX & SWT 11
S Drag and Drop über 2 Panels AWT, Swing, JavaFX & SWT 2
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
B Drag and Drop AWT, Swing, JavaFX & SWT 6
K Drag and Drop Workbench AWT, Swing, JavaFX & SWT 2
P SWT Eclipse Draw2D Drag and Drop (ruckelt) AWT, Swing, JavaFX & SWT 4
F SWT Drag and Drop im TreeViewer AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop mit Feedback (Image am Mauszeiger) AWT, Swing, JavaFX & SWT 7
Spin JFrame/ Frame Drag and Drop AWT, Swing, JavaFX & SWT 13
A TransferHandler & Drag n' Drop AWT, Swing, JavaFX & SWT 2
R Drag an Drop JTable Zelle AWT, Swing, JavaFX & SWT 6
D Drag & Drop - node.isRoot AWT, Swing, JavaFX & SWT 3
E Swing Drag n Drop Verschieben von Labels o.ä. AWT, Swing, JavaFX & SWT 10
E Swing Beim Drag & Drop, Drag verbieten?! AWT, Swing, JavaFX & SWT 2
E JTree Autoscroll bei Drag and Drop AWT, Swing, JavaFX & SWT 4
F Swing Problem mit Drag&Drop in JTable AWT, Swing, JavaFX & SWT 4
C keine weiteren Events während Drag&Drop Operation möglich? AWT, Swing, JavaFX & SWT 5
E Drag&Drop zwischen 2 Listen AWT, Swing, JavaFX & SWT 5
0 Swing Drag n' Drop Bug wenn Source und Target gleiche Komponente? AWT, Swing, JavaFX & SWT 4
C Drag and Drop JPanel auf JPanel nach drop erneut verschieben? AWT, Swing, JavaFX & SWT 3
M Swing JTable Drag'n'Drop von Dateien AWT, Swing, JavaFX & SWT 3
M Drag and Drop: Quellfenster AWT, Swing, JavaFX & SWT 2
M Buttons per Drag & Drop im GridBagLayout verschieben AWT, Swing, JavaFX & SWT 6
M Swing JList > Drag & Drop AWT, Swing, JavaFX & SWT 2
C Drag an Drop vom JTree zur JTable AWT, Swing, JavaFX & SWT 4
Z Drag and Drop auf Application AWT, Swing, JavaFX & SWT 3
G Drag and Drop JTree to Canvas AWT, Swing, JavaFX & SWT 7
H Drag&Drop von JComponents AWT, Swing, JavaFX & SWT 6
G JTable drag and drop AWT, Swing, JavaFX & SWT 4
H Drag&Drop mit GWT AWT, Swing, JavaFX & SWT 8
B Swing Drag&Drop einzelner Zellen in einer JTable AWT, Swing, JavaFX & SWT 12
A Swing Drag and Drop TreeNode User Object AWT, Swing, JavaFX & SWT 3
P JList: Reihenfolge der Elemente per Drag'n'Drop ändern. AWT, Swing, JavaFX & SWT 9
K Swing Wie ändere ich die default action für Drag&Drop AWT, Swing, JavaFX & SWT 6
R JLayeredPane - Drag&Drop - mouseDragged AWT, Swing, JavaFX & SWT 6
C JTable mit RowSorter und Drag & Drop: Zeile verschieben AWT, Swing, JavaFX & SWT 4
V SWT TreeViewer Drag'n'Drop LocalSelectionTransfer AWT, Swing, JavaFX & SWT 10
R Swing JLayeredPane - Drag&Drop Positionen vertauschen AWT, Swing, JavaFX & SWT 3
F Drag & Drop mit eigenen Komponenten AWT, Swing, JavaFX & SWT 2
B SWT - Drag & Drop innerhalb einer Table AWT, Swing, JavaFX & SWT 3
S Drag'n'Drop AWT, Swing, JavaFX & SWT 8
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
M Drag & Drop in Swing (createTransferable) AWT, Swing, JavaFX & SWT 6
T Drag Quelle beim Drop AWT, Swing, JavaFX & SWT 6
A Drag & Drop von Zeilen innerhalb einer Tabelle AWT, Swing, JavaFX & SWT 2
E Drag & Drop von jTree in JList AWT, Swing, JavaFX & SWT 5
P Dateien per Drag&Drop ins Java-Fenster ziehen AWT, Swing, JavaFX & SWT 8
G JTree Node ggf. aufklappen bei Drag & Drop? AWT, Swing, JavaFX & SWT 7
J Drag'n Drop imm selben Frame unterbinden AWT, Swing, JavaFX & SWT 3
S Table Row per Drag and Drop in andere Table schieben? AWT, Swing, JavaFX & SWT 14
X wiedermal Drag n Drop AWT, Swing, JavaFX & SWT 2
P Drag & Drop AWT, Swing, JavaFX & SWT 2
X Drag and Drop AWT, Swing, JavaFX & SWT 2
F Drag&Drop Jlist -> JList AWT, Swing, JavaFX & SWT 3
G Drag and Drop mal wieder? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben