Operowanie na tablicach

0

Witam,
mam problem z przesłaniem danych do innej metody, z tym, że dane te są tworzone w pętli for i przypisywane do dwuwymiarowej tablicy. Oto kod:

import javax.swing.*;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.MouseAdapter;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class Droga3 implements ActionListener
{
JFrame fr = new JFrame();

int m = 22, n = 22, i, j, r, c;

    JButton start = new JButton("Start");
    GridLayout grid = new GridLayout(20,20);
    JPanel panelglowny = new JPanel();
    JPanel panelopcji = new JPanel();
    JPanel teren[][];
    int plansza[][] = new int[m][n];
    
	public static void main(String[] args) 
	{
		new Droga3();
		
	}
	
	public Droga3()
	{
            fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            fr.setSize(300,300);
            fr.setVisible(true);
            fr.setResizable(true);
            fr.setLayout(new BorderLayout());
            panelglowny.setBackground(Color.yellow);
            fr.add("Center",panelglowny);
            fr.add("East",panelopcji);
            
            panelglowny.setLayout(grid);
            panelopcji.add(start);   
            start.addActionListener(this);
            teren = new JPanel[20][20];
for(r=1; r<plansza.length-1; r++)//wprowadanie danych
                         for(c=1; c<plansza[m-1].length-1; c++)
                                 plansza[r][c] = 1;
for (i = 1; i<=19; i++)
    for(j = 1; j<=19; j++)
		{
			teren[i][j] = new JPanel();
                        teren[i][j].setBackground(Color.WHITE);
                        teren[i][j].setBorder(BorderFactory.createLineBorder(Color.BLACK));
                        panelglowny.add(teren[i][j]);
                        final int row = i;
                        final int col = j;
                        teren[i][j].addMouseListener(new MouseAdapter()
                 {
                      public void mouseClicked(MouseEvent me)
                      {
                           teren[row][col].setBackground(Color.RED);            //chciałbym, żeby do każdego panelu była dopasowana //osobna plansza[r][c], oraz, że jak po kliknięciu zmienię kolor na czerwony, to automatycznie zmieni się również wartość //plansza[r][c] = 0;               
                           teren[row][col].repaint();
                      }
                 });
                        panelglowny.revalidate();
                        panelglowny.repaint();
		}
                         

        
        }
        public void actionPerformed(ActionEvent zdarzenie){
    String area = "";
    for(r=0; r<plansza.length; r++)//wyswietlanie
		{
			for(c=0; c<plansza[m-1].length; c++)
			{
				area += plansza[r][c] + " ";
			}
			area += "\n";
		}
		JOptionPane.showMessageDialog(null, area, null,  JOptionPane.INFORMATION_MESSAGE);
                if(plansza[r][c] == -1){teren[i][j].setBackground(Color.blue);} // jeśli plansza[r][c] przyjmie wartość -1 to przypisany //jej panel teren[i][j] zmieni kolor z białego na niebieski
    
}

}

W komentarzach napisałem w czym tkwi problem. Zbędny kod usunąłem.

0

Zawsze możesz zamiast tego: if(plansza[r][c] == -1){teren[i][j].setBackground(Color.blue);} zrobić coś takiego: if(plansza[1][1] == -1{teren[1][1].setBackground(Color.blue);}, ale przy twoich 20x20 musiałbyś rozpatrzyć 400 przypadków, czyli lipa. Niech ktoś mądrzejszy się wypowie.

0

Może nie korzystaj z klasy JPanel, tylko z klasy pochodnej, w której plansza jest polem (składową).
//Edit. Po co stworzyłeś 400 identycznych MouseListenerów zamiast posłużyć się jednym?

1 użytkowników online, w tym zalogowanych: 0, gości: 1