没有为setListData(Object [])找到合适的方法

时间:2014-10-15 05:17:10

标签: java

我有这个代码的问题,当我尝试编译它时,我收到1个错误和1个警告。错误是:

MarcoSeleccionMultiple.java:43: error: no suitable method found for setListData(Object[])

并且警告是:

MarcoSeleccionMultiple.java:13: warning: [serial] serializable class MarcoSelecc
ionMultiple has no definition of serialVersionUID

我希望你能帮助我。感谢。

// PruebaSeleccionMultiple.java
// Pruebe de MarcoSeleccionMultiple.java
import javax.swing.JFrame;

public class PruebaSeleccionMultiple
{
    public static void main( String[] args )
    {
        MarcoSeleccionMultiple marcoSeleccionMultiple = 
            new MarcoSeleccionMultiple();

        marcoSeleccionMultiple.setDefaultCloseOperation( 
            JFrame.EXIT_ON_CLOSE );
        marcoSeleccionMultiple.setSize( 350, 140 ); // establece el tamaño del marco
        marcoSeleccionMultiple.setVisible( true ); // muestra el marco
    } // fin de main
} // fin de la clase PruebaSeleccionMultiple

这是其他课程:

// MarcoSeleccionMultiple.java
// Copiar elementos de un objeto List a otro
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import java.util.ArrayList;

public class MarcoSeleccionMultiple extends JFrame
{
    private JList<String> listaJListColores; // lista para guardar los nombres de los colores
    private JList<String> listaJListCopia; // lista en la que se van a copiar los nombres de los colores
    private JButton botonJButtonCopiar; // botón para copiar los nombres seleccionados
    private final String[] nombresColores = { "Negro", "Azul", "Cyan",
        "Gris oscuro", "Gris", "Verde", "Gris claro", "Magenta", "Naranja",
        "Rosa", "Rojo", "Blanco", "Amarillo" };

    // constructor de MarcoSeleccionMultiple
    public MarcoSeleccionMultiple()
    {
        super( "Listas de selección múltiple" );
        setLayout( new FlowLayout() ); // establece el esquema del marco

        listaJListColores = new JList<String>( nombresColores ); // contiene los nombres de todos los colores
        listaJListColores.setVisibleRowCount( 5 ); // muestra cinco filas
        listaJListColores.setSelectionMode( 
            ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );
        add( new JScrollPane( listaJListColores ) ); // agrega lista con panel de desplazamiento 

        botonJButtonCopiar = new JButton( "Copiar >>>" ); // crea botón para copiar
        botonJButtonCopiar.addActionListener( 

            new ActionListener() // clase interna anónima
            {
                // maneja evento de botón
                public void actionPerformed( ActionEvent evento )
                {
                    // coloca los valores seleccionados en listaJListCopia
                    listaJListCopia.setListData( listaJListColores.getSelectedValuesList().toArray() );
                } // fin del método actionPerformed
            } // fin de la clase interna anónima
        ); // fin de la llamada a addActionListener

        add( botonJButtonCopiar ); // agrega el botón copiar a JFrame

        listaJListCopia = new JList<String>(); // crea lista para guardar nombres de colores copiados
        listaJListCopia.setVisibleRowCount( 5 ); // muestra 5 filas
        listaJListCopia.setFixedCellWidth( 100 ); // establece la anchura
        listaJListCopia.setFixedCellHeight( 15 ); // establece la altura
        listaJListCopia.setSelectionMode( 
            ListSelectionModel.SINGLE_INTERVAL_SELECTION );
        add( new JScrollPane( listaJListCopia ) ); // agrega lista con panel de desplazamiento
    } // fin del constructor de MarcoSeleccionMultiple
} // fin de la clase MarcoSeleccionMultiple

1 个答案:

答案 0 :(得分:0)

让我们来看看一些JavaDoc:

  

setListData()

     

参数:listData - 包含要在列表中显示的项目的 E 数组

在您的情况下,此方法需要一个字符串数组

  

toArray()

     

Object [] toArray()

这意味着,此方法返回一个对象数组。 这就是你得到上述例外的原因。 setListData需要一个字符串数组,但是你给了他一个对象数组。

List提供了您应该在此处使用的另一种toArray方法:<T> T[] toArray(T[] a)。它需要一个数组,它将以你在那里指定的相同数组类型返回列表。

这意味着,为了解决您的问题,您应该更改

listaJListCopia.setListData( listaJListColores.getSelectedValuesList().toArray() );

listaJListCopia.setListData( listaJListColores.getSelectedValuesList().toArray(new String[1]) );

您也可以使用new String[0],但这可能会导致另一个警告。

现在发出警告:

此警告表示类MarcoSeleccionMultiple实现了接口Serializable,因为它扩展了由于扩展类JFrame而可序列化的类Component。 要修复该警告,请在您的班级中加入变量serialVersionUID。例如:

private static final long serialVersionUID = 1L;

您的IDE应该能够为您生成serialVersionUID。阅读此JavaDoc以获取有关该变量的更多信息:Serializable