Search code examples
javaswingjcomboboxlistselectionlistener

Compile error in JAVA - (<anonymous ListSelectionListener>)


I have a homework assignment where I am buildign a GUI JPane that holds other JPanes to allow for multiple objects to be displayed. I am getting a compile error on one of my listeners and could use some help figuring this one out. Let me preface all of this by saying that we are not allowed to use an IDE.

The error is:

F:\Java\Lab 8\Lab8.java:84: error: cannot find symbol
        jcbo.addListSelectionListener(new ListSelectionListener() {
            ^
  symbol:   method addListSelectionListener(<anonymous ListSelectionListener>)
  location: variable jcbo of type JComboBox<String>
1 error

The project code is:

import java.awt.*;
   import java.awt.event.*;
   import javax.swing.*;
   import javax.swing.event.*;
   import javax.swing.border.*;
   import java.util.Scanner;
   import java.util.EventObject;


   public class Lab8 extends JFrame {

       public String name;
       public String[] ageRanges = {"Select an Age Range","Under 20", "20-29", "30-39", "40-49", "50-59", "60 and Above"};
       public String[] destination = {"Mercury", "Venus", "Moon", "Mars", "Jupiter / Europa", "Saturn / Triton", "Pluto + Sharon"};
        final JTextField txtName = new JTextField(20);
        String value;


       public Lab8()
       {





           // Create an array of Strings for age ranges
           final JComboBox<String> jcbo = new JComboBox<String>(ageRanges);
           jcbo.setForeground(Color.blue);
           jcbo.setBackground(Color.white);


           // Create an array of String destinations




           // Declare radio buttons
           JRadioButton jrbMonday, jrbTuesday, jrbWednesday, jrbThursday, jrbFriday;

           // Create a textfield
           JTextField jMsg = new JTextField(10);


           // Create panel to hold label and textbox.
           JPanel p1 = new JPanel();
           p1.setLayout(new BorderLayout(5,0));
           p1.add(new JLabel("Name: "), BorderLayout.WEST);

           p1.add(txtName, BorderLayout.CENTER);
           jMsg.setHorizontalAlignment(JTextField.LEFT);


           // Create combobox panel.
           JPanel p2 = new JPanel();
           p2.setLayout(new GridLayout(2,0,5,5));
           p2.add(p1, BorderLayout.NORTH);
           p2.add(new JComboBox<String>(ageRanges), BorderLayout.CENTER);
           p2.setBorder(new TitledBorder("Passenger Name & Age Range"));

            final JList<String> jlst = new JList<String>(destination);

           //Create listbox panel.
           JPanel p3 = new JPanel();
           p3.setLayout(new GridLayout(1, 0));
           p3.add(jlst);
           p3.setBorder(new TitledBorder("Destinations"));



            jlst.addListSelectionListener(new ListSelectionListener() {

                public void valueChanged(ListSelectionEvent e){

                    final int index = jlst.getSelectedIndex();
                    value = destination[index];
                }
            });


            jcbo.addListSelectionListener(new ListSelectionListener() {

                public void valueChanged(ListSelectionEvent e){

                    final int index = jcbo.getSelectedIndex();
                    value = ageRanges[index];
                }
            });




           // Create a print button
           JButton jbtPrint = new JButton("Print");


           // Create a new panel to hold radio buttons.
           JPanel r1 = new JPanel();
           r1.setLayout(new GridLayout(3,2));
           r1.add(jrbMonday = new JRadioButton("Monday"));
           r1.add(jrbTuesday = new JRadioButton("Tuesday"));
           r1.add(jrbWednesday = new JRadioButton("Wednesday"));
           r1.add(jrbThursday = new JRadioButton("Thursday"));
           r1.add(jrbFriday = new JRadioButton("Friday"));
           r1.setBorder(new TitledBorder("Departure Days"));
           r1.add(jbtPrint);


           // Create a radio button group to group five buttons
           ButtonGroup group = new ButtonGroup();
           group.add(jrbMonday);
           group.add(jrbTuesday);
           group.add(jrbWednesday);
           group.add(jrbThursday);
           group.add(jrbFriday);



           // Create grid to hold contents
           JPanel pMain = new JPanel();
           pMain.setLayout(new BorderLayout(5,0));
           add(r1, BorderLayout.CENTER);
           add(p2, BorderLayout.NORTH);
           add(p3, BorderLayout. EAST);



           // Create button listener
           jbtPrint.addActionListener(new ButtonListener());

            jrbMonday.addActionListener(new mListener());
            jrbTuesday.addActionListener(new tListener());
            jrbWednesday.addActionListener(new wListener());
            jrbThursday.addActionListener(new rListener());
            jrbFriday.addActionListener(new fListener());



}
            int flag = 0;


            // Declare radio button variable
            boolean monday, tuesday, wednesday, thursday, friday;

            public void monday(){
                monday = true;
            }
            public void tuesday(){
                tuesday = true;
            }
            public void wednesday(){
                wednesday = true;
            }
            public void thursday(){
                thursday = true;
            }
            public void friday(){
                friday = true;
            }





            public class mListener implements ActionListener
            {
              public void actionPerformed(ActionEvent e)
              {
              monday();
                flag = 1;
              }
            }

            public class tListener implements ActionListener
                        {
              public void actionPerformed(ActionEvent e)
              {
              tuesday();
                flag = 2;
              }
            }

            public class wListener implements ActionListener
            {
              public void actionPerformed(ActionEvent e)
              {
              wednesday();
                flag = 3;
              }
            }

            public class rListener implements ActionListener
            {
              public void actionPerformed(ActionEvent e)
              {
              thursday();
                flag = 4;
              }
            }

            public class fListener implements ActionListener
            {
              public void actionPerformed(ActionEvent e)
              {
              friday();
              flag = 5;
              }
            }

            public void setText(){
                name = txtName.getText();
        }


           /** Handle the print button */
             class ButtonListener implements ActionListener {
                 ButtonListener(){
                 }
               public void actionPerformed(ActionEvent e) {
                 // Get values from fields
                    setText();
                System.out.println("Passenger's Name: " + name + "\n");
                System.out.println("Age Group: " + ageRanges + "\n");
                System.out.println("Destination: " + value + "\n");
                System.out.println("Departure Day: " + flag  + "\n");



                }
                /*jbtPrint.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e)
                    {

                    }
                });*/

}





public static void main(String[] args)
       {
           Lab8 frame = new Lab8();
           // frame.pack();
           frame.setTitle("Lab 8 Application");
           frame.setLocationRelativeTo(null); // Center the frame
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           frame.setSize(425, 275);
           frame.setVisible(true);


        }


}

Solution

  • JComboBox simply has no method addListSelectionListener(...). It's not a list after all.

    From your code, it looks like you want some code to trigger when the user selects something in your JComboBox. Use an ActionListener for that:

    jcbo.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        int index = jcbo.getSelectedIndex();
        value = ageRanges[index];
      }
    });
    

    Completely unrelated to the previous:

    For the [Ljava.lang.String;@1283052, note that calling toString() on an array (or concatenating it to an existing string which has the same effect), doesn't give you the contents but a mix of the array type and some internal hash code. For the contents use one of the Arrays.toString() methods:

    System.out.println("Age Group: " + Arrays.toString(ageRanges) + "\n");