Avatar billede mummikiks Nybegynder
24. september 2005 - 21:16 Der er 1 kommentar og
1 løsning

Flytning af labels (Swing)

Hej Experter

Udfra forskellige tråde herinde har jeg sammensat koden, som kan findes på www.control.aau.dk/~ksno04

Der er to pakker. GUI og openfile

Meningen med applikationen er at man kan hente et billede ind som baggrund (virker dint) Herefter skal man vedhælpe af knappen i højre side tilføje nye labels. Disse labels skal efter de er tilføjet kunne trækkes rundt.

Jeg har brugt koden fra følgende tråd til at flytte rundt på labels:
http://www.eksperten.dk/spm/648681

Problemet er nu, hvor jeg har ændret strukturen, kan jeg ikke få koden til at virke. Det er muligvis bar en reference eller sådan noget. Jeg har bøvlet med det en uge nu og kan ikke få det til at hjælpe. Håber virkelig I kan hjælpe mig
Avatar billede _carsten Nybegynder
25. september 2005 - 10:26 #1
Har studeret det lidt groft og lavet følgende rettelser/tilføjelser i newDevice.

Labels kan flyttes nu, så mon det ikke det kan kaldes et svar.



package GUI;
import java.awt.Font;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.*;

public class newDevice extends JLabel{

public JPanel jPanel1;
public int labelX;
public int labelY;

public int xforskydning;
public int yforskydning;

public int pressed_x;
public int pressed_y;

public int dragged_x;
public int dragged_y;

public int labelSizeX;
public int labelSizeY;
public Font labelFont;
public boolean skaler;


//Tilføjet, kunne måske have brugt nogle dine ting, men valgte
// at tilføje, gør det måske nemmere for dig at følge

private java.awt.Point labelPos, mouseP ;
private double  oldPosX, oldPosY,
                mouseFirstX, mouseFirstY,
                mouseNowX, mouseNowY;


    public newDevice(int count){

        labelFont = new Font(null, Font.PLAIN, 22);
        skaler = false;
          labelX = 152;
        labelY = 84;
        labelSizeX = 60;
        labelSizeY = 30;


        setFont(getFont());
        this.setText("Ny device");
        setBounds(this.labelX, this.labelY, this.labelSizeX, this.labelSizeY);



        this.addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent evt) {
                  Rectangle r = getBounds();
                    labelX = (int)r.getX();
                    labelY = (int)r.getY();
                    System.out.println(labelX);
                    System.out.println(labelY);
                    if(skaler)
                        {
                        labelSizeX = (int)r.getWidth();
                        labelSizeY = (int)r.getHeight();
                        labelFont = getFont();
                        }

                    skaler = false;
            }
            public void mousePressed(MouseEvent evt) {
                pressed_x = evt.getX();
                pressed_y = evt.getY();

                  if(evt.getClickCount() == 2)
                      skaler = true;

                  xforskydning = (labelX - evt.getX());
                  yforskydning = (labelY - evt.getY());
            }
            public void mouseExited(MouseEvent evt) {}
            public void mouseEntered(MouseEvent evt) {}
            public void mouseClicked(MouseEvent evt) {}
        });



                // ÆNDRET
        this.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseMoved(MouseEvent evt) {
                //inst.setTitle(evt.getX() + "," + evt.getY());
            }
            public void mouseDragged(MouseEvent evt) {
                drag(evt);
            }
        });
    }


        // METODE TILFØJET
    private void drag(MouseEvent evt){
        mouseP = evt.getPoint();
        labelPos = getLocation();

        if(skaler){
            mouseFirstX = mouseP.getX();
            mouseFirstY = mouseP.getY();
        }
        mouseNowX = mouseP.getX();
        mouseNowY = mouseP.getY();

        oldPosX = labelPos.getX();
        oldPosY = labelPos.getY();

        setLocation((int)((oldPosX + mouseNowX) - mouseFirstX - pressed_x),
            (int)((oldPosY + mouseNowY) - mouseFirstY - pressed_y) );
    }

}
Avatar billede mummikiks Nybegynder
25. september 2005 - 21:24 #2
Skide godt. Det virker perfekt!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester