Z
Zicia
Gast
//Sorry der erste Post war im falschen Thread - dieser is der richtige der andere kann gelöscht werden
Hallo ich hab folgende Frage, ich hab unten ein Taschenrechner angefügt den ich geschrieben habe. Der Taschenrechner funktioniert soweit ganz gut. Jetzt hab ich folgende Probleme für die ich grad keine Lösung finde (bin noch nen relativer Newie in Java).
1.Problem: Wie schaff ich es, dass ich bei wiederholter "=" Operation die letzte Operation wiederhol. Wie bei einem richtigen Taschenrechner.
Bsp.: Die eingabe ist "1 + 1 = + 3 = * 2 = = = =" und für jedes "=" soll er nun die Operation "*2" wiederholen
2.Problem: Wenn ich "-" eingeb löscht er den bisherigen Wert udn ersetzt in durch den neuen. Bei allen anderen Operatoren rechnet er ganz normal weiter wie es sein soll.
3.Problem: Ist glaub simpel aber ich hab in der API nix gefunden. Wie zentriere ich die Displayanzeige
Danke im vorraus ihr helft mir sehr damit.
Hallo ich hab folgende Frage, ich hab unten ein Taschenrechner angefügt den ich geschrieben habe. Der Taschenrechner funktioniert soweit ganz gut. Jetzt hab ich folgende Probleme für die ich grad keine Lösung finde (bin noch nen relativer Newie in Java).
1.Problem: Wie schaff ich es, dass ich bei wiederholter "=" Operation die letzte Operation wiederhol. Wie bei einem richtigen Taschenrechner.
Bsp.: Die eingabe ist "1 + 1 = + 3 = * 2 = = = =" und für jedes "=" soll er nun die Operation "*2" wiederholen
2.Problem: Wenn ich "-" eingeb löscht er den bisherigen Wert udn ersetzt in durch den neuen. Bei allen anderen Operatoren rechnet er ganz normal weiter wie es sein soll.
3.Problem: Ist glaub simpel aber ich hab in der API nix gefunden. Wie zentriere ich die Displayanzeige
Danke im vorraus ihr helft mir sehr damit.
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator
{
public static void main(String[] args)
{
CalculatorFrame frame = new CalculatorFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class CalculatorFrame extends JFrame
{
public CalculatorFrame()
{
setTitle("Calculator");
CalculatorPanel panel = new CalculatorPanel();
add(panel);
pack();
}
}
class CalculatorPanel extends JPanel
{
public CalculatorPanel()
{
setLayout(new BorderLayout());
result = 0;
lastCommand = "=";
start = true;
display = new JButton("0");
display.setEnabled(false);
add(display, BorderLayout.NORTH);
ActionListener insert = new InsertAction();
ActionListener command = new CommandAction();
panel = new JPanel();
panel.setLayout(new GridLayout(4, 4));
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);
add(panel, BorderLayout.CENTER);
}
private void addButton(String label, ActionListener listener)
{
JButton button = new JButton(label);
button.addActionListener(listener);
panel.add(button);
}
private class InsertAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String input = event.getActionCommand();
if (start)
{
display.setText("");
start = false;
}
display.setText(display.getText() + input);
}
}
/**
* Diese Aktion führt den mit der Taste verbundenen
* Befehl aus.
*/
private class CommandAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String command = event.getActionCommand();
// Füge den Präfix "-" an den String an wenn
// es sich um den ersten Befehl handelt (negative Zahl)
if (start)
{
if (command.equals("-"))
{
display.setText(command);
start = false;
}
else
lastCommand = command;
}
else
{
// Berechnung ausführen
calculate(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
}
}
}
/**
* Führt die anstehenden Berechnungen aus.
* @param x der mit dem vorherigen Ergebnis zu berechnende Wert
*/
public void calculate(double x)
{
if (lastCommand.equals("+")) result += x;
else if (lastCommand.equals("-")) result -= x;
else if (lastCommand.equals("*")) result *= x;
else if (lastCommand.equals("/")) result /= x;
else if (lastCommand.equals("=")) result = x;
display.setText("" + result);
}
private JButton display;
private JPanel panel;
private double result;
private String lastCommand;
private boolean start;
}