Erkennung eines Button im aktiven Fenster

arslane

Neues Mitglied
Hallo,
ich bin Java Anfänger und hoffe hier einen Tip für das folgende Problem zu finden. Vielen Dank vorab.

Folgender Fall: Es sind 2 Masken geöffnet und möchte, dass ein Button (z.B. Close) in der aktiven Maske (Maske im Vordergrund) gedrückt wird. Das Problem ist, dass dieser Close Button mit den gleichen Objekteigenschaften in beiden Masken vorhanden ist. Somit wird es als Objekt mit 2 Instanzen erkannt.

Wie kann man in Java also angeben, dass es um den Button im aktiven Fenster geht?
 
Ich hoffe es sind zwei GUI Klassen, wobei die eine die andere aufruft bzw. die jeweiligen Listener das machen.
Ich hab das mal kurz nachgebaut. Mit dispose() müsste das alles wunderbar und einfach klappen.

Hier mein Beispiel:

GUI1
Java:
package GUITests;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.GridLayout;

public class GUI1 extends JFrame {

	private Controller controller;
	private JPanel contentPane;
	public JButton btnffneZweitesFenster = new JButton("\u00D6ffne zweites Fenster"); 
	public JButton btnSchlieeDiesesFenster = new JButton("Schlie\u00DFe dieses Fenster");

	
	public GUI1(Controller controller) {
		this.controller = controller;
		initiateGui1();
		this.setVisible(true);
	}
	
	public void initiateGui1() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		btnffneZweitesFenster.setBounds(34, 119, 139, 67);
		contentPane.add(btnffneZweitesFenster);
		
		btnSchlieeDiesesFenster.setBounds(202, 119, 194, 67);
		contentPane.add(btnSchlieeDiesesFenster);
	}
	
	public void closeThisWindow(ActionListener l){
		this.btnSchlieeDiesesFenster.addActionListener(l);
	}
	
	public void openGui2(ActionListener l){
		this.btnffneZweitesFenster.addActionListener(l);
	}
}
GUI2
Java:
package GUITests;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionListener;

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

public class GUI2 extends JFrame {
	private Controller controller;
	private JPanel contentPane;
	public JButton btnSchlieeDiesesFenster = new JButton("Schlie\u00DFe dieses Fenster");

	public GUI2(Controller controller) {
		this.controller = controller;
	}
	
	
	public void initiateGUI2() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		contentPane.add(btnSchlieeDiesesFenster, BorderLayout.SOUTH);
		
		this.setVisible(true);
	}

	public void closeThis(ActionListener l){
		this.btnSchlieeDiesesFenster.addActionListener(l);
	}
	
}
Controller
Java:
package GUITests;

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

public class Controller {
	private GUI1 gui1;
	private GUI2 gui2;

	public Controller() {
		this.gui1 = new GUI1(this);
		this.gui2 = new GUI2(this);

		addListener();
	}

	private void addListener() {
		this.gui1.closeThisWindow(new CloseListener());
		this.gui1.openGui2(new OpenGUI2Listener());
		this.gui2.closeThis(new CloseThisListener2());
	}

	class CloseListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			gui1.dispose();
		}
	}

	class OpenGUI2Listener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			gui2.initiateGUI2();
		}
	}

	class CloseThisListener2 implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			gui2.dispose();
		}
	}
}
Main
Java:
package GUITests;

public class Main {

	public static void main(String[] args) {
		Controller controller = new Controller();
	}

}
 

Zurück
Oben