Repaint() af JPanel
HejJeg 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