Radio- Buttons - Event auslösen
-
Wer kann mir das Prinzip der Ereignis- Behandlung von Radio-Buttons an Hand eines Beispieles zeigen. Leider funktionieren die Beispiele in "Fachbüchern" dazu bei mir nicht.
public boolean action(Event e, Object o){//altes Modell
switch(e.target){
case cbox[0]: /*behandlung*/; break;
usw.hier bekomme ich die Fehlermeldung das Datentyp von e.target kein int wert ist
Die Radio- Buttens werden dargestellt, es gelingt mir aber keine Ereignis-Beh.
auch nicht über ItemListener. Eigenartigerweise git es die Probleme nicht bei
normalen Checkboxen (also mit Haken) .
In meinen 4 Java- Büchern gibt es dazu nur formelle Aussagen mit Code- Ausschnitten, die allesamt nicht zum Erfolg führen. Konkrete Beispiele fehlen leider.
Für jeden Hinweis bin ich dankbar.
-
Manchmal ist es verrückt. Ich habe das Proplem selst gelöst
Hier der Code für alle, die ähnliche Probleme haben:
import java.awt.;
import java.awt.event.;public class Auswahl extends Frame implements ItemListener
{
//Objekte für die Komponenten (Steuerelemente, Controls)
Button okBut, clrBut;//Buttons = und Clear
TextField txtField1; //Eingabefeld für Zahl 1
TextField txtField2; //Eingabefeld für Zahl 2
TextField txtField3; //ErgebnisfeldCheckboxGroup cbGr; //Radio- Button Gruppe
Checkbox[] cbox; //Mitglieder als FeldPanel radPan; //Panel für Radio-Buttons
Panel butPan; // Panel für Schaltfläche
Panel inputPan; // Panel für Eingaben
Panel outputPan; // Panel für Ausgabe
Panel tmpPan; // Panel für Panels butPan und outputPanString winkel,wert; //Ein- Ausgaben als String
double wi,we; //Ein- Ausgaben als double- ZahlAuswahl() //Konstruktor
{okBut = new Button( "Ende" );
clrBut = new Button( "Löschen" );txtField1 = new TextField(); // Eingabefeld für limit
txtField2 = new TextField(); // dto. für gemessen
txtField3 = new TextField(); // Anzeigefeld für Ergebnis
txtField3.setEditable( false ); // Ausgabe gesperrt, wenn keine Eingabe
//wichtig, da sonst ProgrammabbruchcbGr = new CheckboxGroup();//Die Gruppe
cbox = new Checkbox[4];//4 Mitglieder
cbox[0] = new Checkbox("Sinus",cbGr,false);
cbox[1] = new Checkbox("Cosinus",cbGr,false);
cbox[2] = new Checkbox("Tangens",cbGr,false);
cbox[3] = new Checkbox("Cotangens",cbGr,false);
cbox[0].addItemListener(this);
cbox[1].addItemListener(this);
cbox[2].addItemListener(this);
cbox[3].addItemListener(this);//Panel für die Radio- Buttons
radPan = new Panel();
//radPan.setLayout(new GridLayout(4,1));
radPan.add(cbox[0]);
radPan.add(cbox[1]);
radPan.add(cbox[2]);
radPan.add(cbox[3]);// Panel für die drei Schaltflächen:
// standardmäßig Flow-Layout
butPan = new Panel();
butPan.add( okBut ); // "="-Taste
butPan.add( clrBut ); // Löschtaste// Panel für die Zahleneingabe:
// GridLayout mit zwei Zeilen und zwei Spalten
inputPan = new Panel();
inputPan.setLayout( new GridLayout(2,2) );
inputPan.add( new Label("Grad (0...90)"));
inputPan.add( txtField1 );
inputPan.add( new Label("Gemessen :") );
inputPan.add( txtField2 );// Panel für die Ergebnisanzeige:
// GridLayout mit einer Zeile und zwei Spalten
outputPan = new Panel();
outputPan.setLayout( new GridLayout(1,2) );
outputPan.add( new Label("Ergebnis:"));
outputPan.add( txtField3 );// Plazieren des Schaltflächen-Panels (oben) und des
// Ergebnis-Panels (unten) auf einem Panel
// als BorderLayout:
tmpPan = new Panel();
tmpPan.setLayout( new BorderLayout() );
tmpPan.add( "North", butPan);
tmpPan.add( "South", outputPan );// Layout des gesamten Applets festlegen:
// BorderLayout mit InputPanel (oben) und
// zusammengefaßtes Panel (unten) als BorderLayout:
setLayout( new BorderLayout( ) );
add( "North", radPan);
add( "Center", inputPan );
add("South",tmpPan);
setBackground(Color.yellow);
setForeground(Color.blue);
}//Hauptprogramm erzeugt Hauptfenster, ruft Konstruktor der AußenKlasse auf
//und erzeugt damit das Layout
public static void main (String args[])
{
Frame f = new Auswahl();// Fensterobjekt erzeugenf.setSize(400,170); //Fenstergröße festlegen
f.setVisible(true); //Fenster anzeigenf.addWindowListener(new WindowAdapter() //Fenster schließen
{ //über X
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
// Ereignisbehandlung: altes Modell
//Hier wird die Ereignis- metode action() überschrieben
public boolean action( Event e, Object o )
{
if( e.target instanceof Button ) //Buttons auswerten
{
if( "Löschen".equals( o ) ) //Auswertung des = Button's
{
txtField1.setText( " "); //alle Textfelder löschen
txtField2.setText( " ");
txtField3.setText( " ");
repaint();//neu zeichnen
}if( "Ende".equals( o ) ) //Auswertung des = Button's
{
repaint();//neu zeichnen
setBackground(Color.green);
System.out.println("Danke fuer Ihre Mitarbeit");
System.exit(0);}
return true;//notwendig weil so vorgesehen}
return false;
}
//Ereignisbehandlung neues Modell,hier nicht vergessen:Komponente.addItemListener(this);
public void itemStateChanged(ItemEvent e)
{
String s = (String) e.getItem();if(s=="Sinus")
{
if(e.getStateChange()==1)//liefert 1 oder 2
{
winkel = new String(txtField1.getText()); //Eingabe des Winkelsdouble wi = Double.valueOf(winkel). doubleValue();//String in double
we = Math.sin(wi*Math.PI/180);//Sinuswert berechnen
wert = String.valueOf(we);//double in String
txtField3.setText(wert);//Ergebnis schreiben
//repaint();//Neu zeichnen
//System.out.println("Sinus= "+e.getStateChange()+" "+we);//Konsole
}
}if(s=="Cosinus")
{
if(e.getStateChange()==1)//liefert 1 oder 2
{
winkel = new String(txtField1.getText()); //Eingabe des Winkelsdouble wi = Double.valueOf(winkel). doubleValue();//String in double
we = Math.cos(wi*Math.PI/180);//Sinuswert berechnen
wert = String.valueOf(we);//double in String
txtField3.setText(wert);//Ergebnis schreiben
}
}if(s=="Tangens")
{
if(e.getStateChange()==1)//liefert 1 oder 2
{
winkel = new String(txtField1.getText()); //Eingabe des Winkelsdouble wi = Double.valueOf(winkel). doubleValue();//String in double
we = Math.tan(wi*Math.PI/180);//Sinuswert berechnen
wert = String.valueOf(we);//double in String
txtField3.setText(wert);//Ergebnis schreiben
}
}if(s=="Cotangens")
{
if(e.getStateChange()==1)//liefert 1 oder 2
{
winkel = new String(txtField1.getText()); //Eingabe des Winkelsdouble wi = Double.valueOf(winkel). doubleValue();//String in double
we = 1/(Math.tan(wi*Math.PI/180));//Sinuswert berechnen
wert = String.valueOf(we);//double in String
txtField3.setText(wert);//Ergebnis schreiben
}
}
}
}
-
Hallo,
ich bezieh mich hier auf Swing JRadioButtons.
Du musst zunächst das Interface "ActionListener" in die entsprechende Klasse implementieren z.B.:public class Test implements ActionListener
{
ButtonGroup group;
JRadioButton button1;
JRadioButton button2;
//...dann ein ButtonGroup-Objekt erzeugen (welche RadioButtons sollen zusammengehören):
group = new ButtonGroup();
dann die Buttons erzeugen (die boolean-Werte geben an welcher Button am Anfang aktiviert ist):
button1=new JRadioButton("Button 1", true);
button2=new JRadioButton("Button 2", false);den beiden RadioButtons den ActionListener zuweisen:
button1.addActionListener(this);
button2.addActionListener(this);dann werden die beiden Buttons der Gruppe zugewiesen:
group.add(button1);
group.add(button2);die Ereignisbehandlung sieht dann folgendermaßen aus:
Variante 1:
public void actionPerformed(ActionEvent event)
{
String cmd=event.getActionCommand();
if(cmd.equals("Button 1"))
{
System.out.println("Button 1 gewählt");
}
else if(cmd.equals("Button 2"))
{
System.out.println("Button 2 gewählt");
}
}Variante 2 (zu bevorzugen):
public void actionPerformed(ActionEvent event)
{
if(e.getSource()==button1)
{
System.out.println("Button 1 gewählt");
}
else if(e.getSource()==button2)
{
System.out.println("Button 2 gewählt");
}
}Hier als ganzes Beispiel:
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Test extends JFrame implements ActionListener { ButtonGroup group; JRadioButton button1; JRadioButton button2; public Test() { super("JRadioButton Demo"); getContentPane().setLayout(new FlowLayout()); group = new ButtonGroup(); button1=new JRadioButton("Button 1", true); button2=new JRadioButton("Button 2", false); button1.addActionListener(this); button2.addActionListener(this); group.add(button1); group.add(button2); getContentPane().add(button1); getContentPane().add(button2); pack(); setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource()==button1) { System.out.println("Button 1 gewählt"); } else if(e.getSource()==button2) { System.out.println("Button 2 gewählt"); } } public static void main(String[] args) { new Test(); } }
Habs jetzt nicht getestet, müsste aber funktionieren...
MfG
-
@Erich: Bitte benutze das nächste Mal Code-Tags. Kein Mensch liest Code, der so dasteht wie es der deinige jetzt tut ... danke.
-
Habt vielen Dank für Eure wertvollen Hinweise, ich habe bis her nur in C/C++ mit dem Visual- Studio 6.0 C++ gearbeitet. Hier ist vieles wesentlich bequemer zu handhaben, obwohl es natürlich hier auch Probleme gibt.
Allgemein kann man sagen: Programmieren ist ein Abenteuer ohne Ende, immer spannend nie 100%- tig durchschaubar und stets mit Überraschungen gespickt. Ich glaube auch der beste Programmierer lernt stets dazu.
Programmieren ist wie Rudern gegen den Strom, sobald man aufhört, treibt man zurück.Tschüß Erich