hallo, habe mit einem Taschenrechner angefangen..hier ist der code und dannach kommen meine fragen 
also...mir geht's natürlich um die speicherknöpfe um sich einen wert zu speichern und wieder aufzurufen..wahrscheinlich ist das voll simple..und den wert einfach in eine variable speichern..aber ich möchte auf dem Display also im Textfeld ein M anzeigen dafür das ich eine zahl im speicher hab.. (MS zahl speichern, MR, zahl aufrufen, MC zahl löschen M+ und M- ~...dann kommt die löschentaste..die die HINTERSTE zahl löschen soll...muss ich da den gesammten string nehmen und einfach nur hinten das letzte zeichen entfernen..oder geht's einfacher? oder professioneller?
wie funktioniert das komma? habs auch schon mit nem punkt ausprobiert..nur der wollte nicht so...
die istgleich taste und die null-taste sollen doppelte größe haben..doch ich baue die Buttons ja der reihe auf...und wie kann ich da nun ne ausnahme regelung bauen? wollte mir ne menge code sparen die tasten alle einzeln zu platzieren...
Java:
package calc.swing;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class abacus extends JFrame implements ActionListener
{
private JTextField displayText = new JTextField( 30 ); // textfield 30 charakter
private JButton[] button = new JButton[25]; //number of buttons and order of buttons
private String[] keys = {
"MC", "MR", "MS", "M+", "M-",
"7", "8", "9", "/", "←",
"4", "5", "6", "*", "C",
"1", "2", "3", "-", "=",
"0", "0", ",", "+", "="
};
private String numStr1 = "";
private String numStr2 = "";
private char op;
private boolean finput = true;
public abacus()
{
setTitle( "Abakus" );
setSize( 290, 250 );
setLocation( 800, 500 );
Container pane = getContentPane();
pane.setLayout( null );
displayText.setSize( 256, 30 );
displayText.setLocation( 10, 10 );
pane.add( displayText );
int x, y;
x = 10;
y = 40;
for( int indicator = 0; indicator < 25; indicator++ ) //
{
button[indicator] = new JButton( keys[indicator] );
button[indicator].addActionListener( this );
button[indicator].setSize( 55, 31 );
button[indicator].setLocation( x, y );
pane.add( button[indicator] );
x = x + 50;
if ( ( indicator + 1 ) % 5 == 0 )
{
x = 10;
y = y + 30;
}
}
this.addWindowListener( new WindowAdapter()
{
@Override
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
}
);
setVisible( true );
}
@Override
public void actionPerformed( ActionEvent e )
{
String resultStr;
String str = String.valueOf( e.getActionCommand() );
char ch = str.charAt( 0 );
switch( ch )
{
// case 'MC':{}
// case 'MR':{}
// case 'MS':{}
// case 'M+':{}
// case 'M-':{}
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if ( finput )
{
numStr1 = numStr1 + ch;
displayText.setText( numStr1 );
}
else
{
numStr2 = numStr2 + ch;
displayText.setText( numStr2 );
}
break;
case '+':
case '-':
case '*':
case '/':
op = ch;
finput = false;
break;
case '=':
resultStr = auswerten();
displayText.setText( resultStr );
numStr1 = resultStr;
numStr2 = "";
finput = false;
break;
case 'C':
displayText.setText( "" );
numStr1 = "";
numStr2 = "";
finput = true;
case '←':
case ',':
}
}
private String auswerten()
{
try
{
double nummer1 = Integer.parseInt( numStr1 );
double nummer2 = Integer.parseInt( numStr2 );
double resultat = 0;
switch( op )
{
case '+':
resultat = nummer1 + nummer2;
break;
case '-':
resultat = nummer1 - nummer2;
break;
case '*':
resultat = nummer1 * nummer2;
break;
case '/':
resultat = nummer1 / nummer2;
}
return String.valueOf( resultat );
}
catch ( ArithmeticException e )
{
return "FEHLER: " + e.getMessage();
}
catch ( NumberFormatException e )
{
if ( numStr1.equals( "" ) ) return "FEHLER: Erste Eingabe Falsch";
else return "FEHLER: Zweite Eingabe Falsch";
}
catch ( Exception e )
{
return "FEHLER";
}
}
public static void main( String[] args )
{
abacus C = new abacus();
}
}
also...mir geht's natürlich um die speicherknöpfe um sich einen wert zu speichern und wieder aufzurufen..wahrscheinlich ist das voll simple..und den wert einfach in eine variable speichern..aber ich möchte auf dem Display also im Textfeld ein M anzeigen dafür das ich eine zahl im speicher hab.. (MS zahl speichern, MR, zahl aufrufen, MC zahl löschen M+ und M- ~...dann kommt die löschentaste..die die HINTERSTE zahl löschen soll...muss ich da den gesammten string nehmen und einfach nur hinten das letzte zeichen entfernen..oder geht's einfacher? oder professioneller?
wie funktioniert das komma? habs auch schon mit nem punkt ausprobiert..nur der wollte nicht so...
die istgleich taste und die null-taste sollen doppelte größe haben..doch ich baue die Buttons ja der reihe auf...und wie kann ich da nun ne ausnahme regelung bauen? wollte mir ne menge code sparen die tasten alle einzeln zu platzieren...
Zuletzt bearbeitet: