Cloned Panel

Discussion in 'Java' started by cdvr, Jul 11, 2007.

  1. cdvr

    cdvr Guest

    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?
    cdvr, Jul 11, 2007
    #1
    1. Advertising

  2. cdvr

    Sideswipe Guest

    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



    On Jul 11, 5:15 am, cdvr <> wrote:
    > 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?
    Sideswipe, Jul 12, 2007
    #2
    1. Advertising

  3. cdvr

    Roedy Green Guest

    On Wed, 11 Jul 2007 12:15:05 -0000, cdvr <> wrote,
    quoted or indirectly quoted someone who said :

    > 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?

    --
    Roedy Green Canadian Mind Products
    The Java Glossary
    http://mindprod.com
    Roedy Green, Jul 12, 2007
    #3
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    11
    Views:
    931
    Oliver Wong
    Apr 26, 2006
  2. CP
    Replies:
    1
    Views:
    126
    Curt_C [MVP]
    Sep 11, 2003
  3. Jeff
    Replies:
    6
    Views:
    196
  4. sonic
    Replies:
    6
    Views:
    136
Loading...

Share This Page