Komunikacja między panelami

0

Witam!

Jak obrazowo wygląda nasłuchiwanie zdarzeń na jednym panelu na drugim (na jednym -kliknięcie myszy, a drugim uzupełnianie textArea komentarzem o kliknięciu).

Z góry dzięki za odp

0

Np. tak: konstruujesz wpierw drugi panel, do konstruktora pierwszego panelu przekazujesz referencję do drugiego panelu i zapamiętujesz jako pole. Potem ActionListener w pierwszym panelu ma , przez zapamiętaną referencję dostęp do drugiego panelu.

0

ok, ale jak odnieść się do takiego przypadku

 public class Ekran extends JFrame {

	private JPanel contentPane;
	private JTextField textField;

	public Ekran() {
		
		contentPane = new JPanel();
		
		
		PanelR rysunek=new PanelR();
		
		contentPane.add(rysunek);
		
	
		
		
		textField = new JTextField();
		textField.setBounds(89, 270, 86, 20);
		contentPane.add(textField);
		textField.setColumns(10);
		this.setVisible(true);
		double odleglosc=Math.sqrt(Math.pow(rysunek.getBsx()-rysunek.getMsx()
				, 2)+Math.pow(rysunek.getBsy()-rysunek.getMsy(), 2));
		int iodleglosc=(int)odleglosc;
		textField.setText(""+iodleglosc);
		
		
	}

}
public class PanelR extends JPanel implements MouseListener 
{
	private int msx;
	private int msy;
	private final int bsx=95;
	private final int bsy=95;
	private int flaga=0;
	
	
	public PanelR()
	{
		this.addMouseListener(this);
		}
	
	public void paintComponent(Graphics g)
	{
		
		super.paintComponents(g);
		Graphics2D g2=(Graphics2D)g;
		Ellipse2D elipsa=new Ellipse2D.Double(0,0,200,200);
		g2.setPaint(Color.YELLOW.brighter());
		g2.fill(elipsa);
		
		Ellipse2D bs=new Ellipse2D.Double(bsx,bsy,10,10);
		g2.setPaint(Color.BLACK);
		g2.fill(bs);
		if(flaga==1){
		
		Rectangle2D ms=new Rectangle2D.Double(msx-3,msy-3,6,6);
		g2.setPaint(Color.GREEN.brighter().brighter());
		g2.fill(ms);
		flaga=0;
		}
		
	}

	public void mouseClicked(MouseEvent arg0) {
		if(arg0.getClickCount()==2)
		{
			flaga=1;
			msx=arg0.getX();
			msy=arg0.getY();
			repaint();
		}
		
	}

	public void mouseEntered(MouseEvent arg0) {
	}

	public void mouseExited(MouseEvent arg0) {
	}

	public void mousePressed(MouseEvent arg0) {
		msx=arg0.getX();
		msy=arg0.getY();
		
	}

	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	public int getMsx() {
		return msx;
	}

	public int getMsy() {
		return msy;
	}

	public int getBsx() {
		return bsx;
	}

	public int getBsy() {
		return bsy;
	}
	


}
 

i teraz chciałbym aby wartość msx można było przekazać do jtextField z klasy ekran (obecnie ta wartość jest zawsze równa zero)

0

Przecież napisałem.

 public class Ekran extends JFrame {
 
        private JPanel contentPane;
        private JTextField textField; //wymyśl jakąś sensowniejszą nazwę

        public Ekran() {

                contentPane = new JPanel();


                PanelR rysunek=new PanelR(this); //przekazujesz do panelu referencję do obiektu klasy Ekran

                contentPane.add(rysunek);




                textField = new JTextField();
                textField.setBounds(89, 270, 86, 20);
                contentPane.add(textField);
                textField.setColumns(10);
                this.setVisible(true);
                double odleglosc=Math.sqrt(Math.pow(rysunek.getBsx()-rysunek.getMsx()
                                , 2)+Math.pow(rysunek.getBsy()-rysunek.getMsy(), 2));
                int iodleglosc=(int)odleglosc;
                textField.setText(""+iodleglosc);


        }
        public void setText(String txt)
        {
            textField.setText(txt);
        }

}
public class PanelR extends JPanel implements MouseListener
{
        private int msx;
        private int msy;
        private final int bsx=95;
        private final int bsy=95;
        private int flaga=0;
        private Ekran okno;

        public PanelR(Ekran okno)
        {
                this.addMouseListener(this);
                this.okno=okno;
        }
        ....

i w odpowiednim momencie wywołujesz

okno.setText(co_ci_jest_potrzebne);
0

ok, dzięki

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