Avatar billede mikkelmc Nybegynder
16. september 2005 - 20:11 Der er 2 kommentarer

Omstrukturering af appliktion

Hej eksperter!!

Er i gang med at lave en gui og ville gerne kunne flytte iconer i form at labels rundt på en pane. Jeg har fundet nederstående kode som også fungerer fint(for sig selv). Problemet er bare at jeg ikke kan få koden til fungere sammen med resten af GUI'en. Så jeg ville gerne hvis der var nogen der kunne omstrukturerer denne kode så den nemt kan implementeres i en GUI bestående af flere panes og andre objekter. Det er så tanken at disse icons kan flyttes rundt på én af disse panes. Det er vigtigt at kunne tilføje og fjerne disse labels løbende.


Håber I kan hjælpe

mvh

Mikkel




Kode til flytning af labels: 

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

class FlytLabel extends JFrame implements MouseListener, MouseMotionListener
{
    JLabel label;
    int labelX;
    int labelY;
    int labelSizeX;
    int labelSizeY;
 
    int xforskydning;//hvor på label'en trykker du i fht pressed_x,pressed_y
    int yforskydning;

    int pressed_x;//hvor presser du musetasten ned
    int pressed_y;

    int dragged_x;//hvor trækker du musen
    int dragged_y;
 
    boolean skaler;
    Font labelFont;
 
    public FlytLabel()
    {
        labelFont = new Font(null, Font.PLAIN, 22);
        skaler = false;
    setSize(500,500);

    labelX =230;
    labelY = 230;
    labelSizeX = 50;
    labelSizeY = 20;
     
    label = new JLabel("Label", JLabel.CENTER);
    label.setFont(label.getFont());
    label.setBounds(labelX,labelY,labelSizeX,labelSizeY);
 
    getContentPane().add(label);
 
        addMouseListener(this);
        addMouseMotionListener(this);
    getContentPane().setLayout(null);
    }

    public void mouseDragged(MouseEvent e)
    {
        if(pressed_x > labelX && pressed_x < (labelX + labelSizeX + 5))
        {
            if(pressed_y > labelY && pressed_y <(labelY + labelSizeY + 23))
            {
                if(skaler)
                {
                    Font temp = new Font(null, Font.PLAIN, labelFont.getSize()+(((e.getX()-pressed_x)/3)));
                label.setFont(temp);
                label.setBounds(labelX, labelY,labelSizeX + (e.getX()-pressed_x),labelSizeY + (e.getY() - pressed_x));
                }
            else
                {
                label.setBounds((e.getX() + xforskydning),(e.getY() + yforskydning),labelSizeX,labelSizeY);
                }
            }
        }
    }
  public void mouseClicked(MouseEvent e)
  {
  }
  public void mousePressed(MouseEvent e)
  {
      pressed_x = e.getX();
      pressed_y = e.getY();
   
      if(e.getClickCount() == 2)
          skaler = true;

      xforskydning = (labelX - e.getX());
        yforskydning = (labelY - e.getY());
    }

  public void mouseMoved(MouseEvent e)
  {
      setTitle(e.getX() + "," + e.getY());
    }
    public void mouseReleased(MouseEvent e)
    {
        Rectangle r = label.getBounds();
    labelX = (int)r.getX();
    labelY = (int)r.getY();
 
    if(skaler)
        {
        labelSizeX = (int)r.getWidth();
        labelSizeY = (int)r.getHeight();
        labelFont = label.getFont();
        }
 
    skaler = false;
    }
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}

    public static void main(String args[])
    {
        FlytLabel gui = new FlytLabel();
        gui.setVisible(true);
    }//main

}//class
Avatar billede mummikiks Nybegynder
18. september 2005 - 21:46 #1
Er det virkelig ikke nogen der kan hjælpe Mikkel??
Avatar billede snoop_one Nybegynder
18. september 2005 - 22:38 #2
Jo, jeg vil nok forslå at du ændre den ovenstående kode således at der bliver nedarvet fra JPanel fremfor JFrame.
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