2012-04-18 189 views
0

我有一個家庭作業,我正在構建一個GUI JPane,其中包含其他JPanes以允許顯示多個對象。我收到了一位聽衆的編譯錯誤,並且可以使用一些幫助來解決這個問題。讓我先說所有這些,說我們不允許使用IDE。編譯JAVA錯誤 - (<匿名ListSelectionListener>)

的錯誤是:

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 

該項目的代碼是:

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


     } 


} 
+2

'JComboBox'根本沒有任何方法'addListSelectionListener(...)'。畢竟這不是一個清單。你想做什麼?也許我在下面的答案中猜到了:) – 2012-04-18 20:57:15

回答

4

JComboBox根本沒有任何方法addListSelectionListener(...)。畢竟這不是一個清單。

從您的代碼看,當用戶選擇JComboBox中的某些內容時,您需要觸發某些代碼。使用對於一個ActionListener

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

完全無關的前面:

對於[Ljava.lang.String;@1283052,注意陣列上調用toString()(或者串聯到具有相同的效果現有字符串),不會給你內容,但會混合使用數組類型和一些內部哈希碼。對於內容使用Arrays.toString() methods之一:

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

這幾乎可行,但我得到了一個結果:年齡組:[Ljava.lang.String; @ 1283052 – 2012-04-18 21:04:05

+0

@Kevin Schultz:那是因爲你正在打印數組的值' ageRanges',而不是一個單一的值。再次檢查您的代碼。 – Tudor 2012-04-18 21:07:06

+0

@Kevin我更新了我的答案,包括輸出數組的內容。哦,我想我誤解了。如果你只是想打印一個像Tudor所假設的值,那麼我的'Arrays.toString()'建議就沒用了。 – 2012-04-18 21:07:44

3

JComboBox類沒有addListSelectionListener方法。請參閱javadoc

如果你想攔截改變當前選擇嘗試使用addActionListener而不是事件:

jcbo.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent e) { 

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

addItemListener(ItemListener監聽器)怎麼樣?這不處理選擇更改事件嗎? – 2012-04-18 21:23:29

+0

@Tudor錯誤的答案 – mKorbel 2012-04-18 21:32:58