I'm going to keep it simple. I need to be able to outlined the perimeter of each shape when its respective JComboBox spot is selected. For instance, if I select "rectangle" from the drop down menu, I want to be able to have all the shapes on the canvas but with rectangle either outlined or filled with a different color. I got three shapes total. Here is the code. Currently, if I select a shape from the drop down menu, one shape shows at the time except for the option "All" where all the shapes show but I did that on purpose.
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class testing{
public static void main(String[] args){
JFrame frame = new JFrame("Moving Shapes");
Container content = frame.getContentPane();
content.add(new fun());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
class fun extends JPanel{
shape[] shapeList;
private int count =0;
private JComboBox<String> shapeNames;
public fun(){
setLayout(new BorderLayout());
setBackground(Color.white);
setPreferredSize(new Dimension (300, 200));
JPanel combo = new JPanel();
shapeNames = new JComboBox<String>(new String[] { "Rectangle", "Circle", "Round Rect", "All" });
shapeNames.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
repaint();
}
});
combo.add(shapeNames);
add(BorderLayout.SOUTH, combo);
shapeList = new shape[3];
oval i = new oval();
rect u =new rect();
roundrect x = new roundrect();
addShape(u);
addShape(i);
addShape(x);
}
public void addShape(shape q){
if(count<3){
shapeList[(count++)] = q;
}
}
public void paintComponent(Graphics g){
String option = (String) shapeNames.getSelectedItem();
if(option.equals("Rectangle")){
selection();
shapeList[0].paintComponent(g);
}
if(option.equals("Circle")){
selection();
shapeList[1].paintComponent(g);
}
if(option.equals("Round Rect")){
selection();
shapeList[2].paintComponent(g);
}
if(option.equals("All")){
for(int i=0; i<count; i++){
shapeList[i].paintComponent(g);
}
}
}
public void selection(){
if (shapeList != null)
for (int i = 0; i < count; i++)
if ((shapeList[i] instanceof shape)) {
shape m1 = (shape)shapeList[i];
m1.select(false);
}
}
}
abstract class shape extends JPanel{
protected boolean selecting = false;
public void paintComponent(Graphics g){}
public void select(boolean selected){
selecting= selected;
}
}
class oval extends shape{
protected boolean selecting = false;
private int x=30, y=30, h=90, w=90;
public void paintComponent(Graphics g){
super.paintComponent(g);
if(selecting){
g.setColor(Color.black);
g.drawOval(x,y,h,w);
g.setColor(Color.magenta);
g.fillOval(x,y,h,w);
}else{
g.setColor(Color.red);
g.fillOval(x,y,h,w);
}
}
}
class rect extends shape{
protected boolean selecting = false;
private int x=20, y=20, h=240, w=130;
public void paintComponent(Graphics g){
super.paintComponent(g);
if(selecting){
g.setColor(Color.black);
g.drawRect(x,y,h,w);
g.setColor(Color.magenta);
g.fillRect(x,y,h,w);
}else{
g.setColor(Color.blue);
g.fillRect(x,y,h,w);
}
}
}
class roundrect extends shape{
protected boolean selecting = false;
private int x=160, y=30, h=80, w=90, rh=10, rw=10;
public void paintComponent(Graphics g){
super.paintComponent(g);
if(selecting){
g.setColor(Color.black);
g.drawRoundRect(x,y,h,w,rh,rw);
g.setColor(Color.magenta);
g.fillRoundRect(x,y,h,w,rh,rw);
}else{
g.setColor(Color.cyan);
g.fillRoundRect(x,y,h,w,rh,rw);
}
}
}