グリッドにレンガを印刷するアプリケーションをコーディングしています。理想的には、色を変更するために、メニュー選択がレンガクラスの色を設定する int を変更するように設定しました。
2 つのパネルがあります。1 つはグリッド (描画される場所) 用で、もう 1 つはメニュー バー用です。グリッドの数字を手動で変更すると動くので、メニューの問題かと思いますがよくわかりません。メニューjpanelからグリッドjpanelが変更されるたびに、どのようにintを取得できるのか疑問に思っています。
これはメニューコードです:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Selector extends JPanel implements Common, ActionListener{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public Color colorValues[] = {Color.BLACK, Color.YELLOW, Color.RED, Color.ORANGE};
    public String colors[] = {"Black", "Yellow", "Red", "Orange"};
    public JMenuItem colorItems[];
    public int display;
    //constructor
    public Selector(){
        //set size and layout
        setPreferredSize(new Dimension(SELECTOR_WIDTH, SELECTOR_HEIGHT));
        setLayout(new BorderLayout());
        //menu bar
        JMenuBar bar = new JMenuBar();
        Font f = new Font("Helvetica", Font.BOLD, 15);
        //menus
        JMenu colorMenu = new JMenu("Colour");
        //create Color menu
        String colors[] = {"Black", "Yellow", "Red", "Orange"};
        colorItems = new JMenuItem[colors.length];
        for (int i = 0; i<colors.length; i++){
            colorItems [i] = new JMenuItem(colors[i]);
            colorMenu.add(colorItems[i]);
            colorItems[i].addActionListener(this);
        }// end of for loop
        //set all font the same
        UIManager.put("Menu.font", f);
        UIManager.put("MenuBar.font", f);
        UIManager.put("MenuItem.font", f);
        //add menus
        bar.add(colorMenu);
        //add menu bar
        add(bar, BorderLayout.PAGE_START);
    }//constructor end
    public void actionPerformed(ActionEvent e){
        if (e.getSource()==colorItems[0]){
            display=0;
        }
        else if (e.getSource()==colorItems[1]){
            display=1;
        }
        else if (e.getSource()==colorItems[2]){
            display=2;
        }
        else if (e.getSource()==colorItems[3]){
            display=3;
        }
    }
}//class end
これはマップ グリッドのコードです。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MapGrid extends JPanel implements Common, MouseListener{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    //brick array
    public Bricks [] brick = new Bricks[COLUMN*ROW];
    //number array to save
    public int [] cell = new int[COLUMN*ROW];
    //coordinate variables
    private int x=0;
    private int y=0;
    Selector s = new Selector();
    //constructor
    public MapGrid(){
        //sets size, layout, and background colour
        setPreferredSize(new Dimension(MAPGRID_WIDTH, MAPGRID_HEIGHT));
        setLayout(new GridLayout(ROW, COLUMN));
        addMouseListener(this);
        //draws grid of bricks
        for (int i = 0; i <COLUMN*ROW; i++){
            cell[i] = 4;
            if ((i%COLUMN==0)&&(i>COLUMN-1)){
                x=0;
                y+=22;
            }
            brick[i] = new Bricks(x,y);
            x+=40;
        }
    }//constructor end
    //draws bricks
    public void paint(Graphics g){
        super.paint(g);
        for (int i = 0; i <COLUMN*ROW; i++){
            brick[i].draw(g);
        }
    }//paint end
    public void mousePressed(MouseEvent evt) {
        //gets mouse  and y coordinates
        int x = evt.getX();
        int y = evt.getY();
        //gets column and row of mouse location
        int c =x/BRICK_WIDTH;
        int r =y/BRICK_HEIGHT;
        //checks if mouse is within range
        if ((c>=0&&c<=COLUMN)&&(r>=0&&r<=ROW)){
            int index = (r)*COLUMN+c; //calculates brick number
            //right click - delete brick
            if (evt.isMetaDown()) {
                brick[index].setChoice(4);
                cell[index]=4;
            }
            //left click - draws brick
            else{
                brick[index].setChoice(s.display);
                cell[index]=s.display;
            }
        }
        repaint();
    }//mousePressed end
    //unused
    public void mouseEntered(MouseEvent evt) {}  
    public void mouseExited(MouseEvent evt) {}   
    public void mouseClicked(MouseEvent evt) {}  
    public void mouseReleased(MouseEvent evt) {}
}//class end
これはブリックコードです:
import java.awt.*;
public class Bricks implements Common{
    //variables
    public int x=0;
    public int y=0;
    public int choice=3;
    public boolean clear = true;
    //size of bricks
    private static final int width = BRICK_WIDTH;
    private static final int height = BRICK_HEIGHT;
    //constructor
    public Bricks(int x, int y){
        this.x=x;
        this.y=y;
    }//constructor end
    //draw bricks
    public void draw(Graphics g){
        //set color or blank
        switch(choice){
            case 0: g.setColor(Color.BLACK);
                break;
            case 1: g.setColor(Color.YELLOW);
                break;
            case 2: g.setColor(Color.RED);
                break;
            case 3: g.setColor(Color.ORANGE);
                break;
            case 4: clear = true;
                break;
        }
        //check if set blank
        if (clear==true){
            g.setColor(Color.BLACK);
            g.drawRect(x,y,width,height);
        }
        else{
            g.fillRect(x,y,width,height);
        }
    }//draw end
    //set choice of color
    public void setChoice (int c){
        choice=c;
        clear = false;
    }//choice end
}//class end