Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen

Kenelope

Mitglied
Hallo Leute, bin neu in der GUI Programmierung und habe ein paar Probleme.
Ich möchte ein Programm schreiben das über zwei Buttons (plus und minus button) und ein Label verfügt, das sich zwischen diesen beiden Buttons befindet.
Durch drücken des Plus-Buttons soll ein Zahlenwert erhöht werden, durch drücken des Minus-Button vermindert werden. Das Label soll zur Ausgabe des Wertes dienen.
Hier mein Anfang:

[Java]
package gui.plusminus;
import javax.swing.*;
import java.awt.*;
import javax.swing.*;

public class PlusMinus extends JFrame
{
private int sum;
private JLabel label;
PlusMinus(int min, int max, int amount)
{
super("PlusMinus");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLayout(new GridLayout(0, 1));
JButton plus = new JButton("+");
add(plus);
PlusHandler pl = new PlusHandler();
plus.addActionListener(pl);
label = new JLabel();
add(label);
JButton minus = new JButton("-");
add(minus);
MinusHandler mi = new MinusHandler();
minus.addActionListener(mi);
setLocation(100,50);
setSize(270,90);
setVisible(true);

}

public static void main(String[] args)
{
new PlusMinus(3, 9, 6);
}
}
[/Java]

Das Programm soll über zwei Eventhandler verfügen, die sich um die jeweiligen Buttons kümmern.
[Java]
package gui.plusminus;
import javax.swing.*;
import javax.swing.*;
import java.awt.event.*;

class PlusHandler implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
System.out.println("Wasser");
//label.setText("Wurst");
}
}
[/Java]
und
[Java]
package gui.plusminus;
import javax.swing.*;
import javax.swing.*;
import java.awt.event.*;

public class MinusHandler implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
System.out.println("Wurst");
//label.setText("Wurst");
}
}
[/Java]
Es sollen keine inneren Klassen, also auch keine anonymen Klassen, keine static und public-Attribute verwendet werden.
Es soll zudem ein Minimun und Maximum geben, mit dem nachher noch etwas gemacht werden soll, z. B. Buttons sperren, was aber jetzt mal egal ist. Das Label soll durch den Konstruktor am Anfang auf Minimum gesetzt werden.
Die drei Klassen sind in drei unterschiedlichen Dateien abgelegt aber im selben Package.
Das hochzählen bzw. runterzählen hab ich noch nicht implementiert, mein Problem ist, das ich nicht weiß wie ich auf das Label zugreifen soll, weil es in der Plusminus Klasse private ist, und ich in den beiden HandlerKlassen darauf zugreifen muss.
Es ist eine Hausaufgabe, deswegen wäre es nett wenn mir erstmal jemand verbal erklären könnte was ich falsch gemacht hab, bwz was ich verbessern kann, wie es richtig geht.

Vielen Dank im Voraus und viele Grüße,

Kenelope
 
Wenn du von einer anderen Klasse aus auf die Variablen deiner GUI Klasse zugreifen willst, musst du entweder eine get Funktion für diese Variable schreiben oder die Variable deinen Handlern im Konstruktor übergeben.
 
Eine Alternative sind die ActionCommands:

Java:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

@SuppressWarnings("serial")
public class JPlusMinusLabel extends JLabel implements ActionListener {

public JPlusMinusLabel(){
	this.setText("0");
}

	public static void main(String[] args) {
		JFrame jfr = new JFrame("Test");
		
		JPlusMinusLabel jpmp=new JPlusMinusLabel();
		JButton jb_plus;
		JButton jb_minus;
		
		jb_minus=new JButton("-");
		jb_minus.setActionCommand("minus");
		jb_minus.addActionListener(jpmp);
		
		jb_plus=new JButton("+");
		jb_plus.setActionCommand("plus");
		jb_plus.addActionListener(jpmp);
		
		
		jfr.getContentPane().setLayout(new FlowLayout());
		jfr.getContentPane().add(jb_minus);
		jfr.getContentPane().add(jpmp);
		jfr.getContentPane().add(jb_plus);
		jfr.pack();
		jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jfr.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand().equals("plus")){
			int i=Integer.parseInt(this.getText());
			this.setText((i+1)+"");
		}
		if(e.getActionCommand().equals("minus")){
			int i=Integer.parseInt(this.getText());
			this.setText((i-1)+"");
		}
		
	}
}
 

Neue Themen


Zurück
Oben