Avatar billede nickl87 Nybegynder
25. maj 2007 - 21:08 Der er 2 kommentarer og
1 løsning

Repaint() af JPanel

Hej

Jeg er igang med at lave en gui til et fremtidigt program, men er løbet ind i nogle små problemer. Jeg ved ikke hvordan man opdatere et JPanel. Til at illustrere har jeg lavet følgende legetøjsprogram:

Main.java:

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

public class Main {
   
    public static JFrame f = new JFrame("This is a test");

    public static void main(String[] args) {
    //JFrame f = new JFrame("This is a test");
    f.setSize(400, 400);
    f.setBackground(Color.white);
    f.setLayout(new BorderLayout());

    f.add(new Frame1(true), BorderLayout.NORTH);
    f.add(new Frame2(), BorderLayout.CENTER);
   
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
}

Frame1.java:

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

public class Frame1 extends JPanel {

    private boolean test;

    public Frame1(boolean t) {
    test = t;

    if(test == false) {
        this.setSize(400, 400);
        this.setBackground(Color.BLACK);
        this.setLayout(new FlowLayout());
       
        this.add(new JButton("Button 1"));
        this.add(new JButton("Button 2"));
    } else {
        this.setSize(400, 400);
        this.setBackground(Color.BLACK);
        this.setLayout(new FlowLayout());
       
        this.add(new JLabel("Cooooooooool"));
    }
    }
}

Frame2.java:

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

public class Frame2 extends JPanel {
    public Frame2() {
    this.setSize(400, 400);
    this.setBackground(Color.white);
    this.setLayout(new FlowLayout());

    JButton b = new JButton("shift");
    this.add(new JButton("Button 1"));

    b.addActionListener(new
                ActionListener()
        {
        public void actionPerformed(ActionEvent event)
        {
            Main m = new Main();
           
            Frame f = m.f;
           
            f.add(new Frame1(false), BorderLayout.NORTH);
            f.repaint();
        }
        });
    }
}

Jeg ønsker nu at når jeg trykker på knappen i Frame2.java, så skal der oprettes et nyt objekt i main, hvor konstruktøren får værdien false, men af en eller anden grund bliver Main aldrig opdateret, hvorfor? Er sikkert en lille misforståelse :)

mvh.
NickL87
Avatar billede mikkelbm Nybegynder
27. maj 2007 - 00:34 #1
Prøv at lav din Main om til:

public class Main {
 
    public JFrame f;

    public static void main(String[] args) {
      new Main();   
    }

    public Main()
    {
        f = new JFrame("This is a test");
        f.setSize(400, 400);
        f.setBackground(Color.white);
        f.setLayout(new BorderLayout());

        f.add(new Frame1(true), BorderLayout.NORTH);
        f.add(new Frame2(), BorderLayout.CENTER);
 
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}
Avatar billede nickl87 Nybegynder
27. maj 2007 - 10:11 #2
Har jeg lige gjort og virker stadigvæk ikke, ændringen burde jo egentlig heller ikke gøre den store forskel burde den?
Avatar billede nickl87 Nybegynder
27. august 2007 - 11:06 #3
lukket
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