Hallo...fang erst grad mit Swing an und deshalb einige allgemeine Fragen bzw. warum der Taschenrechner nicht funktioniert......
Taschenrechner:
Zum einem mal weiß ich nicht warum der Taschenrechner nur Blödsinn ausgibt und zum Anderen hätte ich da folgende theoretische Frage:
Ich glaub ich kapier das mit den ActionListenern noch nicht so ganz. Ich sags mal wie ich das sehe:
Bsp.:
Also ein Button löst ja wenn ich einen draufklicke eine Action aus. Nun muss ich die Action aber genau definieren.
Dazu ist das Interface ActionListener da, welches die Methode actionPerformed beinhaltet.
Ich bastel mir hierbei eine anonyme Unterklasse von ActionListener in der ich genau die Action definiere welche
der Button auslösen soll. Der Sinn des Interface ist ja der dass ich zum Botton dann mehrere ActionListeners mit jeweils unterschiedlichen Aufgaben hinzufügen kann...also man leicht eine Action wieder austauschen kann. In welchen Zusammenhang steht das jetzt aber mit dem Model View Controller Prinzip? Ich hab da noch nicht wirklich einen Überblick.....
mfg,
Hannes
Taschenrechner:
Code:
package Taschenrechner;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class SwingDemo {
public static void main(String[] args) {
// 1.Komponenten erzeugen
final JTextField opd1 = new JTextField();
final JTextField opd2 = new JTextField();
JButton plus = new JButton("+");
plus.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
String s1 = opd1.getText();
String s2 = opd2.getText();
int res = Integer.parseInt(s1)+Integer.parseInt(s2);
opd1.setText(String.valueOf(res));
opd2.setText("");
}catch(NumberFormatException ex){}
}
});
JButton minus = new JButton("-");
plus.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
String s1 = opd1.getText();
String s2 = opd2.getText();
int res = Integer.parseInt(s1)-Integer.parseInt(s2);
opd1.setText(String.valueOf(res));
opd2.setText("");
}catch(NumberFormatException ex){}
}
});
JButton mul = new JButton("*");
plus.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
String s1 = opd1.getText();
String s2 = opd2.getText();
int res = Integer.parseInt(s1)*Integer.parseInt(s2);
opd1.setText(String.valueOf(res));
opd2.setText("");
}catch(NumberFormatException ex){}
}
});
JButton div = new JButton("/");
plus.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
String s1 = opd1.getText();
String s2 = opd2.getText();
int res = Integer.parseInt(s1)/Integer.parseInt(s2);
opd1.setText(String.valueOf(res));
opd2.setText("");
}catch(NumberFormatException ex){}
}
});
// 2.JPanels erzeugen, Komponenten darin einfügen und mit Layout
// Managern ausrichten
JPanel buttons = new JPanel(new FlowLayout());
buttons.add(plus);
buttons.add(minus);
buttons.add(mul);
buttons.add(div);
//JFrame erzeugen (Fenster) und JPanel darin einfügen
JPanel panel = new JPanel(new GridLayout(3,1));
panel.add(opd1);
panel.add(opd2);
panel.add(buttons);
JFrame frame = new JFrame("Taschenrechner");
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
frame.setContentPane(panel);
frame.pack(); //wenn ich das nicht mache dann passt es
// mir am Anfang das Frame nicht an die Panel an und ich
// muss das Fenster zu Beginn selber ausrichten
frame.setVisible(true); //show the frame on the screen
}
}
Zum einem mal weiß ich nicht warum der Taschenrechner nur Blödsinn ausgibt und zum Anderen hätte ich da folgende theoretische Frage:
Ich glaub ich kapier das mit den ActionListenern noch nicht so ganz. Ich sags mal wie ich das sehe:
Bsp.:
Code:
JButton plus = new JButton("+");
plus.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
String s1 = opd1.getText();
String s2 = opd2.getText();
int res = Integer.parseInt(s1)+Integer.parseInt(s2);
opd1.setText(String.valueOf(res));
opd2.setText("");
}catch(NumberFormatException ex){}
}
});
Also ein Button löst ja wenn ich einen draufklicke eine Action aus. Nun muss ich die Action aber genau definieren.
Dazu ist das Interface ActionListener da, welches die Methode actionPerformed beinhaltet.
Ich bastel mir hierbei eine anonyme Unterklasse von ActionListener in der ich genau die Action definiere welche
der Button auslösen soll. Der Sinn des Interface ist ja der dass ich zum Botton dann mehrere ActionListeners mit jeweils unterschiedlichen Aufgaben hinzufügen kann...also man leicht eine Action wieder austauschen kann. In welchen Zusammenhang steht das jetzt aber mit dem Model View Controller Prinzip? Ich hab da noch nicht wirklich einen Überblick.....
mfg,
Hannes