2017-09-22 19 views
1

この例では、リスナーを適切に使用する方法を理解しようとしています。私がしたいことは、どのボックスがチェックされているかを示すサブミットボタンをクリックした後にポップアップを表示することですが、今は各ボックスがクリックされた後にポップアップが表示されます。ラジオボタンのアクションリスナーとチェックボックスのアイテムリスナーを実装しようとしましたが、これが適切かどうかはわかりません。私は何が欠けていますか?ItemListenerとActionListenerの実装方法を理解できません

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. 
    } 




} 

これはプログラムを実行するためのコードです。上記の私のコメントを促進するために

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

    } 
} 
+0

だから、あなたはあなたの 'submit'に' ActionListener'を追加してください。 – CraigR8806

答えて

0

は、ご利用の場合のために、あなただけのあなたのsubmitボタンにActionListenerを追加する必要があります。

ActionListenerには、JRadioButtonJCheckBoxのそれぞれにisSelectedと電話する必要があります。 Array秒であなたのJRadioButton sおよびJCheckBox ESを置くことであろうこの種のものを処理するための

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); 


    }); 

、よりクリーンで持続可能な方法:このような

何かがトリックを行います。 ActionListenerコードをもっときれいにすることができ、配列に新しいチェックボックスやラジオボタンを挿入するだけで、ActionListenerコードを変更する必要がないため、より多くのオプションを追加する方が簡単です。

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()); 
     } 
} 
関連する問題