ActionListnere jako osobna klasa

0

Witam w swoim programie by większość była przejrzysta chciałem stworzyć osobną klasę ListenForButtomMAinFrame i tam umieścić co będzie się działo. Ale mam problem bo w osobnej klasie nie widać utworzonych w klasie MainFrame przycisku.

MainFrame.java

package com.kelthuzad.GUI;

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

public class MainFrame extends JFrame {

    JLabel labelLogin , labelPassword;
    JButton button;

    public MainFrame() {
        this.setTitle("Log on");
        this.setSize(400, 400);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(false);

        JPanel panel = new JPanel();

        labelLogin      = new JLabel("Login: ");
        labelPassword   = new JLabel("Password: ");
        button          = new JButton("test");


        ListenForButtonMainFrame listenForButtonMainFrame = new ListenForButtonMainFrame();
        button.addActionListener(listenForButtonMainFrame);

        panel.add(button);
        panel.add(labelLogin);
        panel.add(labelPassword);

        this.add(panel);

        this.setVisible(true);
    }
}

ListenForButtomMAinFrame.java

package com.kelthuzad.GUI;

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

public class ListenForButtonMainFrame implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == button) {
            System.out.println("dd");
        }
    }
}

0

Przekaż do obiektu Listsnera referencję do MainFrame:

public class ListenForButtonMainFrame implements ActionListener {

private MainFrame mainFrame;

public ListenForButtonMainFrame (final MainFrame mainFrame){
      this.mainFrame = mainFrame;
}
 
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == mainFrame.getButton()) {
            System.out.println("dd");
        }
    }
0

Ten if (e.getSource()) nie jest Ci potrzebny, bo dodajesz listener do buttona, więc sourcem jest button.

0
package com.kelthuzad.GUI;
 
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class MainFrame extends JFrame {
 
    JLabel labelLogin , labelPassword;
    JButton button;
 
    public MainFrame() {
        this.setTitle("Log on");
        this.setSize(400, 400);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(false);
 
        JPanel panel = new JPanel();
 
        labelLogin      = new JLabel("Login: ");
        labelPassword   = new JLabel("Password: ");
        button          = new JButton("test");
        //tu przekazujesz referencję do okna, przez this
        ListenForButtonMainFrame listenForButtonMainFrame = new ListenForButtonMainFrame(this);
        button.addActionListener(listenForButtonMainFrame);
 
        panel.add(button);
        panel.add(labelLogin);
        panel.add(labelPassword);
 
        this.add(panel);
 
        this.setVisible(true);
    }
}
public class ListenForButtonMainFrame implements ActionListener {
 
private MainFrame mainFrame;
 // konstruktor z parametrem
public ListenForButtonMainFrame (final MainFrame mainFrame){
      this.mainFrame = mainFrame;
}
 
    @Override
    public void actionPerformed(ActionEvent e) {
      // tutaj masz dostęp do zmiennych z MainFrame przez gettery
     // np. pobierasz pola tekstowe
    }
0

Mam pytanie Black007 czy chodzi o coś takiego:

package com.kelthuzad.GUI;

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

public class ListenForButtonMainFrame implements ActionListener {

    private MainFrame mainFrame;

    public ListenForButtonMainFrame (final MainFrame mainFrame) {
        this.mainFrame = mainFrame;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        mainFrame.getButton();
        System.out.println("dd");
    }
}

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