【问题标题】:method toArray() not working on a list方法 toArray() 不适用于列表
【发布时间】:2013-10-07 17:54:03
【问题描述】:

我正在尝试将列表转换为数组,但出现错误,我不知道为什么。我正在使用当前时间并在 for 循环中获取今天剩余的时间并将其放入列表中。当我尝试将其更改为数组时,出现错误。我尝试这样做是因为后来我在 JCombobox 中使用了该数组

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 返回的列表更改为数组,为什么我做错了?

【问题讨论】:

    标签: java arrays list


    【解决方案1】:

    由于您已导入import java.awt.*;,因此使用的Listjava.awt.List。您需要添加一个导入 - java.util.List

    请不要使用原始类型List。不建议在较新的代码中使用原始类型。当然你不可能注意到它,因为java.awt.List 是一个非泛型类。所以即使是编译器也不会给你警告信息。

    您应该使用参数化类型 - List&lt;String&gt; 在您的情况下。将您的方法修改为:

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

    您还需要添加import java.util.ArrayList

    【讨论】:

    • 你的解决方案效果很好,但我不明白为什么我必须把&lt;String&gt;放在后面。还有 util 和 awt list 之间的区别是什么。附言。我是初学者
    • @GertKommer &lt;String&gt; 代表一个实际的类型参数。您需要输入它,因为java.util.List 是泛型类型。您可以从docs.oracle.com/javase/tutorial/java/generics 了解更多关于泛型的信息
    • @GertKommer 或者为了快速的基本介绍,我写了一篇博文 - rjcodeblog.wordpress.com/2013/09/28/…。这将使您快速入门。
    • java.util 包版本的List 用于简单地保存项目的集合,用于任何目的——并非专门用于在用户界面中作为小部件显示。 java.awt 版本专门用于在用户界面中显示项目列表的“小部件”。我从你的变量名中想象你是故意使用 java.awt 版本的。但是那种List 里面没有定义toArray 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2018-11-09
    • 1970-01-01
    • 2014-01-18
    相关资源
    最近更新 更多