2013-11-18 3 views
0

У меня проблема с Item Listeners. Это первый раз, когда я использую его, пока все, что я использовал, это Item Event. Мне было интересно, можно ли прояснить, какая разница между этими двумя, а также указать, что я делаю неправильно.Ошибка слушателей

Моя проблема находится на строка 46 строка, начинающаяся с: Object source = toppingList.getSource(); и я получаю ошибку «Не могу найти символ '.

Я думаю, что я использую неправильный товар перед getSource();, я думал, что toppingList был правильным товаром, я не вижу, какой другой предмет я мог бы положить в его место.

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


public class Pizza extends JFrame{ 

    FlowLayout flow = new FlowLayout(); 
    JComboBox pizzaBox = new JComboBox(); 
    JLabel toppingList = new JLabel("Topping List"); 
    JLabel aLabel = new JLabel("Paulos's American Pie"); 
    JTextField totPrice = new JTextField(10); 
    int[] pizzaPrice = {7,10,10,8,8,8,8}; 
    int totalPrice = 0; 
    String output; 
    int pizzaNum; 

    public Pizza() 
    { 
    super("Pizza List"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLayout(flow); 
    pizzaBox.addItemListener((ItemListener) this); 
    add(toppingList); 
    pizzaBox.addItem("cheese"); 
    pizzaBox.addItem("sausage"); 
    pizzaBox.addItem("pepperoni"); 
    pizzaBox.addItem("onion"); 
    pizzaBox.addItem("green pepper"); 
    pizzaBox.addItem("green olive"); 
    pizzaBox.addItem("black olive"); 
    add(pizzaBox); 
    add(aLabel); 
    add(totPrice); 
    } 

    public static void main(String[] arguments) 
    { 
    JFrame frame = new DebugFourteen3(); 
    frame.setSize(200, 150); 
    frame.setVisible(true); 
    } 


public void itemStateChanged(ItemEvent[] list) 
{ 

    Object source = toppingList.getSource(); 
    if(source == pizzaBox) 
    { 
    int pizzaNum = pizzaBox.getSelectedIndex(); 
    totalPrice = pizzaPrice[pizzaNum]; 
    output = "Pizza Price $" + totalPrice; 
    totPrice.setText(output); 
    } 
    } 
} 
+2

Мы не знаем, что линия 46. – Maroun

ответ

1

Gui элементов не имеют никакого getSource, это метод события - говорит вам, который гуй элемент генерируется событие. Но вы знаете, что источник этого события, так как в конструкторе Вы писали:

pizzaBox.addItemListener((ItemListener) this); 

и вы не добавить это в любой другой графической оболочки элемента. Таким образом, вы не можете получать события из какого-либо другого элемента gui. Поэтому не проверяйте это.

Но есть и другие проблемы:

Ваш PizzaBox должны осуществлять ItemListener:

public class Pizza extends JFrame implement ItemListener 

, а затем просто написать

pizzaBox.addItemListener(this); 

Если вы хотите слушать несколько элементов, добавьте отдельные анонимный слушатель для каждого (и пицца не реализует ItemListener)

// in your constructor: 
pizzaBox.addItemListener(new ItemListener() { 
    public void itemStateChanged(ItemEvent e) { 
     if (e.getStateChange() == ItemEvent.SELECTED) { 
      pizzaNum = pizzaBox.getSelectedIndex(); // in your code you have int pizzaNum but at the same time, pizzaNum is a class variable, probably an error 
      // and so on 
     } 
    } 
}); 

или переместить код в отдельный метод

public class Pizza extends JFrame { 

    public Pizza() { 
     : 
     pizzaBox.addItemListener(new ItemListener() { 
      public void itemStateChanged(ItemEvent e) { 
       pizzaBox_itemStateChanged(e); 
      } 
     }); 
     : 
    } 

    private void pizzaBox_itemStateChanged(ItemEvent e) { 
     if (e.getStateChange() == ItemEvent.SELECTED) { 
      pizzaNum = pizzaBox.getSelectedIndex(); 
      // and so on 
     } 
    } 

    : 
} 
+0

Благодарим вас за разъяснение вещей Jirka-x1. Очень полезно знать, что есть два разных способа работы с вещами, и я ценю вашу помощь в этом. Так что еще раз спасибо. :) – user2926750

+0

Приятно слышать, что это помогает. Тогда, может быть, вы могли бы дать ему голосование? :) (вы можете проголосовать за несколько вопросов) – Jirka

+0

Несомненно, спасибо еще раз. – user2926750

1

Вам необходимо реализовать ItemListener с классом. Для подробной информации перейдите по этому tutorial

public class Pizza extends JFrame implements ItemListener{ 
..... 
public Pizza(){ 
    pizzaBox.addItemListener(this);// Here this is enough 
    .... 
} 
// itemStateChanged should write as follows 
public void itemStateChanged(ItemEvent e) { 
    //It will be enable if checkbox is selected 
    if (e.getStateChange() == ItemEvent.SELECTED) { 
     int pizzaNum = pizzaBox.getSelectedIndex(); 
     totalPrice = pizzaPrice[pizzaNum]; 
     output = "Pizza Price $" + totalPrice; 
     totPrice.setText(output);   
    } 
} 
} 
+0

Большое спасибо Масуда, по-видимому, я делал вещи немного более сложным, чем я должен , Спасибо, что указали, что я делаю неправильно, а также ссылку на учебник. :) – user2926750

+0

добро пожаловать – Masudul

Смежные вопросы