2017-06-19 3 views
0

Je fais un projet de calendrier pour mon cours de sciences informatiques. Actuellement je développe un menu principal mais j'ai l'impression d'avoir rencontré un bug dont je ne peux pas me débarrasser! Quand je lance le programme, le menu déroulant fonctionne très bien, mais quand je clique sur les boutons un tas d'erreurs apparaissent sur le terminal:combobox et le bouton ne fonctionne pas ensemble en Java

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: 
    javax.swing.JButton cannot be cast to javax.swing.JComboBox 

semble être le principal. Toute aide serait appréciée! Vous pouvez voir mon code ci-dessous.

/*pictures used in this code were edited by Martha Ibarra. Original PNG image sources are listed below 
http://imagespng.com/Detail/1093/White-cat-PNG-Transparent-image.html 
http://www.freeiconspng.com/img/40367 
http://www.susancalman.com/wp-content/uploads/2015/11/corner-cat.png*/ 


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

public class MainMenu implements ActionListener 
{ 

    private JPanel panel; 
    private JFrame frame; 
    private JButton addEvent; 
    private JButton delEvent; 
    private JLabel label; 
    private ImageIcon image; 
    TextField text = new TextField(20); 
    JLabel displayMessage = new JLabel("Select a CATlendar view or you can ADD or DELETE an event!"); 

    public MainMenu() 
    { 
    gui(); 
    } 
///draws the main menu 
    public void gui() 
    { 
    frame = new JFrame("CATlendar"); 
    frame.setVisible(true); 
    frame.setSize(600,500); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    FlowLayout lay = new FlowLayout(); 
    panel= new JPanel(); 
    panel.setBackground(Color.PINK); 
    panel.setLayout(lay); 

    addEvent = new JButton("ADD EVENT"); 
    addEvent.setPreferredSize(new Dimension(200, 200)); 
    addEvent.addActionListener(this); 
    ImageIcon catAdd = new ImageIcon(getClass().getResource("im-hungry.png")); 
    addEvent.setIcon(catAdd); 


    delEvent = new JButton("DELETE EVENT"); 
    delEvent.setPreferredSize(new Dimension(200, 200)); 
    delEvent.addActionListener(this); 
    ImageIcon catDel = new ImageIcon(getClass().getResource("tres-quatro.png")); 
    delEvent.setIcon(catDel); 

    image= new ImageIcon(getClass().getResource("uno-dos.png")); 
    label=new JLabel(image); 

    String[] viewList = { "Weekly", "Daily", "Monthly" }; 
    JComboBox viewTypes = new JComboBox(viewList); 
    viewTypes.setSelectedIndex(0); 
    viewTypes.addActionListener(this); 


    panel.add(viewTypes); 
    panel.add(label); 
    panel.add(addEvent); 
    panel.add(delEvent); 
    frame.add(panel); 
    panel.add(displayMessage); 
    panel.setVisible(true); 
    } 
    //corresponding to what the user choses to do this method will change the event hashmap or display a calendar view. 
    public void actionPerformed(ActionEvent e) 
    {  JComboBox cb = (JComboBox)e.getSource(); 
     String viewSelect = (String)cb.getSelectedItem(); 

     if(e.getActionCommand().equals("ADD EVENT")) 
     { 
      panel.add(text); 
      displayMessage.setText("Enter the date of the event you would like to delete "); 
      String eventDate = text.getText(); 
     }else if(e.getActionCommand().equals("DELETE EVENT")) 
     { 
      panel.add(text); 
      displayMessage.setText("Enter the date of the event you would like to add"); 
      String eventDelDate = text.getText(); 
     }else if(viewSelect.equals("Weekly")) 
     { 
      displayMessage.setText("You selected a weekly view"); 
     }else if(viewSelect.equals("Daily")) 
     { 
      displayMessage.setText("You selected a daily view"); 
     }else if(viewSelect.equals("Monthly")) 
     { 
      displayMessage.setText("You selected a monthly view"); 
     }else 
     { 
      displayMessage.setText("pick a view"); 
     } 
    } 
    public static void main(String [] args) 
    { 
    new MainMenu(); 
    } 

} 
+0

On dirait que la source du ActionEvent est un JButton plutôt qu'un JComboBox et ne peut donc pas être jeté comme JComboBox. –

+0

1) Voir [Qu'est-ce qu'une trace de pile, et comment puis-je l'utiliser pour déboguer mes erreurs d'application?] (Http://stackoverflow.com/q/3988788/418556) 2) Toujours chercher dans la partie principale du message en haut de la trace de la pile. Ces problèmes ont déjà été soulevés plusieurs fois. –

Répondre

1

Votre problème: vous essayez d'acces l'événement zone de liste déroulante si la source de l'événement est le bouton. Si vous voulez accéder à la zone de liste déroulante dans ce cas, vous devez fournir une référence à cet objet. Par exemple:

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

public class MainMenu implements ActionListener 
{ 

    private JPanel panel; 
    private JFrame frame; 
    private JButton addEvent; 
    private JButton delEvent; 
    private JLabel label; 
    private ImageIcon image; 
    private JComboBox viewTypes; 
    TextField text = new TextField(20); 
    JLabel displayMessage = new JLabel("Select a CATlendar view or you can ADD or DELETE an event!"); 

    public MainMenu() 
    { 
     gui(); 
    } 
    ///draws the main menu 
    public void gui() 
    { 

     FlowLayout lay = new FlowLayout(); 
     panel= new JPanel(); 
     panel.setBackground(Color.PINK); 
     panel.setLayout(lay); 

     addEvent = new JButton("ADD EVENT"); 
     addEvent.setPreferredSize(new Dimension(200, 200)); 
     addEvent.addActionListener(this); 
     ImageIcon catAdd = new ImageIcon(getClass().getResource("im-hungry.png")); 
     addEvent.setIcon(catAdd); 


     delEvent = new JButton("DELETE EVENT"); 
     delEvent.setPreferredSize(new Dimension(200, 200)); 
     delEvent.addActionListener(this); 
     ImageIcon catDel = new ImageIcon(getClass().getResource("tres-quatro.png")); 
     delEvent.setIcon(catDel); 

     image= new ImageIcon(getClass().getResource("uno-dos.png")); 
     label=new JLabel("Test"); 

     String[] viewList = { "Weekly", "Daily", "Monthly" }; 
     viewTypes = new JComboBox(viewList); 
     viewTypes.setSelectedIndex(0); 
     viewTypes.addActionListener(this); 


     panel.add(viewTypes); 
     panel.add(label); 
     panel.add(addEvent); 
     panel.add(delEvent); 
     panel.add(displayMessage); 
     panel.setVisible(true); 
     frame = new JFrame("CATlendar"); 
     frame.setVisible(true); 
     frame.setSize(600,500); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(panel); 
     frame.pack(); 
    } 
    //corresponding to what the user choses to do this method will change the event hashmap or display a calendar view. 
    public void actionPerformed(ActionEvent e) { 
     String viewSelect = (String)viewTypes.getSelectedItem(); 

     if(e.getActionCommand().equals("ADD EVENT")) 
     { 
      panel.add(text); 
      displayMessage.setText("Enter the date of the event you would like to delete "); 
      String eventDate = text.getText(); 
     }else if(e.getActionCommand().equals("DELETE EVENT")) 
     { 
      panel.add(text);  
      displayMessage.setText("Enter the date of the event you would like to add"); 
      String eventDelDate = text.getText(); 
     }else if(viewSelect.equals("Weekly")) 
     { 
      displayMessage.setText("You selected a weekly view"); 
     }else if(viewSelect.equals("Daily")) 
     { 
      displayMessage.setText("You selected a daily view"); 
     }else if(viewSelect.equals("Monthly")) 
     { 
      displayMessage.setText("You selected a monthly view"); 
     }else 
     { 
      displayMessage.setText("pick a view"); 
     } 
     panel.revalidate(); 
     panel.repaint(); 
     SwingUtilities.windowForComponent(panel).pack(); 
    } 
    public static void main(String [] args) 
    { 
     new MainMenu(); 
    } 

}