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
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
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.
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)
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);
ok, dzięki