Zum Inhalt springen

[Java Swing] Methode im Frame aufrufen?


Empfohlene Beiträge

Geschrieben

Hallo liebes Forum,

Im Frame ist eine Menüleiste, in der Menüleiste sind 4 Menüitems. Wenn ich nun 1 Eintrag anklicke soll sich darunter das jeweilige Programm öffnen (sind Methoden)...

Wie stelle ich das an? Bin ein totaler Java bzw. Swing Neuling, daher bitte nur verständliche Hilfe :)

Ich habe übrigens schon viele Tutorien durchgeschaut, aber ein passendes dazu finde ich nicht :(

Grüße

-------------

//Importieren der swing Pakete ect.

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;




public class oberfläche extends JFrame implements ActionListener{


	private static final long serialVersionUID = 1L;


	public static void minus(){

		//Eingabefelder erzeugen

		final JTextField ein1 = new JTextField();

		final JTextField ein2= new JTextField();

		final JTextField erg = new JTextField();


		//Eingabefelder Optimieren

		ein1.setBounds(250, 35, 200, 25);

		ein2.setBounds(250, 85, 200, 25);

		erg.setBounds(250,130,200,25);





		//JButton erzeugen

		JButton berechnen = new JButton ("Berechnen");

		JButton reset = new JButton ("Zurücksetzen");

		JButton exit = new JButton ("Beenden");


		//Berechnen Button

		berechnen.setForeground(Color.blue);

		berechnen.setBounds(35, 200, 200, 50);


		//Programmierung von Berechnen

		berechnen.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	              float num1, num2, erg1;

	              num1 = Float.parseFloat(ein1.getText());

	              num2 = Float.parseFloat(ein2.getText());


	              erg1 = num1 - num2;


	              erg.setText(String.valueOf(erg1));


	        }

	    });


	}


	public static void plus () {



		//Eingabefelder erzeugen

		final JTextField ein1 = new JTextField();

		final JTextField ein2= new JTextField();

		final JTextField erg = new JTextField();


		//Eingabefelder Optimieren

		ein1.setBounds(250, 35, 200, 25);

		ein2.setBounds(250, 85, 200, 25);

		erg.setBounds(250,130,200,25);





		//JButton erzeugen

		JButton berechnen = new JButton ("Berechnen");

		JButton reset = new JButton ("Zurücksetzen");

		JButton exit = new JButton ("Beenden");


		//Berechnen Button

		berechnen.setForeground(Color.blue);

		berechnen.setBounds(35, 200, 200, 50);


		//Programmierung von Berechnen

		berechnen.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	              float num1, num2, erg1;

	              num1 = Float.parseFloat(ein1.getText());

	              num2 = Float.parseFloat(ein2.getText());


	              erg1 = num1 + num2;


	              erg.setText(String.valueOf(erg1));


	        }

	    });


		//Reset Button

		reset.setForeground(Color.blue);

		reset.setBounds(250, 200, 200, 50);


		//Programmierung von Reset

		reset.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	            ein1.setText("");

	            ein2.setText("");

	            erg.setText("");   }

	    });


		//Exit Button

		exit.setForeground(Color.red);

		exit.setBounds(350, 300, 100 ,50);


		//Programmierung des Exit Buttons, wonach er das Programm nach aktivierung beenden soll

	    exit.addActionListener(new ActionListener() {

	         public void actionPerformed(ActionEvent event) {

	             System.exit(0);

	        }

	     });



		// Label´s werden erzeugt. mit setForeground wird die Farbe der Schrift festgelegt.

		final JLabel wert1 = new JLabel ("Wert 1 : ");

		wert1.setForeground(Color.black);

		wert1.setBounds(100, 25, 100, 50);



		final JLabel wert2 = new JLabel ("Wert 2 : ");

		wert2.setForeground(Color.black);

		wert2.setBounds(100, 75, 100, 50);


		final JLabel ergebniss = new JLabel ("Ergebniss : ");

		ergebniss.setForeground(Color.black);

		ergebniss.setBounds(80, 120, 100, 50);


	}



	public static void main(String[] args) {

		oberfläche app;


	//Das JFrame, hier kommt später alles drauf

	JFrame frame = new JFrame();	

	frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

	frame.setSize(800,600);

	frame.setResizable(false);

	frame.setVisible(true);

	frame.setLocationRelativeTo(null);


	//Menübar

	JMenuBar menubar = new JMenuBar();

	JMenu	datei = new JMenu("Datei");

	JMenu 	rechenart = new JMenu("Rechenart");


	//Fügt die beiden Obermenüßs am oberen Programmrand hinzu

	menubar.add(datei);

	menubar.add(rechenart);

	frame.setJMenuBar(menubar);


	//Beenden Untermenü

	Action exitaction = new AbstractAction ("Beenden") {

	public void actionPerformed (ActionEvent e) {

		System.exit(0);

	}};

	datei.add(exitaction);


	Action plus = new AbstractAction ("+   Addieren") {

		public void actionPerformed (ActionEvent e){

		app.plus().show();

		}};

		Action minus = new AbstractAction ("-   Subtrahieren") {

			public void actionPerformed (ActionEvent e){


			}};

			Action divide = new AbstractAction ("/   Dividieren") {

				public void actionPerformed (ActionEvent e){


				}};

				Action multiplicate = new AbstractAction ("*   Multiplizieren") {

					public void actionPerformed (ActionEvent e){


					}};



	rechenart.add(plus);

	rechenart.add(minus);

	rechenart.add(divide);

	rechenart.add(multiplicate);




	}


	@Override

	public void actionPerformed(ActionEvent e) {

		// TODO Auto-generated method stub


	}




}

Geschrieben (bearbeitet)

Hallo,

ich denk mal das sollte ein Taschenrechner werden, was es aber iwie nicht ist.

Ich will nicht unfreundlich sein, nur ehrlich und das ist einfach nur querfeld ein in der OOP was du da treibst.. used modifier ohne zu wissen was die machen. du hast oop iwie nicht ganz durchschaut.

hier ist dein code bisl verbessert und kommentiert, zudem solltest du dir ein flag setzten damit du weist ob nun plus oder minus gemacht werden muss...


//Importieren der swing Pakete ect.

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;




public class oberflaeche extends JFrame implements ActionListener{


	//nicht nötig 

	private static final long serialVersionUID = 1L;


	// Memverebene hier kommt alles hin was du im ganzen Programm brauchst wichtig sichtbarkeit angeben ohne angabe ist es package

	private JTextField ein1; //Namen ohne Zahlen drin am besten 

	private JTextField ein2; 

	private JTextField erg;

	// final sagt nur es ist konstant somit nicht änderbar und sinnfrei in deiner werwendung!


	// Ob im konstruktor oder hier instanziiert ist ist egal sollte aber einheitlich sein.. nur ein bsp das du beides kannst

	private	JButton berechnen = new JButton ("Berechnen");

	private JButton reset = new JButton ("Zurücksetzen");

	private JButton exit = new JButton ("Beenden");


	private JMenuBar menubar = new JMenuBar();

	private	JMenu	datei = new JMenu("Datei");

	private	JMenu 	rechenart = new JMenu("Rechenart");



	// konstruktor hier machst du alles was beim default load gebraucht wird z.B. die Variablen instanziieren 

	public Oberflache(){

		// du bist schon ein Frame somit brauchst du nicht noch eins deklarieren sondern nur deine Klasse instanziieren 

		setDefaultCloseOperation(EXIT_ON_CLOSE);

		setSize(800,600);

		setResizable(false);

		setVisible(true);

		setLocationRelativeTo(null);


		//Fügt die beiden Obermenüßs am oberen Programmrand hinzu

		menubar.add(datei);

		menubar.add(rechenart);

		setJMenuBar(menubar);



		ein1 = new JTextField();

		ein2 = new JTextField();

		erg = new JTextField();


		//Eingabefelder Optimieren <--- optimieren? positionieren eher kann man glaub ich anders auch was vll eleganter wäre

		ein1.setBounds(250, 35, 200, 25);

		ein2.setBounds(250, 85, 200, 25);

		erg.setBounds(250,130,200,25);


		berechnen.setForeground(Color.blue);

		berechnen.setBounds(35, 200, 200, 50);


		//Reset Button

		reset.setForeground(Color.blue);

		reset.setBounds(250, 200, 200, 50);


		//Programmierung von Reset <-- implementierung heist es

		reset.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	            ein1.setText("");

	            ein2.setText("");

	            erg.setText("");   }

	    });


		//Exit Button

		exit.setForeground(Color.red);

		exit.setBounds(350, 300, 100 ,50);


		//Programmierung des Exit Buttons, wonach er das Programm nach aktivierung beenden soll

	    exit.addActionListener(new ActionListener() {

	         public void actionPerformed(ActionEvent event) {

	             System.exit(0);

	        }

	     });



		// Label´s werden erzeugt. mit setForeground wird die Farbe der Schrift festgelegt.

		final JLabel wert1 = new JLabel ("Wert 1 : ");

		wert1.setForeground(Color.black);

		wert1.setBounds(100, 25, 100, 50);



		final JLabel wert2 = new JLabel ("Wert 2 : ");

		wert2.setForeground(Color.black);

		wert2.setBounds(100, 75, 100, 50);


		final JLabel ergebniss = new JLabel ("Ergebniss : ");

		ergebniss.setForeground(Color.black);

		ergebniss.setBounds(80, 120, 100, 50);


	}



	public static void plus () {


		//Programmierung von Berechnen

		berechnen.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	              float num1, num2, erg1;

	              num1 = Float.parseFloat(ein1.getText());

	              num2 = Float.parseFloat(ein2.getText());


	              erg1 = num1 + num2;


	              erg.setText(String.valueOf(erg1));


	        }

	    });		

	}



	public static void main(String[] args) {

		// das ist sinnfrei wenn du über Klassennamen zugreifen willst brauchst du keine variable der klasse 

		oberfläche app;


		Oberflaeche aktObj = new Oberflaeche();

	}


	@Override

	public void actionPerformed(ActionEvent e) {

		// TODO Auto-generated method stub


	}

}

kann sein das paar kleine fehler drin sind, habs mit notepad++ schnell bearbeitet und nicht getestet

Bearbeitet von 2K1.INC
Geschrieben

was meinst du damit er zeigt dir das kleine plus() nicht an? im Menü?

Du musst warscheinlich die GUI aktualisieren und du musst noch was ich vorher im code vergessen hab setVisible(true) aufrufen sonst zeigt ers dir nicht an.

Geschrieben
Hallo,

ich denk mal das sollte ein Taschenrechner werden, was es aber iwie nicht ist.

Ich will nicht unfreundlich sein, nur ehrlich und das ist einfach nur querfeld ein in der OOP was du da treibst.. used modifier ohne zu wissen was die machen. du hast oop iwie nicht ganz durchschaut.

kann sein das paar kleine fehler drin sind, habs mit notepad++ schnell bearbeitet und nicht getestet

Danke schonmal! Wieso sollte mich das beleidigen? ;)

Bin eben neu in Java und hab quasi ein Quereinstieg gemacht...

Dein Quellcode is ganz nützlich, man muss das halt auch mal gesehen haben.. Jedoch kann man mit der Main Methode gar nichts Anfangen? Wa soll ich da ändern? (weil so wies jetzt ist, geht es nicht :/ )

ps: seit meinen ersten Post habe ich es überarbeitet (is im Prinzip immernoch falsch...):

//Importieren der swing Pakete ect.

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;




public class oberfläche extends JFrame implements ActionListener{


	private static final long serialVersionUID = 1L;


	public static void minus(){

		JFrame frame = new JFrame();

		frame.setDefaultCloseOperation(HIDE_ON_CLOSE);

		frame.setVisible(true);

		frame.setLayout(null);

		frame.setSize(500,500);

		frame.setLocationRelativeTo(null);

		frame.setTitle("Minus");

		//Eingabefelder erzeugen

		final JTextField ein1 = new JTextField();

		final JTextField ein2= new JTextField();

		final JTextField erg = new JTextField();


		//Eingabefelder Optimieren

		ein1.setBounds(250, 35, 200, 25);

		ein2.setBounds(250, 85, 200, 25);

		erg.setBounds(250,130,200,25);





		//JButton erzeugen

		JButton berechnen = new JButton ("Berechnen");

		JButton reset = new JButton ("Zurücksetzen");

		JButton exit = new JButton ("Beenden");


		//Berechnen Button

		berechnen.setForeground(Color.blue);

		berechnen.setBounds(35, 200, 200, 50);


		//Programmierung von Berechnen

		berechnen.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	              float num1, num2, erg1;

	              num1 = Float.parseFloat(ein1.getText());

	              num2 = Float.parseFloat(ein2.getText());


	              erg1 = num1 - num2;


	              erg.setText(String.valueOf(erg1));


	        }

	    });


		//Reset Button

		reset.setForeground(Color.blue);

		reset.setBounds(250, 200, 200, 50);


		//Programmierung von Reset

		reset.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	            ein1.setText("");

	            ein2.setText("");

	            erg.setText("");   }

	    });


		//Exit Button

		exit.setForeground(Color.red);

		exit.setBounds(350, 300, 100 ,50);


		//Programmierung des Exit Buttons, wonach er das Programm nach aktivierung beenden soll

	    exit.addActionListener(new ActionListener() {

	         public void actionPerformed(ActionEvent event) {

	             System.exit(0);

	        }

	     });



		// Label´s werden erzeugt. mit setForeground wird die Farbe der Schrift festgelegt.

		final JLabel wert1 = new JLabel ("Wert 1 : ");

		wert1.setForeground(Color.black);

		wert1.setBounds(100, 25, 100, 50);



		final JLabel wert2 = new JLabel ("Wert 2 : ");

		wert2.setForeground(Color.black);

		wert2.setBounds(100, 75, 100, 50);


		final JLabel ergebniss = new JLabel ("Ergebniss : ");

		ergebniss.setForeground(Color.black);

		ergebniss.setBounds(80, 120, 100, 50);



		frame.add(ein2);

		frame.add(ein1);

		frame.add(wert1);

		frame.add(wert2);

		frame.add(ergebniss);

		frame.add(exit);

		frame.add(reset);

		frame.add(berechnen);

		frame.add(erg);

	}


	public static void plus () {


		JFrame frame = new JFrame();

		frame.setDefaultCloseOperation(HIDE_ON_CLOSE);

		frame.setVisible(true);

		frame.setLayout(null);

		frame.setSize(500,500);

		frame.setLocationRelativeTo(null);

		frame.setTitle("Plus");

		//Eingabefelder erzeugen

		final JTextField ein1 = new JTextField();

		final JTextField ein2= new JTextField();

		final JTextField erg = new JTextField();


		//Eingabefelder Optimieren

		ein1.setBounds(250, 35, 200, 25);

		ein2.setBounds(250, 85, 200, 25);

		erg.setBounds(250,130,200,25);





		//JButton erzeugen

		JButton berechnen = new JButton ("Berechnen");

		JButton reset = new JButton ("Zurücksetzen");

		JButton exit = new JButton ("Beenden");


		//Berechnen Button

		berechnen.setForeground(Color.blue);

		berechnen.setBounds(35, 200, 200, 50);


		//Programmierung von Berechnen

		berechnen.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	              float num1, num2, erg1;

	              num1 = Float.parseFloat(ein1.getText());

	              num2 = Float.parseFloat(ein2.getText());


	              erg1 = num1 + num2;


	              erg.setText(String.valueOf(erg1));


	        }

	    });


		//Reset Button

		reset.setForeground(Color.blue);

		reset.setBounds(250, 200, 200, 50);


		//Programmierung von Reset

		reset.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	            ein1.setText("");

	            ein2.setText("");

	            erg.setText("");   }

	    });


		//Exit Button

		exit.setForeground(Color.red);

		exit.setBounds(350, 300, 100 ,50);


		//Programmierung des Exit Buttons, wonach er das Programm nach aktivierung beenden soll

	    exit.addActionListener(new ActionListener() {

	         public void actionPerformed(ActionEvent event) {

	             System.exit(0);

	        }

	     });



		// Label´s werden erzeugt. mit setForeground wird die Farbe der Schrift festgelegt.

		final JLabel wert1 = new JLabel ("Wert 1 : ");

		wert1.setForeground(Color.black);

		wert1.setBounds(100, 25, 100, 50);



		final JLabel wert2 = new JLabel ("Wert 2 : ");

		wert2.setForeground(Color.black);

		wert2.setBounds(100, 75, 100, 50);


		final JLabel ergebniss = new JLabel ("Ergebniss : ");

		ergebniss.setForeground(Color.black);

		ergebniss.setBounds(80, 120, 100, 50);



		frame.add(ein2);

		frame.add(ein1);

		frame.add(wert1);

		frame.add(wert2);

		frame.add(ergebniss);

		frame.add(exit);

		frame.add(reset);

		frame.add(berechnen);

		frame.add(erg);

	}


	public static void multiplicate () {


		JFrame frame = new JFrame();

		frame.setDefaultCloseOperation(HIDE_ON_CLOSE);

		frame.setVisible(true);

		frame.setLayout(null);

		frame.setSize(500,500);

		frame.setLocationRelativeTo(null);

		frame.setTitle("Multiplizieren");

		//Eingabefelder erzeugen

		final JTextField ein1 = new JTextField();

		final JTextField ein2= new JTextField();

		final JTextField erg = new JTextField();


		//Eingabefelder Optimieren

		ein1.setBounds(250, 35, 200, 25);

		ein2.setBounds(250, 85, 200, 25);

		erg.setBounds(250,130,200,25);





		//JButton erzeugen

		JButton berechnen = new JButton ("Berechnen");

		JButton reset = new JButton ("Zurücksetzen");

		JButton exit = new JButton ("Beenden");


		//Berechnen Button

		berechnen.setForeground(Color.blue);

		berechnen.setBounds(35, 200, 200, 50);


		//Programmierung von Berechnen

		berechnen.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	              float num1, num2, erg1;

	              num1 = Float.parseFloat(ein1.getText());

	              num2 = Float.parseFloat(ein2.getText());


	              erg1 = num1 * num2;


	              erg.setText(String.valueOf(erg1));


	        }

	    });


		//Reset Button

		reset.setForeground(Color.blue);

		reset.setBounds(250, 200, 200, 50);


		//Programmierung von Reset

		reset.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	            ein1.setText("");

	            ein2.setText("");

	            erg.setText("");   }

	    });


		//Exit Button

		exit.setForeground(Color.red);

		exit.setBounds(350, 300, 100 ,50);


		//Programmierung des Exit Buttons, wonach er das Programm nach aktivierung beenden soll

	    exit.addActionListener(new ActionListener() {

	         public void actionPerformed(ActionEvent event) {

	             System.exit(0);

	        }

	     });



		// Label´s werden erzeugt. mit setForeground wird die Farbe der Schrift festgelegt.

		final JLabel wert1 = new JLabel ("Wert 1 : ");

		wert1.setForeground(Color.black);

		wert1.setBounds(100, 25, 100, 50);



		final JLabel wert2 = new JLabel ("Wert 2 : ");

		wert2.setForeground(Color.black);

		wert2.setBounds(100, 75, 100, 50);


		final JLabel ergebniss = new JLabel ("Ergebniss : ");

		ergebniss.setForeground(Color.black);

		ergebniss.setBounds(80, 120, 100, 50);



		frame.add(ein2);

		frame.add(ein1);

		frame.add(wert1);

		frame.add(wert2);

		frame.add(ergebniss);

		frame.add(exit);

		frame.add(reset);

		frame.add(berechnen);

		frame.add(erg);

	}


	public static void divide () {


		JFrame frame = new JFrame();

		frame.setDefaultCloseOperation(HIDE_ON_CLOSE);

		frame.setVisible(true);

		frame.setLayout(null);

		frame.setSize(500,500);

		frame.setLocationRelativeTo(null);

		frame.setTitle("Dividieren");

		//Eingabefelder erzeugen

		final JTextField ein1 = new JTextField();

		final JTextField ein2= new JTextField();

		final JTextField erg = new JTextField();


		//Eingabefelder Optimieren

		ein1.setBounds(250, 35, 200, 25);

		ein2.setBounds(250, 85, 200, 25);

		erg.setBounds(250,130,200,25);





		//JButton erzeugen

		JButton berechnen = new JButton ("Berechnen");

		JButton reset = new JButton ("Zurücksetzen");

		JButton exit = new JButton ("Beenden");


		//Berechnen Button

		berechnen.setForeground(Color.blue);

		berechnen.setBounds(35, 200, 200, 50);


		//Programmierung von Berechnen

		berechnen.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	              float num1, num2, erg1;

	              num1 = Float.parseFloat(ein1.getText());

	              num2 = Float.parseFloat(ein2.getText());


	              erg1 = num1 / num2;


	              erg.setText(String.valueOf(erg1));


	        }

	    });


		//Reset Button

		reset.setForeground(Color.blue);

		reset.setBounds(250, 200, 200, 50);


		//Programmierung von Reset

		reset.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	            ein1.setText("");

	            ein2.setText("");

	            erg.setText("");   }

	    });


		//Exit Button

		exit.setForeground(Color.red);

		exit.setBounds(350, 300, 100 ,50);


		//Programmierung des Exit Buttons, wonach er das Programm nach aktivierung beenden soll

	    exit.addActionListener(new ActionListener() {

	         public void actionPerformed(ActionEvent event) {

	             System.exit(0);

	        }

	     });



		// Label´s werden erzeugt. mit setForeground wird die Farbe der Schrift festgelegt.

		final JLabel wert1 = new JLabel ("Wert 1 : ");

		wert1.setForeground(Color.black);

		wert1.setBounds(100, 25, 100, 50);



		final JLabel wert2 = new JLabel ("Wert 2 : ");

		wert2.setForeground(Color.black);

		wert2.setBounds(100, 75, 100, 50);


		final JLabel ergebniss = new JLabel ("Ergebniss : ");

		ergebniss.setForeground(Color.black);

		ergebniss.setBounds(80, 120, 100, 50);



		frame.add(ein2);

		frame.add(ein1);

		frame.add(wert1);

		frame.add(wert2);

		frame.add(ergebniss);

		frame.add(exit);

		frame.add(reset);

		frame.add(berechnen);

		frame.add(erg);

	}


	public static void main(String[] args) {



	//Das JFrame, hier kommt später alles drauf

	JFrame frame = new JFrame();	

	frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

	frame.setSize(100,50);

	frame.setResizable(false);

	frame.setVisible(true);

	frame.setLocationRelativeTo(null);


	//Menübar

	JMenuBar menubar = new JMenuBar();

	JMenu	datei = new JMenu("Datei");

	JMenu 	rechenart = new JMenu("Rechenart");


	//Fügt die beiden Obermenüßs am oberen Programmrand hinzu

	menubar.add(datei);

	menubar.add(rechenart);

	frame.setJMenuBar(menubar);


	//Beenden Untermenü

	Action exitaction = new AbstractAction ("Beenden") {

	public void actionPerformed (ActionEvent e) {

		System.exit(0);

	}};

	datei.add(exitaction);


	Action plus = new AbstractAction ("+   Addieren") {

		public void actionPerformed (ActionEvent e){

		plus();


		}};

		Action minus = new AbstractAction ("-   Subtrahieren") {

			public void actionPerformed (ActionEvent e){

				minus();

			}};

			Action divide = new AbstractAction ("/   Dividieren") {

				public void actionPerformed (ActionEvent e){

				divide ();

				}};

				Action multiplicate = new AbstractAction ("*   Multiplizieren") {

					public void actionPerformed (ActionEvent e){

					multiplicate();

					}};



	rechenart.add(plus);

	rechenart.addSeparator();

	rechenart.add(minus);

	rechenart.addSeparator();

	rechenart.add(divide);

	rechenart.addSeparator();

	rechenart.add(multiplicate);






	}


	@Override

	public void actionPerformed(ActionEvent e) {



	}




}

Geschrieben

hier ist dein code bisl verbessert und kommentiert, zudem solltest du dir ein flag setzten damit du weist ob nun plus oder minus gemacht werden muss...

Nein man braucht kein Flag dafür. Wenn man ein entsprechendes JMenu mit RadioButtons erstelle (siehe How to Use Menus (The Javaâ„¢ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)), dann kann man den Status der RadioButton-Gruppe abfragen, da in diesem Fall immer nur ein Eintrag selektiert werden kann, habe ich eindeutig den Operator (*, +, /, -) zugeordnet.

Geschrieben

ja wenn ers so macht dann nicht aber wenn er in einer action beides drin hätte... weil vorher hatte er 1 button den er 2 mal instanziiert hat je nach wahl und dann einen listener drauf gmacht hat der plus oder minus gmacht hat

Geschrieben

du solltest dir die kommentare durchlesen du machst den gleichen fehler wie vorher. du machst 4 mal das gleiche wobei du es an einer stelle machen könntest damit sparst du zeit und es ist leserlicher, leichter zum warten und zum verstehen.

Geschrieben (bearbeitet)
du solltest dir die kommentare durchlesen du machst den gleichen fehler wie vorher. du machst 4 mal das gleiche wobei du es an einer stelle machen könntest damit sparst du zeit und es ist leserlicher, leichter zum warten und zum verstehen.

Ich schrieb das ich dies in der Zwichenzeit gemacht habe, naja vergiss es einfach :cool:

Hier mal der Aktuelle Code:

//Importieren der swing Pakete ect.

	import java.awt.Color;

	import java.awt.event.ActionEvent;

	import java.awt.event.ActionListener;

import javax.swing.*;


public class oberflaeche extends JFrame implements ActionListener{



	private static JTextField ein1; 

	private static JTextField ein2; 

	private static JTextField erg;



	private static JButton berechnen = new JButton ("Berechnen");

	private JButton reset = new JButton ("Zurücksetzen");

	private JButton exit = new JButton ("Beenden");


	private JMenuBar menubar = new JMenuBar();

	private	JMenu	datei = new JMenu("Datei");

	private	JMenu 	rechenart = new JMenu("Rechenart");


	public oberflaeche () {

		setDefaultCloseOperation(EXIT_ON_CLOSE);

		setSize(800,600);

		setResizable(false);

		setVisible(true);

		setLocationRelativeTo(null);


		menubar.add(datei);

		menubar.add(rechenart);

		setJMenuBar(menubar);


		ein1.setBounds(250, 35, 200, 25);

		ein2.setBounds(250, 85, 200, 25);

		erg.setBounds(250,130,200,25);


		berechnen.setForeground(Color.blue);

		berechnen.setBounds(35, 200, 200, 50);


		//Reset Button

		reset.setForeground(Color.blue);

		reset.setBounds(250, 200, 200, 50);


		//Implementierung von Reset 

		reset.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	            ein1.setText("");

	            ein2.setText("");

	            erg.setText("");   }

	    });

		//Exit Button

		exit.setForeground(Color.red);

		exit.setBounds(350, 300, 100 ,50);



	    exit.addActionListener(new ActionListener() {

	         public void actionPerformed(ActionEvent event) {

	             System.exit(0);

	        }

	     });



		// Label´s werden erzeugt. mit setForeground wird die Farbe der Schrift festgelegt.

		final JLabel wert1 = new JLabel ("Wert 1 : ");

		wert1.setForeground(Color.black);

		wert1.setBounds(100, 25, 100, 50);



		final JLabel wert2 = new JLabel ("Wert 2 : ");

		wert2.setForeground(Color.black);

		wert2.setBounds(100, 75, 100, 50);


		final JLabel ergebniss = new JLabel ("Ergebniss : ");

		ergebniss.setForeground(Color.black);

		ergebniss.setBounds(80, 120, 100, 50);


	}


public static void plus () {


		//Programmierung von Berechnen

		berechnen.addActionListener(new ActionListener() {

	        public void actionPerformed(ActionEvent event) {

	              float num1, num2, erg1;

	              num1 = Float.parseFloat(ein1.getText());

	              num2 = Float.parseFloat(ein2.getText());


	              erg1 = num1 + num2;


	              erg.setText(String.valueOf(erg1));


	        }

	    });		

	}


public static void minus () {


	//Programmierung von Berechnen

	berechnen.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent event) {

              float num1, num2, erg1;

              num1 = Float.parseFloat(ein1.getText());

              num2 = Float.parseFloat(ein2.getText());


              erg1 = num1 - num2;


              erg.setText(String.valueOf(erg1));


        }

    });		

}public static void dividieren () {


	//Programmierung von Berechnen

	berechnen.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent event) {

              float num1, num2, erg1;

              num1 = Float.parseFloat(ein1.getText());

              num2 = Float.parseFloat(ein2.getText());


              erg1 = num1 / num2;


              erg.setText(String.valueOf(erg1));


        }

    });		

}public static void multiplizieren () {


	//Programmierung von Berechnen

	berechnen.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent event) {

              float num1, num2, erg1;

              num1 = Float.parseFloat(ein1.getText());

              num2 = Float.parseFloat(ein2.getText());


              erg1 = num1  * num2;


              erg.setText(String.valueOf(erg1));


        }

    });		

}



		public void main(String[] args) {

			oberflaeche obj = new oberflaeche();




		}

		@Override

		public void actionPerformed(ActionEvent arg0) {

			// TODO Auto-generated method stub


		}



}

Nun frage ich mich: Was muss noch ins Main? Wie inplementiere ich die MenüItems? Wie kommt der Ausgewählte Bereich direkt under die MenüBar?! Edit: Die MenüItems habe ich jetzt so gemacht:
	Action plus = new AbstractAction ("+   Addieren") {

			public void actionPerformed (ActionEvent e){

			plus();


			}};

			Action minus = new AbstractAction ("-   Subtrahieren") {

				public void actionPerformed (ActionEvent e){

					minus();

				}};

				Action divide = new AbstractAction ("/   Dividieren") {

					public void actionPerformed (ActionEvent e){

					dividieren ();

					}};

					Action multiplicate = new AbstractAction ("*   Multiplizieren") {

						public void actionPerformed (ActionEvent e){

						multiplizieren();

						}};

Bearbeitet von wikki
Geschrieben

in die Main kommt eig nur der Aufruf der Klasse, die Main ist ja nur der einstiegspunkt im Programm mehr nicht.

Die Menüitems sind ja auf Memberebene somit kannst du wenn du in der Klasse bist immer drauf zugreifen und ihnen einen Listener anhängen, sicherlich gehts von ausen auch aber da muss die Sichtbarkeit auf public sein.

Anhängen tust die Sachen mit der add() Methode von der Klasse Frame, du bist ja ein Frame somit hast ja alles Methoden auch die die Frameklasse hat.

Ich weis leider nicht wie weit du vom Wissen her bist in der OOP, jedoch solltest du dir vll das Openbook Java ist auch eine Insel anschauen(online vorhanden und Kostenlos auch downloadbar) da wird alles schön erklärt und sehr gut mit Beispielen. Aber ich denkmal du bist noch nicht so weit weil du nutzt ein Null Layout was man aber vermeiden sollte. Wenn du Java lernen willst solltest dir das Buch anschauen sehr hilfreich fürs Grundwissen und später bei Problemen alles für 0€.

Geschrieben
Aber ich denkmal du bist noch nicht so weit weil du nutzt ein Null Layout was man aber vermeiden sollte. Wenn du Java lernen willst solltest dir das Buch anschauen sehr hilfreich fürs Grundwissen und später bei Problemen alles für 0€.

Da muss ich bei beidem widersprechen. Zum Einen hat das Inselbuch zu wenig beschreibenden Text (meinen Ansprüchen hätte es zum Einstieg nicht genügt, weil einem da schon große Klumpen Theorie in wenigen Zeilen vor die Füße geworfen werden). Ich empfehle immer das Handbuch der Java Programmierung vom Addison Wesley Verlag.

Und die Benutzung von null-Layouts sagt überhaupt nichts über den Kentnissstand des Programmierers aus. Natürlich ist die Benutzung von Managern schön und stilvoller, aber ich bin mit dem zu-Fuß-Weg immer bestens klar gekommen.

(Sorry für OT)

Geschrieben
in die Main kommt eig nur der Aufruf der Klasse, die Main ist ja nur der einstiegspunkt im Programm mehr nicht. (...)

Danke für deine Antwort.

Wenn ich nur die Klasse Aufrufe kommt folgendes:

unbenanntxvg.jpg

Uploaded with ImageShack.us

Was heißt das?

Da muss ich bei beidem widersprechen. Zum Einen hat das Inselbuch zu wenig beschreibenden Text (meinen Ansprüchen hätte es zum Einstieg nicht genügt, weil einem da schon große Klumpen Theorie in wenigen Zeilen vor die Füße geworfen werden). Ich empfehle immer das Handbuch der Java Programmierung vom Addison Wesley Verlag.

Und die Benutzung von null-Layouts sagt überhaupt nichts über den Kentnissstand des Programmierers aus. Natürlich ist die Benutzung von Managern schön und stilvoller, aber ich bin mit dem zu-Fuß-Weg immer bestens klar gekommen.

(Sorry für OT)

'Danke für die Empfehlung !

Zum null-Layout: das war eine Vorgabe, einfach um mal von Hand zu positionieren...

Ich komme aus dem C++ Bereich und da hatt ich auch noch nie GUI Programmierung, weshalb ich jetzt bewusst alles mögliche mit Swing durchgehe.

Java ist eine Insel habe ich mir angeschaut, sind viele nützliche Sachen, doch gerade solche Ding wie mein Problem werden nicht mal richtig angesprochen, man bekommt nur Themengebiete hingeklatscht, mit guter Beschreibung, aber eben für einen Anfänger lückenhaft. So beziehungen zu einander, wie man was zusammen aufbaut ect. ist da eher Mau...

Geschrieben

Verwende bitte die Uploadfunktion des Forums, denn bei manchen Usern werden Sharehoster gesperrt.

Ich komme aus dem C++ Bereich und da hatt ich auch noch nie GUI Programmierung, weshalb ich jetzt bewusst alles mögliche mit Swing durchgehe.

OT: Auch in C++ bzw Qt gibt es Layout Manager Qt 4.7: Layout Management

Java ist eine Insel habe ich mir angeschaut, sind viele nützliche Sachen, doch gerade solche Ding wie mein Problem werden nicht mal richtig angesprochen, man bekommt nur Themengebiete hingeklatscht, mit guter Beschreibung, aber eben für einen Anfänger lückenhaft. So beziehungen zu einander, wie man was zusammen aufbaut ect. ist da eher Mau...

Das ist auch nicht der Sinn dieses Buches. OOP ist unter C++ genauso wie unter Java. Dein Code muss nach den gleichen Prinzipien erstellt werden, aber der Code ist nicht wirklich nach OOP Gesichtspunkten geschrieben; er ist letztendlich eher prozedural und sequentiell und auf Dauer funktioniert das nun mal nicht. In C++ kann man so etwas machen, rein technisch wird dies auch eher funktionieren als in Java, aber vom Designkonzept ist es nicht in Ordnung.

Das Buch soll Dir eine Einführung in die Java Technologie geben und nicht in die OOP, wenn Du so etwas möchtest, dann empfehle ich z.B. Lehrbuch Grundlagen der Informatik. Konzepte und Notationen in UML, Java und C++ Algorithmik und Software-Technik, Anwendungen: Amazon.de: Helmut Balzert: Bücher

Geschrieben (bearbeitet)

die main muss ja vorhanden sein da erstellst du dir dein objekt der klasse


public static void main(String args[]){

    oberflaeche ob = new oberflaeche();

}

dein aktueller fehler wegn der main ist das du bei dir nur drin stehn hast

public void main(String args[]){

....

}

soll aber public static void main sein du hast static vergessen und schau dir dein Code nochmal an als nächstes erhälst du eine NullRefExce..

weil du manche variablen nicht instanziiert hast...

Bearbeitet von 2K1.INC
Geschrieben

hey hier schau dir das mal an das sollte dir ein stück helfen beim verstehen und auch bei deinem problem. ist sehr primitiv aber auf die schnelle gehts... und vorallem ich hasse design gar nicht mein fall..


//Importieren der swing Pakete ect.

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.GridLayout;

import java.awt.event.ActionListener;

import javax.swing.*;

import javax.swing.plaf.basic.BasicBorders.RadioButtonBorder;


public class GUICalc extends JFrame{



	private JTextField ein1 = new JTextField(); 

	private JTextField ein2 = new JTextField(); 

	private JTextField erg = new JTextField(); 


	private JLabel zahl1 = new JLabel("Zahl 1:");

	private JLabel zahl2 = new JLabel("Zahl 2:");

	private JLabel ergebnis = new JLabel("Ergebnis:");	



	private JButton berechnen = new JButton ("Berechnen");

	private JButton reset = new JButton ("Zurücksetzen");


	private JMenuBar menubar = new JMenuBar();

	private	JMenu close = new JMenu("Close");

	private JMenuItem exit = new JMenuItem("Exit");


	public GUICalc() {

		setDefaultCloseOperation(EXIT_ON_CLOSE);

		setSize(500,300);

		setResizable(false);

		setLocationRelativeTo(null);

		setLayout(new BorderLayout());



		close.add(exit);

		menubar.add(close);

		setJMenuBar(menubar);




		JPanel centerpan = new JPanel(); 

		centerpan.setLayout(new GridLayout(1,2));

		centerpan.setBackground(Color.black);


		JPanel centerleftpan = new JPanel();

		centerleftpan.setLayout(new GridLayout(3,1));

		centerleftpan.setBackground(Color.RED);


		JPanel centerrightpan = new JPanel();

		centerrightpan.setLayout(new GridLayout(3,1));

		centerrightpan.setBackground(Color.GREEN);


		centerleftpan.add(zahl1);

		centerleftpan.add(zahl2);

		centerleftpan.add(ergebnis);

		centerpan.add(centerleftpan);


		centerrightpan.add(ein1);

		centerrightpan.add(ein2);

		centerrightpan.add(erg);	

		centerpan.add(centerrightpan);





		JPanel southpan = new JPanel(); 

		southpan.setLayout(new FlowLayout());

		southpan.add(berechnen);

		southpan.add(reset);


		add(centerpan, BorderLayout.CENTER);

		add(southpan, BorderLayout.SOUTH);


		exit.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {

				System.exit(0);

			}

		});


		reset.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {

				ein1.setText("");

				ein2.setText("");

				erg.setText("");

			}

		});



		ButtonGroup btnGroup = new ButtonGroup();


		JRadioButton rdbtnAdd = new JRadioButton("+");

		JRadioButton rdbtnSub = new JRadioButton("-");

		JRadioButton rdbtnDiv = new JRadioButton("/");

		JRadioButton rdbtnMul = new JRadioButton("*");


		btnGroup.add(rdbtnAdd);

		btnGroup.add(rdbtnSub);

		btnGroup.add(rdbtnDiv);

		btnGroup.add(rdbtnMul);


		JPanel northpan = new JPanel();

		northpan.setLayout(new FlowLayout());

		northpan.setBackground(Color.CYAN);


		northpan.add(rdbtnAdd);

		northpan.add(rdbtnSub);

		northpan.add(rdbtnDiv);

		northpan.add(rdbtnMul);


		add(northpan, BorderLayout.NORTH);


		berechnen.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {	

				// Hier nun schauen was selektiert is von den Radiobuttons und dementsprehcend drauf reagieren 

			}

		});

		setVisible(true);

	}



	public static void  main(String[] args) {

		new GUICalc();

	}

}


post-66964-14430449016297_thumb.jpg

Geschrieben

OT: Auch in C++ bzw Qt gibt es Layout Manager Qt 4.7: Layout Management

Ich habe weder in C++ noch eben in Java GUI´s programmiert ;) Aber danke für den Link, kann ich sehr gut gebrauchen!

Ferner Danke für´s Buch, werde ich mir gleich mitbestellen...

hey hier schau dir das mal an das sollte dir ein stück helfen beim verstehen und auch bei deinem problem. ist sehr primitiv aber auf die schnelle gehts... und vorallem ich hasse design gar nicht mein fall..

Danke das du dir so ne große Mühe gemacht hast :) Im Prinzip ist das ganze ja einfacher als ich Dachte...danke nochmals für die Hilfe!

Geschrieben

Wobei das wichtigste Fehlt, nämlich was der ActionListener macht (das war ja eig mein Ursprüngliches Problem). Da gibts auch relativ wenig Anleitungen beim Java ist auch eine Insel ...

Geschrieben

da gibts sowas schönes wo alles drin steht in der API

Java 2 Platform SE 5.0

du musst erst schauen welcher button selektiert ist

jenachdem was selektiert ist machst du dann halt, prüfs mit if anweisungen ist primitiv führt aber zum erfolg.

kleines bsp.


    double eingabe1 = double.Parse(ein1.getText())

    double eingabe2 = double.Parse(ein2.getText());

double result;

if(rdbtnAdd.isSelected())

    result = eingabe1 + eingabe2;

else if(rdbtnSub.isSelected())

    result = eingabe1 - eingabe2;

.....


erg.setText(result);

vll solltest das Ergebnis Textfeld auf Readonly setzten ka wie die Methode dazu heist.

die lösung ist sehr primitiv i know! Schau mal vll gibts ne Klasse die die Operatoren abbildet, in C# gibts das weis ich aber Java ka....

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...