[JAVA] odwołanie się do zmiennych z innej klasy

0

Hej.
Jestem początkującą "pseudoprogramistką" i przyznam się szczerze - jestem w tym słaba. Ale do rzeczy. Dostałam zadanie do wykonania. Muszę narysować prostokąt, którego boki mają długość taką, jak wczytane liczby z plików .txt.
Wczytałam pliki do konsoli, przerobiłam String-i na int-y, napisałam też kod na rysowanie prostokąta.
Mój problem to: nie umiem odwołać się z klasy DrawingPanel do zmiennych aa i bb, które mam w klasie Pobieranie. Próbowałam sama dojść do odpowiedzi, ale ciągle wyskakują mi błędy.
Domyślam się, że odpowiedź na moje pytanie jest pewnie banalnie prosta, ale męczę się z tym już 5h i nie mogę znaleźć rozwiązania :( Pomóżcie, proszę. Tylko mam prośbę. Możecie pisać do mnie jak najprostszymi słowami? Będę wdzięczna:)

public class Pobieranie extends JFrame {
	
	private DrawingPanel drawingPanel;
	
	public static void main(String[] args) throws FileNotFoundException {
		Scanner odczyt1 = new Scanner(new File("1.txt"));
		Scanner odczyt2 = new Scanner(new File("2.txt"));
		String a = odczyt1.nextLine();
		String b = odczyt2.nextLine();
		
		int aa = Integer.parseInt(a);
		int bb = Integer.parseInt(b);
		
		JFrame frame = new Pobieranie();	
	}
	public Pobieranie() {
		super("Pobieranie");
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		setSize(500, 500);
		setVisible(true);
		setLocationRelativeTo(null);
		initGUI();
	}
	private void initGUI() {
		setLayout(new BorderLayout(0,0));
		
		drawingPanel = new DrawingPanel();
		add(drawingPanel);
	}
}
public class DrawingPanel extends JPanel {
	
	public void paint (Graphics g) {
		super.paint(g);
		setBackground(Color.BLACK);
		setSize(500, 500);
		Graphics2D g2d = (Graphics2D) g;
		g2d.setStroke(new BasicStroke());
		draw(g2d);
		
	}

	private void draw(Graphics2D g2d) {
		g2d.setColor(Color.WHITE);
		g2d.drawRect(100, 100, x //(TUTAJ MUSZĘ MIEĆ LICZBĘ POBRANA Z PLIKU)//, y //(I TU TEZ)//);	
	}
}
1
  1. Wyjątki należy jakoś obsłużyć, a nie ignorować.
  2. Jak zdefiniujesz zmienne aa i bb jako zmienne lokalne w metodzie main(), to one nie są widoczne już w żadnej innej metodzie klasy Pobieranie, nie będą też widoczne w klasie DrawingPanel.
  3. Jak chcesz by jakaś klasa korzystała z informacji zawartych w drugiej klasie, to masz dwie możliwości:
    • w konstruktorze drugiej klasy (u Ciebie DrawingPanel) przekazać te informacje,
    • w konstruktorze drugiej klasy przekazać referencję do pierwszej klasy, rozwiązanie bardziej elastyczne bo druga klasa może wtedy reagować na zmiany w pierwszej klasie.
      Wybrałem drugie rozwiązanie.
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
public class Pobieranie extends JFrame 
{
    private int x=75;
    private int y=75;    
    private DrawingPanel drawingPanel;
   
    public static void main(String[] args){
        JFrame frame = new Pobieranie();        
    }
    public Pobieranie(){
        super("Pobieranie");
        try
        {
            Scanner odczyt1 = new Scanner(new File("1.txt"));
            Scanner odczyt2 = new Scanner(new File("2.txt"));
            String a = odczyt1.nextLine();
            String b = odczyt2.nextLine();
 
            x = Integer.parseInt(a);
            y = Integer.parseInt(b);
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(this,e.toString());
        }
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(500, 500);
        setVisible(true);
        setLocationRelativeTo(null);
        initGUI();
        pack();
    }
    private void initGUI() {
        setLayout(new BorderLayout(0,0));
 
        drawingPanel = new DrawingPanel(this);
        add(drawingPanel);
    }
    public int getX()
    {
        return x;
    }
    public int getY()
    {
        return y;
    }
}

import java.awt.*;
import javax.swing.*;
public class DrawingPanel extends JPanel {
    private Pobieranie parent;
    public DrawingPanel(Pobieranie parent)
    {
        this.parent=parent;
        setPreferredSize(new Dimension(500, 500));
    }
    public void paint (Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setBackground(Color.BLACK);
        g2d.setStroke(new BasicStroke());
        draw(g2d);
 
    }
 
    private void draw(Graphics2D g2d) {
        g2d.setColor(Color.WHITE);
        g2d.drawRect(100, 100, parent.getX(), parent.getY());        
    }
}

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