# Taschenrechener



## Guest (7. Okt 2005)

mit zwei Feldern fuer die Eingabe von Zahl 1 und Zahl 2 und einem Feld fuer die Ausgabe!

Darunter angeordnet Buttons mit den Rechensymbolen "+" "-" "*" "/" und ein Button fuer Reset "C"

Ich habe schon c und c++ gelernt bin jetzt neu in Java! Mein "OOD" ist folgendermassen: Ich mache ein Interface und da habe ich 3 Felder darunter angeordnet die Rechenknoepfe!
Gebe ich zwei Zahlen ein und druecke die jeweilige Rechenoperationstaste wird im Ausgabefeld der berechnete Wert ausgegeben!
Die Klasse ist der Taschenrechner, das Objekt ist der Taschenrechner und die Methoden sind die Rechen(bzw.Button)funktionen!?

Ich denke es sollte so moeglich sein(ohne viel Aufwand!):

Nach Eingabe zweier Zahlen druecke ich einen Rechenbutton und direkt Intern wird bsp. bei druecken des "+" Buttons das Ergebnis generiert und Ausgegeben!

Was ich bisher an code geschrieben habe:

```
import javax.swing.*;

public class cal
{

    public static void main(String args[])
    {
        
        JFrame oMainWindow = new JFrame("M.Richter Basic Calculator Vers.1.0.0");
        oMainWindow.setSize(500,500);
        oMainWindow.setVisible(true);
        
    }
}
```
Jetzt wuesste ich gerne wie ich in das Feld oben links untereinander feder implementiere und darunter die Buttons auf gleicher hoehe nebeneinander anbringe!?
Ich habe schon alles moegliche an JButton Tutorials gelesen leider funktioniert das hier irgendwie nicht!!!

Z.B. hab ich versucht das hier anzuwenden aber beim compilieren wird mir fast schlecht, also befreundet mit java bin ich jetzt noch nicht 

```
// Create an action
    Action action = new AbstractAction("Button Label") {
        // This method is called when the button is pressed
        public void actionPerformed(ActionEvent evt) {
            // Perform action...
        }
    };
    
    // Create the button
    JButton button = new JButton(action);   ???:L
```


----------



## Beni (7. Okt 2005)

Also ich denke auch, dass Apfelwein mit Kühlschrank vermischt zu grün zementiert.

Sorry, deine Fragen haben nicht sehr viel mit deinem Code zu tun...

Du solltest ein JPanel nehmen, ihm einen passenden Layout Manager verpassen, und die Buttons dann diesem JPanel "adden" (mit der add-Methode).
Das Panel kannst du dann auf dein Frame setzen, oder wieder auf ein anderes Panel... du kannst ja c++, das Prinzip der Rekursion und von Bäumen ist dir bekannt :wink:. Swingoberflächen bestehen aus Container und aus Componenten. In einen Container kann man Components stecken, und da jeder Container auch eine Component ist, kann man das schön verschachteln.

Wenn dein Button auch was machen soll, kannst du ihm einen ActionListener hinzufügen.
In der "actionPerformed"-Methode des Listeners schreibst du den Code der ausgeführt werden soll.
Es gibt da Tutorials von Sun.


----------



## Mag1c (7. Okt 2005)

Hi,

dein Stichwort heißt "LayoutManager". Schau dich mal nach einem Tutorial dazu um, kann dir grad nix empfehlen. Bevor du dich an die Actions machst, solltest du erstmal die GUI zusammenzaubern. Und dabei spielt der LayoutManager eine wichtige Rolle. Dieser bestimmt nämlich in erster Linie, wie die einzelnen GUI-Komponenten angeordnet werden. Es gibt verschiedene LayoutManager (z.B. BoxLayout, FlowLayout, BorderLayout, ...) und man sucht sich immer einen für die geplante GUI passenden aus.

Achja, bevor du mit LayoutManagern experimentierst, bring doch überhaupt erstmal irgendwelche Komponenten in dein Fenster (oMainWindow.getContentPane().add(...)).

Gruß
Mag1c


----------



## Gast (7. Okt 2005)

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

import javax.swing.*;

public class cal 
{ 
  private static JButton button1 = new JButton("operation1");
  private static JButton button2 = new JButton("operation2");
  
    public static void main(String args[]) 
    { 
        JFrame oMainWindow = new JFrame("M.Richter Basic Calculator Vers.1.0.0"); 
        oMainWindow.setSize(500,500); 
        oMainWindow.setVisible(true); 
        oMainWindow.getContentPane().setLayout(new FlowLayout());
        oMainWindow.getContentPane().add(button1);
        oMainWindow.getContentPane().add(button2);
        button1.addActionListener(new ActionListener()
          {
          	public void actionPerformed(ActionEvent e)
            {// rechne was Du willst
          	  JOptionPane.showMessageDialog(null, "Juhu Button1");
          	}});
        oMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    } 
}
```


----------



## Beni (7. Okt 2005)

So geht das: :wink:
Lass dich nicht davon erschlagen, sondern versuch zu verstehen, was da passiert. Was die Methoden machen, kannst du ja in der API nachlesen...


```
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Calculator extends JPanel{
	public static void main( String[] args ) {
		JFrame frame = new JFrame();
		frame.getContentPane().add( new Calculator() );
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frame.pack();
		frame.setLocationRelativeTo( null );
		frame.setVisible( true );
	}
	
	private JButton[] numbers = new JButton[9];
	private JFormattedTextField text;
	
	public Calculator(){
		JComponent number = makeNumbers();
		JComponent textfield = makeTextField();
		
		setLayout( new BorderLayout());
		
		add( textfield, BorderLayout.NORTH );
		add( number, BorderLayout.CENTER );
		
		for( int i = 0; i < numbers.length; i++ ){
			numbers[i].addActionListener( new ActionListener(){
				public void actionPerformed( ActionEvent e ) {
					Object source = e.getSource();
					for( int i = 0; i < numbers.length; i++ ){
						if( numbers[i] == source ){
							text.setText( text.getText() + (i+1) );
							
							break;
						}
					}
				}
			});
		}
	}
	
	private JComponent makeNumbers(){
		JPanel panel = new JPanel( new GridLayout( 3, 3 ));
		for( int i = 0; i < numbers.length; i++ ){
			numbers[i] = new JButton( String.valueOf( i+1 ));
			panel.add( numbers[i] );
		}
		
		return panel;
	}
	
	private JComponent makeTextField(){
		text = new JFormattedTextField( NumberFormat.getInstance() );
		return text;
	}
}
```


----------

