# MessageBox Position Verändern



## BlonderEngel (16. Apr 2012)

hallo,

ich habe für die Uni einen Taschenrechner Programmieren dürfen, soweit läuft der auch ohne Probleme.

Nur soll bei ungültigen Eingaben eine MessageBox angezeigt werden (das klppt auch ohne Probleme), aber mir gefällt die Position der MessageBox nicht, denn diese wird immer mittig auf dem Bildschirm ausgegeben.

Wie kann ich das genau ändern? Habe im Netz schon nach Lösungen gesucht aber anscheinend ist das nicht ganz so einfach.

Würde mich über Anregungen und Vorschläge freuen.

lg Yvonne


----------



## Fab1 (16. Apr 2012)

Was meinst du genau mit MessageBox? Eine JOptionPane? Falls ja, kann man bei dieser die Position relativ zu anderen Komponenten setzen. Bzw "null" für mittig auf den Bildschirm.


----------



## BlonderEngel (16. Apr 2012)

ja meine ein JOptionPane.

Dann Versuche ich das noch mal, denn das hatte ich zwar schon versuch aber da ging es nicht.
Aber vielleicht hatte ich auch nen Fehler drinen.

Schon mal danke für die antwort.

lg Yvonne


----------



## BlonderEngel (16. Apr 2012)

ich habe das jetzt mal versucht:
hier mal mein gesammter Code:

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/**
 * This is a simple calculator for basic arithmetic operations
 * 
 * @author yvonne
 * 
 */

public class Taschenrechner extends JFrame
{
	/**
	 * Create new Frame, set visible, set close Operation
	 * 
	 * @param args
	 */

	public static void main(String[] args)
	{
		TaschenrechnerFrame frame = new TaschenrechnerFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

class TaschenrechnerFrame extends JFrame
{
	/**
	 * Create new Panel, set Title, add the panel to Frame, pack create it to a
	 * preferred size that Buttons are shown in the Frame
	 */

	public TaschenrechnerFrame()
	{
		setTitle("Calculator");
		TaschenrechnerPanel panel = new TaschenrechnerPanel();
		add(panel);
		pack();
	}
}

class TaschenrechnerPanel extends JPanel
{
	JButton display;
	JPanel panel;
	double result;
	String lastCommand;
	boolean start;

	/**
	 * Set Start as True, create new JOptionPane, Create new Button Display with
	 * BoderLayout add the Buttons with numbers and commands Set PanelLayout
	 * 
	 */

	public TaschenrechnerPanel()
	{

		setLayout(new BorderLayout());

		lastCommand = "=";
		start = true;

		JOptionPane warnung = new JOptionPane();
		warnung.setLocation(500,500);

		display = new JButton(" ");
		display.setEnabled(false);
		add(display, BorderLayout.NORTH);

		ActionListener zahlen = new ZahlenAction();
		ActionListener rechenzeichen = new RechenzeichenAction();

		panel = new JPanel();
		panel.setLayout(new GridLayout(4, 4));

		addButton("7", zahlen);
		addButton("8", zahlen);
		addButton("9", zahlen);
		addButton("/", rechenzeichen);

		addButton("4", zahlen);
		addButton("5", zahlen);
		addButton("6", zahlen);
		addButton("*", rechenzeichen);

		addButton("1", zahlen);
		addButton("2", zahlen);
		addButton("3", zahlen);
		addButton("-", rechenzeichen);

		addButton("0", zahlen);
		addButton(".", zahlen);
		addButton("=", rechenzeichen);
		addButton("+", rechenzeichen);

		add(panel, BorderLayout.CENTER);
	}

	/**
	 * Create new Buttons with label add ActionListener to JButtons
	 * 
	 * @param label
	 * @param listener
	 */

	private void addButton(String label, ActionListener listener)
	{
		JButton button = new JButton(label);
		button.addActionListener(listener);
		panel.add(button);
	}

	private class ZahlenAction implements ActionListener
	{

		/**
		 * Set the text in disply
		 */

		public void actionPerformed(ActionEvent event)
		{
			String input = event.getActionCommand();
			
			if (display.getText().contains(".") && input.contains("."))
			{
				JOptionPane.showMessageDialog(null, "Ungültige Eingabe", "Warnung", JOptionPane.ERROR_MESSAGE);
				return;
			}

			if (start)
			{

				display.setText("");
				start = false;
			}

			display.setText(display.getText() + input);
		}
	}

	private class RechenzeichenAction implements ActionListener
	{

		/**
		 * if the fist input was a - set a negativ number when the first command
		 * was a other command they show an warning box is access the method
		 * calculate
		 */

		public void actionPerformed(ActionEvent event)
		{
			String command = event.getActionCommand();

			if (start)
			{
				if (command.equals("-"))
				{
					display.setText(command);
					start = false;
				} else
				{
					lastCommand = command;
					JOptionPane.showMessageDialog(null, "Ungültige Eingabe", "Warnung", JOptionPane.ERROR_MESSAGE);
					return;
				}
			} else
			{
				calculate(Double.parseDouble(display.getText()));
				lastCommand = command;
				start = true;
			}
		}
	}

	/**
	 * this methode act the calculations with chosen commands and set the text
	 * 
	 * @param x
	 */

	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);
	}
}
```

Denn leider geht es nicht, weder mit setLocation(int x, int y)
noch mit setLocation(point p).

lg Yvonne


----------



## Fab1 (16. Apr 2012)

```
JOptionPane.showMessageDialog(null, "Ungültige Eingabe", "Warnung", JOptionPane.ERROR_MESSAGE);
```

Wenn du statt "null" hier eine Komponente einfügst, dann wird die Position relativer zu der, der Komponente gesetzt. (hoffe ich zumindest) Kann gerade nichts testen.


----------



## BlonderEngel (16. Apr 2012)

ups, Stand etwas auf dem schlauch.... 

ich probiere es gleich mal!


----------



## BlonderEngel (16. Apr 2012)

nö, geht irgendwie leider nicht! 

lg mYvonne


----------



## bERt0r (16. Apr 2012)

Anstelle von null solltest du den Frame eintragen, von wo du die MessageBox aufrufst. Dann platziert Java automatisch die Box in die mitte dieses Fensters.
Anstelle des Frames geht aber auch irgendein anderer JComponent.


----------



## Fab1 (16. Apr 2012)

bERt0r hat gesagt.:


> Anstelle von null solltest du den Frame eintragen, von wo du die MessageBox aufrufst. Dann platziert Java automatisch die Box in die mitte dieses Fensters.
> Anstelle des Frames geht aber auch irgendein anderer JComponent.



Gleiches war doch auch meine Aussage oder bin ich jetzt komplett durch den Wind???:L
 Na gut egal, Hauptsache es geht.


----------

