Mike Eghtebas
asked on
Code revision...
Class TestFigurePanel below, opens three panels.
A. As it is they are 2x3, 2x3, and 2x3 grids.
  I want to change them to 2x2, 3x3, and 1x1 grids.
B. 2x2 to have DashedOval and Hexagon on the first row and
           Arc and filled Hexagon on the second row.
C. 2x3 to have Line, Oval, and blank on the first row and
           Oval, blank, and Oval on the second row.
           Line, Line, and Line on the third row.
D. 1x1 Grid to have an Octagon.
The class FigurePanel below doesn't have DashedOval, Hexagon, and Octagon. We need to add them to this class.
If there are too many to do, I guess leave C out because I think I can make this part by learning the other parts you possibly will do.
Thank you.
A. As it is they are 2x3, 2x3, and 2x3 grids.
  I want to change them to 2x2, 3x3, and 1x1 grids.
B. 2x2 to have DashedOval and Hexagon on the first row and
           Arc and filled Hexagon on the second row.
C. 2x3 to have Line, Oval, and blank on the first row and
           Oval, blank, and Oval on the second row.
           Line, Line, and Line on the third row.
D. 1x1 Grid to have an Octagon.
The class FigurePanel below doesn't have DashedOval, Hexagon, and Octagon. We need to add them to this class.
If there are too many to do, I guess leave C out because I think I can make this part by learning the other parts you possibly will do.
Thank you.
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);
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Hi for_yan,
There is a followup question on mouse x, y earlier at:
https://www.experts-exchange.com/questions/27386533/x-y-at-mouse-click-point.html
I will be checking your solution on this thread.
Thank you
There is a followup question on mouse x, y earlier at:
https://www.experts-exchange.com/questions/27386533/x-y-at-mouse-click-point.html
I will be checking your solution on this thread.
Thank you
I posted the solution there:
https://www.experts-exchange.com/questions/27386533/x-y-at-mouse-click-point.html
ASKER
Thank you
OK, this is it.
Below id the old code commented out
Open in new window