Avatar billede pblv Nybegynder
12. august 2003 - 11:34 Der er 16 kommentarer og
1 løsning

Flytte rundt på et JPanel

Heysa.

Jeg har oprettet et JPanel, som jeg bruger som baggrund. Inde i dette JPanel, skal jeg tilføje nogle andre JPanels, som hver i sær indeholdeholder noget data, et billede osv.
Disse "Under" JPanels, dem skal jeg kunne flytte rundt i det store JPanel, men det kan jeg ikke lige få til at virke.
SetLocation virker åbenbart ikke på et JPanel, selvom funktionen findes.

HJÆLP! :)
Avatar billede pblv Nybegynder
12. august 2003 - 12:51 #1
Eller er det noget andet jeg kan bruge i stedet for et Panel? Det behøver nemlig ikke være et panel, bare det er en ting, der kan holde styr på nogle andre elementer, som er placeret i forhold til hinanden inden i den, og derfor flytter med, når man flytter på "panelet".
Avatar billede pblv Nybegynder
12. august 2003 - 15:03 #2
Så må vi smidde nogle flere point i puljen, hvis det er det der skal til :)
Avatar billede _carsten Nybegynder
12. august 2003 - 16:33 #3
Hvad mener du med at "flytte panelet" ?

Hvorfor vil du flytte panelet ?

Jeg kan ikke lige finde ud af hvad det er vi arbejder hen imod!
Avatar billede pblv Nybegynder
13. august 2003 - 08:25 #4
Det er meningen, at hvert "panel" skal repræsenterer en fodboldspiller, dvs indeholde et lille billede, et tal, et navn osv. Disse spillere, skal man så kunne flytte rundt på banen, sådan drag and drop agtigt.

Pierre
Avatar billede _carsten Nybegynder
13. august 2003 - 08:53 #5
Det var lige det jeg frygtede, så det eneste jeg kan gøre for at
hjælpe dig videre, er følgende 2 link, men de gør det nok ikke alene.

http://java.sun.com/docs/books/tutorial/uiswing/components/applet.html
TubleItem.java kan måske give lidt inspiration

Drag and Drop
http://java.sun.com/products/jfc/tsc/articles/dragndrop/index.html#adding_d_n_d
Avatar billede _carsten Nybegynder
13. august 2003 - 08:57 #6
Sludder - TumbleItem.java
Avatar billede pblv Nybegynder
13. august 2003 - 09:55 #7
Hmmm... der må vel være nogen der har prøvet at lave f.eks. en værktøjslinie, som dem i windows, som man kan flytte rundt på i f.eks. word?
Men tak for indsatsen Carsten.

Pierre
Avatar billede _carsten Nybegynder
13. august 2003 - 10:10 #8
En værktøjslinie er ikke det store problem, men jeg tvivler på den
er anvendelig i din situation

http://java.sun.com/docs/books/tutorial/uiswing/components/toolbar.html
Avatar billede pblv Nybegynder
13. august 2003 - 10:25 #9
Hmmmm, næææ... Jeg havde håbet på nogen måske selv havde lavet en... men det ville jo være tåbeligt, når nu den allerede findes :)
Avatar billede _carsten Nybegynder
13. august 2003 - 10:43 #10
Så lykkedes det vist alligevel at finde noget du kan bruge

http://java.sun.com/docs/books/tutorial/2d/display/user.html

Hent ShapeMover.java og kompiler den.
Den applet som ligger der, virker ikke, så du skal selv lave html-delen
Avatar billede _carsten Nybegynder
13. august 2003 - 10:49 #11
Hov - lidt længere nede i teksten finder du SwingShapeMover.java
Det er lige den du skal have fat i !
Avatar billede pblv Nybegynder
13. august 2003 - 13:23 #12
Hmmm... ja.. Det ser fornuftigt ud. Men problemet er, at det er jo ikke panelet man trækker rundt på vel? Men en firkant, der skal holdes inden for panelet?
Hvis jeg så skal have 22 spillere (paneler) på banen, så giver det vel et problem??
Avatar billede _carsten Nybegynder
13. august 2003 - 14:18 #13
Det burde det egentlig ikke - skal prøve at kigge på det senere på dagen
Avatar billede pblv Nybegynder
15. august 2003 - 10:22 #14
lukket
Avatar billede _carsten Nybegynder
16. august 2003 - 20:45 #15
Da du lukkede spørgsmålet, besluttede jeg egentlig ikke at gøre mere ved sagen, men da jeg ikke holdt hvad jeg lovede, nemlig at vende tilbage
senere på dagen, så for du alligevel en løsning her.

Løsningen består af 2 classer, 'Stadion' og 'Field', kompiler først 'Field'
derefter 'Stadion', køres fra 'Stadion'
I bunden af classen 'Field' skal du indsætte stien til en spiller fra
hvert hold - spillerne kan flyttes med musen.

Sorry - det tog lidt tid!


public class Stadion extends javax.swing.JFrame {
   
    public Stadion() {
        initComponents();

        b = new javadone.drawing.Field();
        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
       
        jPanel1.setLayout(new java.awt.GridLayout(15,1));
           
        jButton1.setText("<html>Sæt hold 1<br>på banen</html>");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                b.team1OnField();
                b.repaint();
                jButton1.setEnabled(false);
                jButton1.setForeground(java.awt.Color.GRAY);
            }
        });
        jPanel1.add(jButton1,0);

        jPanel1.setSize(jButton1.getWidth() ,this.getHeight() - 2);
       
        jButton2.setText("<html>Sæt hold 2<br>på banen</html>");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                b.team2OnField();
                b.repaint();
                jButton2.setEnabled(false);
                jButton2.setForeground(java.awt.Color.GRAY);
            }
        });
        jPanel1.add(jButton2,1);

        getContentPane().add(jPanel1, java.awt.BorderLayout.WEST);
        getContentPane().add(b);
        setExtendedState(MAXIMIZED_BOTH);       
        show();
        b.repaint();
    }
   
    private void initComponents() {
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });
    }
 
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
   
    public java.awt.Insets getInsets(){
        return new java.awt.Insets(30,4,4,4);
    }
   
    public static void main(String args[]) {
        new Stadion();
    }
   
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JPanel jPanel1;   
    Field b;
}







public class Field extends javax.swing.JPanel {
   
    public Field() {
        initComponents();
    }
   

    private void initComponents() {

        setLayout(null);

        setBorder(new javax.swing.border.LineBorder(
                            new java.awt.Color(255, 255, 255), 5));
    }
   
    public void team1OnField(){
        for(int i = 0;i < team1.length;i++){
            team1[i] = new javax.swing.JLabel(Integer.toString(i + 1),
                                            image,
                                            javax.swing.JLabel.CENTER);
            team1[i].setVerticalTextPosition(javax.swing.JLabel.BOTTOM);
            team1[i].setHorizontalTextPosition(javax.swing.JLabel.CENTER);
            team1[i].setForeground(new java.awt.Color(255, 255, 0));

            team1[i].addMouseListener(new java.awt.event.MouseAdapter() {
                public void mousePressed(java.awt.event.MouseEvent evt) {
                    first = true;
                    drag(evt);
                }
            });
            team1[i].addMouseMotionListener(
                              new java.awt.event.MouseMotionAdapter() {
                public void mouseDragged(java.awt.event.MouseEvent evt) {
                    drag(evt);
                }
            });
           
            team1[i].setBounds(x, 10, image.getIconWidth(),
                                        image.getIconHeight()+15 );
            this.add(team1[i]);
            x += image.getIconWidth();
        }
        x = 5;
    }
       
   
    public void team2OnField(){
        for(int i = 0;i < team2.length;i++){
            team2[i] = new javax.swing.JLabel(Integer.toString(i + 1),
                                            image2,
                                            javax.swing.JLabel.CENTER);
            team2[i].setVerticalTextPosition(javax.swing.JLabel.BOTTOM);
            team2[i].setHorizontalTextPosition(javax.swing.JLabel.CENTER);
            team2[i].setForeground(new java.awt.Color(255, 255, 0));

            team2[i].addMouseListener(new java.awt.event.MouseAdapter() {
                public void mousePressed(java.awt.event.MouseEvent evt) {
                    first = true;
                    drag(evt);
                }
            });
            team2[i].addMouseMotionListener(
                                    new java.awt.event.MouseMotionAdapter() {
                public void mouseDragged(java.awt.event.MouseEvent evt) {
                    drag(evt);
                }
            });
           
            team2[i].setBounds(x1,
                              this.getHeight() - image2.getIconHeight() - 30,
                              image2.getIconWidth(),
                              image2.getIconHeight() + 15);
            this.add(team2[i]);
            x1 += image2.getIconHeight();
        }
        x1 = 5;
    }
       
 
    private void drag(java.awt.event.MouseEvent evt){
        Object obj = evt.getSource();
        aktivLabel = (javax.swing.JLabel)obj;
       
        mouseP = evt.getPoint();
        p = aktivLabel.getLocation();

            if(first){
                mfX = mouseP.getX();
                mfY = mouseP.getY();
            }
            mX = mouseP.getX();
            mY = mouseP.getY();

            pX = p.getX();
            pY = p.getY();
     
        aktivLabel.setLocation((int)((pX + mX) - mfX),
                                    (int)((pY + mY) - mfY) );
        first = false;
    }
   
    public void paintComponent(java.awt.Graphics g){
       
      if(offscreen == null) {
            offscreen = (java.awt.image.BufferedImage)createImage(
                                                        this.getWidth(),
                                                        this.getHeight());
            g2d = offscreen.createGraphics();
            g2d.setBackground(java.awt.Color.GREEN);
      }
     
        g.drawImage(offscreen, 0, 0, this);
        g.setColor(new java.awt.Color(0,153,0));
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
       
        g.setColor(java.awt.Color.WHITE);
        g.fillRect(0,this.getHeight()/2,this.getWidth() , 2);
        g.fillOval(this.getWidth()/2 -3, this.getHeight()/2 -3, 7, 7);
        g.drawOval(this.getWidth()/2 -75, this.getHeight()/2 -75,
                                                        150,150);
        g.drawRect(this.getWidth()/2 -175, 0, 350, 125);
        g.drawRect(this.getWidth()/2 -80, 0, 160, 50);
        g.drawRect(this.getWidth()/2 -175, this.getHeight() -125,
                                            350, this.getHeight());
        g.drawRect(this.getWidth()/2 -80, this.getHeight()-50,
                                        160, this.getHeight());
    }

    private java.awt.Point p, mouseP;
    private javax.swing.JLabel[] team1 = new javax.swing.JLabel[11];
    private javax.swing.JLabel[] team2 = new javax.swing.JLabel[11];
    private int x = 5, x1 = 5;
    private double  pX, pY, mX, mY, mfX, mfY;
    private javax.swing.JLabel aktivLabel;
    private boolean first = false;
    private java.awt.image.BufferedImage offscreen;
    private java.awt.Graphics2D g2d;
    private javax.swing.ImageIcon image2 =
                        new javax.swing.ImageIcon("STIEN TIL HOLD 2");
    private javax.swing.ImageIcon image =
                        new javax.swing.ImageIcon("STIEN TIL HOLD 1");
}
Avatar billede _carsten Nybegynder
17. august 2003 - 16:57 #16
Kan du bruge det ???
Avatar billede pblv Nybegynder
18. august 2003 - 12:55 #17
Hej Carsten,

Beklager jeg ikke har svaret, men ejg har ikke været ved en computer. Grunden til at jeg lukkede emnet, var at jeg valgte at droppe det og lave noget andet.
Ellers tak for hjælpen.

Pierre
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