Cloned Panel

C

cdvr

I am stuck....and I am sure it is simple. Basically I have a
panel that has some stuff in it. I want to have another panel (kind
of an overview) that shows everything in the main panel.

So I have something like:
mainPanel = new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
Rectangle r = mainPanel.getBounds();
BufferedImage bi = new BufferedImage(r.width,
r.height, BufferedImage.TYPE_INT_ARGB);
Graphics biG = bi.createGraphics();
super.paint(biG);
myP.setImage(bi);
}
};


public static class MyPanel extends JPanel {
private BufferedImage bi;

public MyPanel() {
this.bi = new BufferedImage(1, 1,
BufferedImage.TYPE_INT_ARGB);
}

public void setImage(BufferedImage bi) {
System.out.println("...new image");
this.bi = bi;
this.repaint();
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("bi: " + bi.getWidth() + ", " +
bi.getHeight());
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(bi, 0, 0, bi.getWidth(), bi.getHeight(),
null);
}

myP = new MyPanel();


so mainPanel has all the stuff, and myP should show it as well....but
it's not working.

any ideas?
 
S

Sideswipe

MVC -- Model View Controller

Each panel has the same "Model" behind it. In this case, a simple
image. What you could do is create your own subclass of JPanel, create
N instances (main panel and secondary, tertiary, etc.). In the
constuctor of your JPanel add 'this' to a static list of peers. Now,
override paint (which you are doing already) and then when it's
called, invoke the paint() method on all other PEER panels (excluding
the original caller panel -- create a private method like:
paint(Graphics g,JPanel skip) paint(g,this);

Now, you have access, as a subclass, to the listenerList. Find the
correct listener for paint event, roll your own that tells peer-panels
to refresh, then add it to the existing list. That would be a way to
integrate it with the existing listener model.

Either way, listen for the change and notify all other panels of the
change.

if you found this useful, please, rate the article in google.

Christian Bongiorno
http://christian.bongiorno.org
 
R

Roedy Green

I am stuck....and I am sure it is simple. Basically I have a
panel that has some stuff in it. I want to have another panel (kind
of an overview) that shows everything in the main panel.

Your problem is not clear. Why not just display your panel "that has
some stuff in it" as many times as you please?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,982
Messages
2,570,190
Members
46,736
Latest member
zacharyharris

Latest Threads

Top