• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 381
  • Last Modified:

Muliple panels

TestFigurePanel  below creates three panels.

I want

1. Pane 2 and Panel 3 to remain blank. Only Panel 1 is to have the graphics.
2. I can close them one at a time. As it is now, when I close one, all three closes.


Could you please help me with these items?
import javax.swing.*;
import java.awt.*;

public class TestFigurePanel extends JFrame{
    public TestFigurePanel (){
        setLayout(new GridLayout(2,3,5,5));
        add(new FigurePanel(FigurePanel.LINE));
        add(new FigurePanel(FigurePanel.RECTANGLE));
        add(new FigurePanel(FigurePanel.ROUND_RECTANGLE));
        add(new FigurePanel(FigurePanel.OVAL));
        add(new FigurePanel(FigurePanel.RECTANGLE,true));
        add(new FigurePanel(FigurePanel.ROUND_RECTANGLE,true));
    }
    
    public static void main(String[] args){
        TestFigurePanel frame1=new TestFigurePanel();
        TestFigurePanel frame2=new TestFigurePanel();
        TestFigurePanel frame3=new TestFigurePanel();
        
        frame1.setSize(400,200);
        frame2.setSize(400,200);
        frame3.setSize(400,200);
        
        frame1.setTitle("Panel 1");
        frame2.setTitle("Panel 2");
        frame3.setTitle("Panel 3");
        
        frame1.setLocation(20,300);
        frame2.setLocation(440,300);
        frame3.setLocation(860,300);
        
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        frame1.setVisible(true);
        frame2.setVisible(true);
        frame3.setVisible(true);
        
    }
}

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

 public class FigurePanel extends JPanel {

    public static final int LINE=1;
    public static final int RECTANGLE=2;
    public static final int ROUND_RECTANGLE=3;
    public static final int OVAL=4;

    private int type=1;
    private boolean filled = false;


    public FigurePanel(){
    }


    public FigurePanel(int type){
        this.type=type;
    }


    public FigurePanel(int type, boolean filled){
        this.type=type;
        this.filled=filled;
    }


    protected void paintComponent(Graphics g){
//        super.printComponent(g);


        int width=getWidth();
        int height=getHeight();

        switch(type){
            case LINE:
                g.setColor(Color.BLACK);
                g.drawLine(10, 10, width -10, height-10);
                g.drawLine(width-10, 10, 10, height-10);
                break;
            case RECTANGLE:
                g.setColor(Color.BLUE);
                if(filled)
                    g.fillRect((int)(0.1*width), (int)(0.1*height),
                      (int)(0.8*width), (int)(0.8*height));
                else
                  g.drawRect((int)(0.1*width),(int)(0.1*height),
                    (int)(0.8*width),(int)(0.8*height));
                break;
            case ROUND_RECTANGLE:
                g.setColor(Color.RED);
                if(filled)
                    g.fillRoundRect((int)(0.1*width), (int)(0.1*height),
                      (int)(0.8*width), (int)(0.8*height), 20, 20);
                else
                  g.drawRoundRect((int)(0.1*width),(int)(0.1*height),
                    (int)(0.8*width),(int)(0.8*height),20,20);
                break;
            case OVAL:
                g.setColor(Color.BLACK);
                if(filled)
                    g.fillOval((int)(0.1*width), (int)(0.1*height),
                      (int)(0.8*width), (int)(0.8*height));
                else
                  g.drawOval((int)(0.1*width),(int)(0.1*height),
                    (int)(0.8*width),(int)(0.8*height));
        }
    }


    public void setType(int type){
        this.type=type;
        repaint();
    }


    public int getType(){
        return type;
    }


    public void setFilled(boolean filled){
        this.filled=filled;
        repaint();
    }


    public boolean isfilled() {
        return filled;
    }


    public Dimension getPreferredSize() {
        return new Dimension(80,80);
    }
}

Open in new window

0
Mike Eghtebas
Asked:
Mike Eghtebas
  • 3
  • 2
1 Solution
 
evedderCommented:
for the first one you can set your add's inside an if and pass a parameter to your constructor, so you can control when FigurePanel draw the figures or not, something like this
//mode true= figures, mode false= no figures
  public TestFigurePanel (boolean mode){
        setLayout(new GridLayout(2,3,5,5));
       if(mode){
         add(new FigurePanel(FigurePanel.LINE));
         add(new FigurePanel(FigurePanel.RECTANGLE));
         add(new FigurePanel(FigurePanel.ROUND_RECTANGLE));
         add(new FigurePanel(FigurePanel.OVAL));
         add(new FigurePanel(FigurePanel.RECTANGLE,true));
         add(new FigurePanel(FigurePanel.ROUND_RECTANGLE,true));
      }
    }

TestFigurePanel frame1=new TestFigurePanel();
        TestFigurePanel frame2=new TestFigurePanel();
        TestFigurePanel frame3=new TestFigurePanel();
0
 
evedderCommented:
for the second, i dont see anything wrong :S i have to check it out
0
 
Mike EghtebasDatabase and Application DeveloperAuthor Commented:
               |             |              |
    LINE     |    Oval   |              |  
                |             |              |
------------------------------------
                |             |              |
                |  Rect     |              |        <-- panel 1
                |             |              |
------------------------------------
                |             |              |
    LINE     |             |              |  
                |             |              |
------------------------------------

All three panel are going to have some shape in them. If you could, add Line, Oval, and Rect as shown for Panel 1.

And, also add some (into few cells in) Panels 2 and 3.

This way I will exactly see how it is done. I wonder if you could do this.

Thank you,

0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
Mike EghtebasDatabase and Application DeveloperAuthor Commented:
All three panel are going to have some shape in them eventually...
0
 
for_yanCommented:
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.ArrayList;

public class TestFigurePanel extends JFrame  {
    public TestFigurePanel(ArrayList<Integer> select){
        Container c = this.getContentPane();

        c.setLayout(new GridLayout(2,3,5,5));
        JPanel [] pps = new JPanel[6];
        for(int j=0; j<6; j++)pps[j] = new JPanel();
        if(select.contains(0))c.add(new FigurePanel(FigurePanel.LINE));
        else   c.add(pps[0]);
        if(select.contains(1)) c.add(new FigurePanel(FigurePanel.RECTANGLE));
              else   c.add(pps[1]);
         if(select.contains(2))c.add(new FigurePanel(FigurePanel.ROUND_RECTANGLE));
         else   c.add(pps[2]);
        if(select.contains(3)) c.add(new FigurePanel(FigurePanel.OVAL));
         else   c.add(pps[3]);
        if(select.contains(4)) c.add(new FigurePanel(FigurePanel.RECTANGLE,true));
         else   c.add(pps[4]);
        if(select.contains(5))c.add(new FigurePanel(FigurePanel.ROUND_RECTANGLE,true));
         else   c.add(pps[5]);
      
    }
   
    public static void main(String[] args){

        ArrayList <Integer>a1 = new ArrayList<Integer>();
          ArrayList <Integer>a2 = new ArrayList<Integer>();
          ArrayList <Integer>a3 = new ArrayList<Integer>();
        a1.add(0);
        a1.add(3);
        a1.add(5);

           a2.add(1);
        a2.add(2);
        a2.add(3);


           a3.add(0);

        a3.add(2);

            

        TestFigurePanel frame1=new TestFigurePanel(a1);
        TestFigurePanel frame2=new TestFigurePanel(a2);
        TestFigurePanel frame3=new TestFigurePanel(a3);



        frame1.setSize(400,200);
        frame2.setSize(400,200);
        frame3.setSize(400,200);

        frame1.setTitle("Panel 1");
        frame2.setTitle("Panel 2");
        frame3.setTitle("Panel 3");

        frame1.setLocation(20,300);
        frame2.setLocation(440,300);
        frame3.setLocation(860,300);

       // frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       // frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       // frame3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame1.setVisible(true);
        frame2.setVisible(true);
        frame3.setVisible(true);

    }
}


  class FigurePanel extends JPanel {

    public static final int LINE=1;
    public static final int RECTANGLE=2;
    public static final int ROUND_RECTANGLE=3;
    public static final int OVAL=4;

    private int type=1;
    private boolean filled = false;


    public FigurePanel(){
    }


    public FigurePanel(int type){
        this.type=type;
    }


    public FigurePanel(int type, boolean filled){
        this.type=type;
        this.filled=filled;
    }


    protected void paintComponent(Graphics g){
//        super.printComponent(g);


        int width=getWidth();
        int height=getHeight();

        switch(type){
            case LINE:
                g.setColor(Color.BLACK);
                g.drawLine(10, 10, width -10, height-10);
                g.drawLine(width-10, 10, 10, height-10);
                break;
            case RECTANGLE:
                g.setColor(Color.BLUE);
                if(filled)
                    g.fillRect((int)(0.1*width), (int)(0.1*height),
                      (int)(0.8*width), (int)(0.8*height));
                else
                  g.drawRect((int)(0.1*width),(int)(0.1*height),
                    (int)(0.8*width),(int)(0.8*height));
                break;
            case ROUND_RECTANGLE:
                g.setColor(Color.RED);
                if(filled)
                    g.fillRoundRect((int)(0.1*width), (int)(0.1*height),
                      (int)(0.8*width), (int)(0.8*height), 20, 20);
                else
                  g.drawRoundRect((int)(0.1*width),(int)(0.1*height),
                    (int)(0.8*width),(int)(0.8*height),20,20);
                break;
            case OVAL:
                g.setColor(Color.BLACK);
                if(filled)
                    g.fillOval((int)(0.1*width), (int)(0.1*height),
                      (int)(0.8*width), (int)(0.8*height));
                else
                  g.drawOval((int)(0.1*width),(int)(0.1*height),
                    (int)(0.8*width),(int)(0.8*height));
        }
    }


    public void setType(int type){
        this.type=type;
        repaint();
    }


    public int getType(){
        return type;
    }


    public void setFilled(boolean filled){
        this.filled=filled;
        repaint();
    }


    public boolean isfilled() {
        return filled;
    }


    public Dimension getPreferredSize() {
        return new Dimension(80,80);
    }
}

Open in new window

0
 
Mike EghtebasDatabase and Application DeveloperAuthor Commented:
Thank you
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now