Nie mogę odczytać zmiennej w innej klasie

0

cześć
od nie dawna uczę się jawy i piszę sobie program, w którym sprawdzam jak działają różne opcje
zrobiłem guzik, który zwiększa wartość zmiennej "a" i chciałem w innej klasie tą wartość odcztać
próbowałem już różnych sposobów i muszę prosić o pomoc, ponieważ mnie to przerasta :(
podaję kod 2 klas:

import java.awt.*;
import java.awt.event.*;

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;

import java.awt.FlowLayout;

public class PrawyPanel extends JPanel implements ActionListener
{
    int a=0;
    JButton kkk;

    public PrawyPanel()
    {
        setPreferredSize(new Dimension(150,100));
        setBackground(Color.red);
        kkk=new JButton("tekst");
        add(kkk);
        kkk.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e)
    {
        Object source = e.getSource();

        if(kkk==source)
        {
            a++;
            setBackground(Color.green);
        }
    }
}

Tutaj jest zwiększana wartość "a", a klasa poniżej ma ją odczytać:

import java.awt.*;
import java.awt.event.*;

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;

import java.awt.FlowLayout;

public class LewyPanel extends JPanel implements ActionListener
{
    JPanel prawy = new PrawyPanel();
    JButton kkk;

    public LewyPanel()
    {
        setPreferredSize(new Dimension(150,100));
        setBackground(Color.blue);
        kkk=new JButton("tekst");
        add(kkk);
        kkk.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e)
    {
        Object source = e.getSource();

        if(kkk==source)
        {
            setBackground(Color.green);
        }
    }
}

próbowałem przekazać wartość metodami, i innymi sposobami ale program nigdy nie mógł znaleźć tej zmiennej
proszę o pomoc :)

poprawienie tytułu wątku + sformatowanie kodu - fp

0

Może zamiast

JPanel prawy = new PrawyPanel();

to

PrawyPanel prawy = new PrawyPanel();
0

Podaj jeszcze kod klasy głównej, tej z metodą main.

0

z PrawyPanel zamiast JPanel też próbowałem

tutaj z main:

import java.awt.EventQueue;
 
public class Test {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MyFrame();
            }
        });
    }
} 

A tutaj wyświetlana ramka:

 import javax.swing.JFrame;

import javax.swing.JButton;
import javax.swing.JPanel;

import java.awt.FlowLayout;

import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; 


public class MyFrame extends JFrame{

	JPanel prawyPanel= new PrawyPanel();
	JPanel lewyPanel=new LewyPanel();
	int b;
	PrawyPanel wartosc = new PrawyPanel();
	
	
    public MyFrame() {
    	super("Hello World");
    	
    	JButton przycisk =new JButton("przycisk");
    	
    	
    	
    	JPanel panelGlowny = new JPanel(); //panel główny
    	panelGlowny.setLayout(new FlowLayout());

    	
    	panelGlowny.add(lewyPanel);
    	panelGlowny.add(prawyPanel);
    	//dodanie do glownego kontenera
    	
    	setContentPane(panelGlowny);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 300);
        setLocation(500,300);
        setVisible(true);
    }
}

pokolorowałem kod - bogdans

0

Po zmianie

JPanel prawy = new PrawyPanel();

w klasie LewyPanel na:

PrawyPanel prawy = new PrawyPanel();

zmienna 'a' jest widoczna w tej klasie i można ją wypisać.

0

Jeden z paneli powinien mieć referencję do drugiego. Poniżej lewy ma referencję do prawego.

import javax.swing.JPanel;
 
import java.awt.FlowLayout;
 
import javax.swing.*;
 
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; 
 
 
public class MyFrame extends JFrame{
 
    PrawyPanel prawyPanel= new PrawyPanel();
    LewyPanel lewyPanel=new LewyPanel(prawyPanel);
    int b;
    PrawyPanel wartosc = new PrawyPanel();
 
 
    public MyFrame() {
        super("Hello World");
 
        JButton przycisk =new JButton("przycisk");
 
 
 
        JPanel panelGlowny = new JPanel(); //panel główny
        panelGlowny.setLayout(new FlowLayout());
 
 
        panelGlowny.add(lewyPanel);
        panelGlowny.add(prawyPanel);
        //dodanie do glownego kontenera
 
        setContentPane(panelGlowny);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 300);
        setLocation(500,300);
        setVisible(true);
    }
}

Metoda getA() w klasie PrawyPanel może być niepotrzebna - zależy na ile publiczne jest pole a.

import java.awt.*;
import java.awt.event.*;
 
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
 
import java.awt.FlowLayout;
 
public class PrawyPanel extends JPanel implements ActionListener
{
    int a=0;
    JButton kkk;
 
    public PrawyPanel()
    {
        setPreferredSize(new Dimension(150,100));
        setBackground(Color.red);
        kkk=new JButton("tekst");
        add(kkk);
        kkk.addActionListener(this);
    }
 
    public void actionPerformed(ActionEvent e)
    {
        Object source = e.getSource();
 
        if(kkk==source)
        {
            a++;
            setBackground(Color.green);
        }
    }
    public int getA()
    {
        return a;
    }
}
import java.awt.*;
import java.awt.event.*;
 
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
 
import java.awt.FlowLayout;
 
public class LewyPanel extends JPanel implements ActionListener
{
    PrawyPanel prawy = null;;
    JButton kkk;
 
    public LewyPanel(PrawyPanel prawy)
    {
        this.prawy = prawy;
        setPreferredSize(new Dimension(150,100));
        setBackground(Color.blue);
        kkk=new JButton("tekst");
        add(kkk);
        kkk.addActionListener(this);
    }
 
    public void actionPerformed(ActionEvent e)
    {
        Object source = e.getSource();
 
        if(kkk==source)
        {
            setBackground(Color.green);
            System.out.println("a po prawej stronie = "+prawy.getA());
        }
    }
}
0
	LewyPanel lewyPanel=new LewyPanel(prawyPanel);

ta linijka się nie kompiluje, jest napisane, że konstruktor LewyPanel(prawyPanel) jest niezdefiniowany

0

Pieprzysz waść, a co to jest

    public LewyPanel(PrawyPanel prawy)
    {
        this.prawy = prawy;
        ...

W przyszłości, jak dostaniesz gotowca, to przepisz (przekopiuj) go bez błędów.

0

następnym razem chyba rzeczywiście skopiuję żeby nie przeoczyć
sprawdziłem czy bez getA odczyta i odczytało :)
dzięki wielkie za pomoc i cierpliwość :)

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