2013-10-07 2 views
3

Я пытаюсь преобразовать список в массив, но я получаю сообщение об ошибке, и я не могу понять, почему. Я беру текущий час, и в цикле цикла я получаю оставшиеся часы сегодняшнего дня и помещаю его в список. Когда я пытаюсь изменить его на массив, я получаю сообщение об ошибке. Я пытаюсь сделать это, потому что позже я использую этот массив в JComboboxметод toArray() не работает над списком

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.util.GregorianCalendar; 
import java.util.Calendar; 

public class Frame extends JFrame implements ActionListener{ 
    //JFrame elements 
    private JButton btnSetTime; 
    private JLabel lblTitle; 
    private JComboBox comboTime; 

    //Standard elements 
    private Timer tillPopup, tillShutdown; 

    Calendar calendar = new GregorianCalendar(); 
    int hour = (calendar.get(Calendar.HOUR_OF_DAY)); 
    List times = createDropdown(hour); 
    // Convert ArrayList to array which can be used in the combobox 
    String[] dropdownElements = times.toArray(); 

    String[] a = {"a","b"}; 
    public Frame(){ 
     setLayout(new FlowLayout()); 

     //Labels 
     lblTitle = new JLabel("Deze applicatie sluit u computer automatisch af om het energieverbruik te verminderen."); 

     //Combobox 
     comboTime = new JComboBox(a); 
     comboTime.setSelectedIndex(0); 

     //Button 
     btnSetTime = new JButton("Zet afsluittijd"); 

     //Timers 
     //tillPopup = new Timer(this); 
     //tillShutdown = new Timer(this); 

     //Add elements to Frame 
     add(lblTitle); 
     add(comboTime); 
     add(btnSetTime); 

     //Add actionListeners 
     btnSetTime.addActionListener(this); 

     setSize(500,300); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 
    private List createDropdown(int hour){ 
     List availableHours = new List(); 
     for(int i = hour; i <=24; i++){ 
      if (i != 24){ 
       availableHours.add(i + ":00"); 
      } 
      else if(i == 24){ 
       availableHours.add("00:00"); 
      } 
     } 
     return availableHours; 
    } 
    public void actionPerformed(ActionEvent e){ 
     if (e.getSource() == btnSetTime){ 
      Object popupTime = comboTime.getSelectedItem(); 
       System.out.println(popupTime); 

     } 
    } 
} 

я получаю следующее сообщение об ошибке:

Frame.java:21: error: cannot find symbol 
String[] dropdownElements = times.toArray(); 
           ^ 
    symbol: method toArray() 
    location: variable times of type List 

Как изменить список, я получаю обратно из method createDropdown в массив и почему я сделал неправильно?

ответ

5

Поскольку вы импортировали import java.awt.*;, List используется java.awt.List. Вам нужно добавить импорт - java.util.List.

И, пожалуйста, не используйте необработанный тип List. В новом коде не рекомендуется использовать необработанные типы. Конечно, вы не могли этого заметить, потому что java.awt.List - это не общий класс. Поэтому даже компилятор не дал бы вам предупреждающего сообщения.

В вашем случае следует использовать параметризованный тип - List<String>. Измените метод как:

private List<String> createDropdown(int hour){ 
    List<String> availableHours = new ArrayList<String>(); 
    ... 
} 

Кроме того, необходимо добавить import java.util.ArrayList.

+0

Ваше решение работает очень хорошо, но я не понимаю, почему я должен поставить '' за ним. также в чем разница между утилитой и awt 'list'. пс. Я новичок –

+0

@GertKommer '' представляют действительный параметр типа. Вам нужно указать его, потому что 'java.util.List' является общим типом. Вы можете узнать больше о дженериках из http://docs.oracle.com/javase/tutorial/java/generics/ –

+0

@GertKommer Или для быстрого базового введения я написал сообщение в блоге - http: //rjcodeblog.wordpress .com/2013/09/28/java-generics-a-basic-введение /. Это даст вам быстрый старт. –

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