Avatar billede odsgaard Praktikant
08. februar 2012 - 22:15 Der er 3 kommentarer og
1 løsning

Gentegne JPanel ved tryk på JButton

Hej eksperter

Jeg er ved at eksperimentere lidt med JPanel og vil lave et lille program, hvor jeg gentegner et panel.

programmet tegner en cirkel hver gang jeg trykker på en knap - jeg vil gerne have, at den 'resetter' panelet, så det ser ud som om cirklen bliver større. Hvad er det jeg mangler at gøre?

Jeg kan også se, at min JButton bliver tegnet igen i øverste højre hjørne af vinduet - hvorfor gør den det - og hvordan kan jeg forhindre dette?

På forhånd tak
Brian



Kode til  mit lille program:

********** START KLASSE **********

import javax.swing.JFrame;

public class Start {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        CirkelPanel cPanel = new CirkelPanel();
        frame.add(cPanel);

        KnapPanel kPanel = new KnapPanel(cPanel);
        frame.add(kPanel);

        // Placering på skræmen
        frame.setLocation(300, 200);

        // Størrelsen på vinduet
        frame.setSize(800, 600);

        frame.setVisible(true);

********** CIRKEL PANEL **********

import java.awt.Graphics;

import javax.swing.JPanel;

public class CirkelPanel extends JPanel {
    private int r = 5;
    private int x = 100;
    private int y = 100;

    public CirkelPanel() {
        this.setSize(200, 200);
    }

    public void paintComponent(Graphics g) {
        g.drawOval(x-r, y-r, r * 2, r * 2);
    }

    public void setRadius(int i) {
        this.r = i;
    }

    public int getRadius() {
        return r;
    }
}

********** KNAP PANEL **********

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;

public class KnapPanel extends JPanel {
    private JButton btn;
    private CirkelPanel panel;

    public KnapPanel(CirkelPanel panel) {
        this.panel = panel;
        this.setSize(200, 200);
        btn = new JButton("Tryk");
        this.add(btn);
        btn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                øgCirkel();
            }

        });

    }

    private void øgCirkel() {
        panel.setRadius(panel.getRadius() + 5);
        panel.repaint();
    }
}

    }
}
Avatar billede arne_v Ekspert
09. februar 2012 - 03:34 #1
Swing's veje kan vaere uransagelige.

Men efter at have tilfoejt layout managers og aendret panel.repaint() til panel.getParent().repaint() saa virker det hos mig.
Avatar billede odsgaard Praktikant
03. marts 2012 - 21:06 #2
Hej Arne

Endnu en gang har du hjulpet mig på rette spor, så smid et svar og du kan få dine velfortjente point :)

/Brian
Avatar billede arne_v Ekspert
03. marts 2012 - 21:13 #3
svar
Avatar billede arne_v Ekspert
03. marts 2012 - 21:13 #4
Hvis du eksperimenterer med Java GUI, saa kunne du overveje at kigge paa JavaFX.
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