wikki Geschrieben 15. Juni 2011 Teilen Geschrieben 15. Juni 2011 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 } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 15. Juni 2011 Teilen Geschrieben 15. Juni 2011 Indem Du Du das passende Event in einem EventListener codierst und dort dann Deine Methode aufrufst Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 15. Juni 2011 Autor Teilen Geschrieben 15. Juni 2011 Danke schonmal! Hab ich gemacht, jedoch zeigt er das kleine "plus()" Modul nicht im JFrame an....wie mach ich das sichtbar? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2K1.INC Geschrieben 15. Juni 2011 Teilen Geschrieben 15. Juni 2011 (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 15. Juni 2011 von 2K1.INC Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2K1.INC Geschrieben 15. Juni 2011 Teilen Geschrieben 15. Juni 2011 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 15. Juni 2011 Autor Teilen Geschrieben 15. Juni 2011 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) { } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 15. Juni 2011 Teilen Geschrieben 15. Juni 2011 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2K1.INC Geschrieben 15. Juni 2011 Teilen Geschrieben 15. Juni 2011 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2K1.INC Geschrieben 15. Juni 2011 Teilen Geschrieben 15. Juni 2011 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 15. Juni 2011 Autor Teilen Geschrieben 15. Juni 2011 (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 15. Juni 2011 von wikki Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2K1.INC Geschrieben 15. Juni 2011 Teilen Geschrieben 15. Juni 2011 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€. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ulfmann Geschrieben 15. Juni 2011 Teilen Geschrieben 15. Juni 2011 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) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 15. Juni 2011 Autor Teilen Geschrieben 15. Juni 2011 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: 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 15. Juni 2011 Teilen Geschrieben 15. Juni 2011 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2K1.INC Geschrieben 15. Juni 2011 Teilen Geschrieben 15. Juni 2011 (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 15. Juni 2011 von 2K1.INC Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2K1.INC Geschrieben 15. Juni 2011 Teilen Geschrieben 15. Juni 2011 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(); } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 15. Juni 2011 Autor Teilen Geschrieben 15. Juni 2011 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 15. Juni 2011 Autor Teilen Geschrieben 15. Juni 2011 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 ... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2K1.INC Geschrieben 15. Juni 2011 Teilen Geschrieben 15. Juni 2011 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.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.