我有这个代码的问题,当我尝试编译它时,我收到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
答案 0 :(得分:0)
让我们来看看一些JavaDoc:
参数:listData - 包含要在列表中显示的项目的 E 数组
在您的情况下,此方法需要一个字符串数组
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。