2017-09-22 4 views
1

Ich versuche herauszufinden, wie Listener in diesem Beispiel richtig zu verwenden. Ich möchte, dass ein Pop-up angezeigt wird, nachdem ich auf den Submit-Button geklickt habe, der anzeigt, welche Kästchen aktiviert sind, aber im Moment bekomme ich ein Pop-up, nachdem jede Box angeklickt wurde. Ich habe versucht, einen Aktionslistener für die Optionsfelder und einen Objektlistener für die Kontrollkästchen zu implementieren, aber ich bin mir nicht sicher, ob dies das Richtige ist. Was vermisse ich?Ich kann nicht herausfinden, wie Sie ItemListener und ActionListener implementieren

import javax.swing.*; 
import java.awt.event.*; 
import java.awt.*; 



public class CarSelector extends JFrame implements ActionListener, ItemListener{ 

    JButton submit = new JButton("Submit"); 
    JLabel label1 = new JLabel("Select Vehicle type and options"); 
    JLabel carLabel = new JLabel("Vehicle Type"); 
    JLabel options = new JLabel("Options"); 
    ButtonGroup group = new ButtonGroup(); 
    JRadioButton carRadio = new JRadioButton("Car", true); 
    JRadioButton vanRadio = new JRadioButton("Minivan"); 
    JRadioButton truckRadio = new JRadioButton("Pickup Truck"); 
    JRadioButton suvRadio = new JRadioButton("SUV"); 

    JCheckBox leather = new JCheckBox("Leather Seats"); 
    JCheckBox ac = new JCheckBox("Air Conditioning"); 
    JCheckBox sat = new JCheckBox("Sattelite Radio"); 
    JCheckBox warmer = new JCheckBox("Seat Warmers"); 
    String optionsSelected; 
    String carSelected; 

    ActionListener listen = new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent ae){ 

      JOptionPane.showMessageDialog(
      CarSelector.this, sb.toString + ssb.toString()); 
     } 
    }; 




    CarSelector(){ 
     super("Vehicle Selector"); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(300, 300); 

     CarGUI(); 
    } 

    public void CarGUI(){ 


     JPanel vehicleTypes = new JPanel(); 
     JPanel carOptions = new JPanel(); 
     JPanel submitButton = new JPanel(); 


     carRadio.addActionListener(listen); 
     vanRadio.addActionListener(listen); 
     truckRadio.addActionListener(listen); 
     suvRadio.addActionListener(listen); 
     leather.addActionListener(listen); 
     ac.addActionListener(listen); 
     sat.addActionListener(listen); 
     warmer.addActionListener(listen); 
     submit.addActionListener(listen); 

     add(submitButton); 
     submitButton.setLayout(new BoxLayout(submitButton, BoxLayout.X_AXIS)); 
     submitButton.setBounds(100, 150, 100, 100); 

     add(vehicleTypes); 
     vehicleTypes.setLayout(new BoxLayout(vehicleTypes, BoxLayout.Y_AXIS)); 
     vehicleTypes.setBounds(150,0,125,125); 

     add(carOptions); 
     carOptions.setLayout(new BoxLayout(carOptions, BoxLayout.Y_AXIS)); 

     vehicleTypes.add(carLabel); 
     vehicleTypes.add(carRadio); 
     vehicleTypes.add(vanRadio); 
     vehicleTypes.add(truckRadio); 
     vehicleTypes.add(suvRadio); 
     group.add(carRadio); 
     group.add(vanRadio); 
     group.add(truckRadio); 
     group.add(suvRadio);   


     carOptions.add(options); 
     carOptions.add(leather); 
     carOptions.add(ac); 
     carOptions.add(sat); 
     carOptions.add(warmer); 

     submitButton.add(submit); 
     setVisible(true); 

    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    @Override 
    public void itemStateChanged(ItemEvent e) { 


     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 




} 

Dies ist der Code zum Ausführen des Programms.

public class GUITest { 
    public static void main (String[] args){ 
     CarSelector car = new CarSelector(); 

    } 
} 
+0

Also ... sollten Sie nur den 'ActionListener' zu Ihrem' submit' hinzufügen. – CraigR8806

Antwort

0

meinen Kommentar weiter oben, für Ihren Anwendungsfall sollten Sie nur ein ActionListener auf Ihre submit Schaltfläche Hinzufügen werden.

Innerhalb der ActionListener müssen Sie isSelected auf jedem Ihrer JRadioButton s und JCheckBox es anrufen.

So etwas wird der Trick:

public void CarGUI(){ 


    JPanel vehicleTypes = new JPanel(); 
    JPanel carOptions = new JPanel(); 
    JPanel submitButton = new JPanel(); 


    //The below syntax assumes you are running Java 8. Please let me know if you are not 
    //and I will update the syntax 
    submit.addActionListener((e)=>{ 
     StringBuilder sb = new StringBuilder(); 

     sb.append("Vehicle Type: "); 
     if(carRadio.isSelected()) sb.append("Car"); 
     else if(vanRadio.isSelected()) sb.append("Van"); 

     //Continue with the rest of radiobuttons 
     // and do the same with the Checkboxes just make sure to 
     // not use "else" if and make a new conditional for each Checkbox 

     JOptionPane.showMessageDialog(
     CarSelector.this, sb.toString); 


    }); 

eine sauberere und nachhaltigere Weg, um diese Art der Sache zu handhaben wäre Ihr JRadioButton s zu setzen und JCheckBox es in Array s. Es würde Ihren ActionListener Code viel sauberer machen und es wäre einfacher, weitere Optionen hinzuzufügen, weil Sie nur ein neues Kontrollkästchen oder Radiobutton in Ihre Arrays einfügen müssten und keinen Ihrer ActionListener Code ändern müssen.

JRadioButton[] vehicleTypes = new JRadioButton[] { new JRadioButton("Car", true), new JRadioButton("Van") ... }; 

// then in ActionListener 

for(JRadioButton rBtn: vehicleTypes){ 
     if(rBtn.isSelected()){ 
      sb.append(rBtn.getText()); 
     } 
} 
Verwandte Themen