Hallo zusammen,
ich arbeite mich aktuell in die Basics von Java ein und erstelle in diesem Zusammenhang einen Taschenrechner. Der Rechner tut was er soll, er wirft Ergebnisse aus. Nun mehr möchte ich den Rechner (auch im Hinblick auf neue Funktionalitäten) erweitern.
Ich verwende ein verschachteltes Layout:
Der North Bereich enthält eine Checkbox, welche dazu genutzt werden soll, erweiterte Tasten anzeigen zu lassen. Die Default Einstellung enthält die grundlegenden Tasten von 0-9 sowie die Grundrechenarten, die Erweiterten Einstellungen sollen ein größeres Tastenfeld mit Funktionalitäten wie bspw. Wurzel, Potenz, etc. darstellen.
Der Ablauf soll nun wiefolgt realisiert werden: Sobald die Checkbox angeklickt wird soll dieses über einen ItemListener abgefangen und die boolsche Variable buttonsetdefault auf einen neuen Wert (false) gesetzt werden. Daraufhin soll das Tastenfeld mittels einer If-Schleife ausgetauscht werden. Der Initialwert von buttonsetdefault beträgt true, damit das einfache Tastenfeld erscheint.
Nachfolgend der relevante Code:
Die Erstellung des Fensters erfolgt mittels nachfolgender Klasse:
Mein Problem besteht darin, dass ich den Wert von buttonsetdefault aus dem ItemListener nicht abfangen kann. Ich habe versucht mit einem Getter zu arbeiten, das dürfte allerdings aufgrund der void Deklaration im ItemListener nicht funktionieren (korregiert mich, wenn ich falsch liege).
Daher meine Frage: Wie kann ich die Werte abgreifen und dann der If-Schleife für die Erzeugung der Buttons zuleiten? Aktuell stehe ich da ein wenig auf dem Schlauch.
Über Hinweise bin ich dankbar.
ich arbeite mich aktuell in die Basics von Java ein und erstelle in diesem Zusammenhang einen Taschenrechner. Der Rechner tut was er soll, er wirft Ergebnisse aus. Nun mehr möchte ich den Rechner (auch im Hinblick auf neue Funktionalitäten) erweitern.
Ich verwende ein verschachteltes Layout:
- Für die Gesamtdarstellung wird ein BorderLayout genutzt von denen bisher North und Center genutzt werden
- Im North Bereich nutze ich ein BoxLayout um einmal die Ausgaben anzuzeigen und um Bedienelemente anzuzeigen
- Der Center Bereich nutzt ein GridLayout für die Darstellung der jeweiligen Tasten
Der North Bereich enthält eine Checkbox, welche dazu genutzt werden soll, erweiterte Tasten anzeigen zu lassen. Die Default Einstellung enthält die grundlegenden Tasten von 0-9 sowie die Grundrechenarten, die Erweiterten Einstellungen sollen ein größeres Tastenfeld mit Funktionalitäten wie bspw. Wurzel, Potenz, etc. darstellen.
Der Ablauf soll nun wiefolgt realisiert werden: Sobald die Checkbox angeklickt wird soll dieses über einen ItemListener abgefangen und die boolsche Variable buttonsetdefault auf einen neuen Wert (false) gesetzt werden. Daraufhin soll das Tastenfeld mittels einer If-Schleife ausgetauscht werden. Der Initialwert von buttonsetdefault beträgt true, damit das einfache Tastenfeld erscheint.
Nachfolgend der relevante Code:
Java:
package Calculator;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class FrameConstructor extends JFrame{
JButton display, button, test1, test2;
JPanel pnlNorth, pnlCenter;
JCheckBox cbxerw;
double result, fixed10;
Double input2, store;
boolean start;
public boolean buttonsetdefault;
String lastCommand, recall, pm, pm3;
Float pm2;
//Nachfolgende Methode erzeugt das JFrame
public FrameConstructor(){
setVisible(true);
setTitle("Calculator advanced");
createUserInterface();
add(pnlNorth, BorderLayout.NORTH);
add(pnlCenter, BorderLayout.CENTER);
pack();
}
void createUserInterface(){
//North Content
pnlNorth=new JPanel();
pnlNorth.setLayout(new BoxLayout(pnlNorth, BoxLayout.Y_AXIS));
display=new JButton("0");
display.setEnabled(false);
test1=new JButton("Ich bin Button 1");
test2=new JButton("Ich bin Button 2");
cbxerw=new JCheckBox("Erweiterte Operationen anzeigen");
cbxerw.addItemListener(new CbxerwListener());
add(cbxerw);
pnlNorth.add(display);
pnlNorth.add(test1);
pnlNorth.add(test2);
pnlNorth.add(cbxerw);
//Initializing pnlCenter Variables
result=0;
lastCommand="=";
start=true;
fixed10=10;
buttonsetdefault=true;
System.out.println("Initialer Wert für Buttonsetdefault: " +buttonsetdefault);
pnlCenter=new JPanel();
if(buttonsetdefault==true){
//Center Content
pnlCenter.setLayout(new GridLayout(4,4));
//Adding Buttons:Default button set
addButton("7", insert);
addButton("8", insert);
addButton("9", insert);
addButton("/", command);
addButton("4", insert);
addButton("5", insert);
addButton("6", insert);
addButton("*", command);
addButton("1", insert);
addButton("2", insert);
addButton("3", insert);
addButton("-", command);
addButton("0", insert);
addButton(".", insert);
addButton("=", command);
addButton("+", command);
}else{
pnlCenter.setLayout(new GridLayout(7,5));
addButton("del", handling);
addButton("sto", handling);
addButton("rcl", handling);
addButton("+/-", handling);
addButton("7", insert);
addButton("8", insert);
addButton("9", insert);
addButton("/", command);
addButton("4", insert);
addButton("5", insert);
addButton("6", insert);
addButton("*", command);
addButton("1", insert);
addButton("2", insert);
addButton("3", insert);
addButton("-", command);
addButton("0", insert);
addButton(".", insert);
addButton("=", command);
addButton("+", command);
addButton("e^x", command2);
addButton("sqrt", command2);
addButton("cbrt", command2);
addButton("10^x", command2);
addButton("pow", command);
}
}
/*
* Implementing ItemListener for CheckBox interaction
*/
private class CbxerwListener implements ItemListener{
public void itemStateChanged(ItemEvent event){
if (cbxerw.isSelected()) {
buttonsetdefault=false;
} else {
buttonsetdefault=true;
}
//System.out.println("Buttonsetdefault am Ende der If-Schleife: " + buttonsetdefault);
}
}
Die Erstellung des Fensters erfolgt mittels nachfolgender Klasse:
Java:
package Calculator;
import javax.swing.JFrame;
public class CalculatorAdvanced {
public static void main(String[] args) {
FrameConstructor frame=new FrameConstructor();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Mein Problem besteht darin, dass ich den Wert von buttonsetdefault aus dem ItemListener nicht abfangen kann. Ich habe versucht mit einem Getter zu arbeiten, das dürfte allerdings aufgrund der void Deklaration im ItemListener nicht funktionieren (korregiert mich, wenn ich falsch liege).
Daher meine Frage: Wie kann ich die Werte abgreifen und dann der If-Schleife für die Erzeugung der Buttons zuleiten? Aktuell stehe ich da ein wenig auf dem Schlauch.
Über Hinweise bin ich dankbar.
Zuletzt bearbeitet: