Jlist和DefaultListModel的问题

问题描述:

我有很多麻烦让Jlist工作。当我尝试构建JList时,会出现问题。当我编译时,我收到一条消息:Jlist和DefaultListModel的问题

"error: constructor JList in class JList cannot be applied to given types; list = new JList(model); 

required: no arguments 
found: DefaultListModel 
reason: actual and formal argument lists differ in length" 

另外,我无法向DefaultListModel添加元素。如果取消注释,我试图将字符串添加到模型中的代码,我得到一个消息说:

JList.java uses unchecked or unsafe operations. 
Note: Recompile with -Xlint:unchecked for details. 

下面我抄我的整个程序,所以如果你想你可以复制这一点,并自行编译。谢谢!

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 
import java.lang.*; 
import java.awt.event.*; 
import javax.swing.filechooser.*; 
import java.io.*; 

public class JList 
{ 
    public static void main (String args[]) 
    { 
    new MyFrameClass(); 
    } 
} 

class MyFrameClass extends JFrame implements ActionListener 
{ 
JMenuBar menuBar; 
JMenu fileMenu, itemMenu; 
JMenuItem loadMenuItem, saveMenuItem, saveAsMenuItem, newMenuItem, deleteMenuItem, deleteAllMenuItem; 
JPanel menuBarPanel; 
JFileChooser fc; 
File file; 
JList list; 
DefaultListModel model; 

MyFrameClass() 
{ 
    Container cp; 

    fc = new JFileChooser(); 

    menuBar = new JMenuBar(); 
    menuBar.setLayout(new FlowLayout()); 

    fileMenu = new JMenu("File"); 
    itemMenu = new JMenu("Item"); 

    loadMenuItem = new JMenuItem("Load"); 
    loadMenuItem.addActionListener(this); 

    saveMenuItem = new JMenuItem("Save"); 
    saveMenuItem.addActionListener(this); 

    saveAsMenuItem = new JMenuItem("SaveAs"); 
    saveAsMenuItem.addActionListener(this); 

    newMenuItem = new JMenuItem("New"); 
    newMenuItem.addActionListener(this); 

    deleteMenuItem = new JMenuItem("Delete"); 
    deleteMenuItem.addActionListener(this); 

    deleteAllMenuItem = new JMenuItem("DeleteAll"); 
    deleteAllMenuItem.addActionListener(this); 

    fileMenu.add(loadMenuItem); 
    fileMenu.add(saveMenuItem); 
    fileMenu.add(saveAsMenuItem); 

    itemMenu.add(newMenuItem); 
    itemMenu.add(deleteMenuItem); 
    itemMenu.add(deleteAllMenuItem); 

    menuBar.add(fileMenu); 
    menuBar.add(itemMenu); 

    menuBarPanel = new JPanel(); 
    menuBarPanel.setLayout(new FlowLayout()); 
    menuBarPanel.add(menuBar); 

    model = new DefaultListModel(); 
    list = new JList(model); 

    //model.addElement("USA"); 
    /*model.addElement("India"); 
    model.addElement("Vietnam"); 
    model.addElement("Canada"); 
    model.addElement("Denmark"); 
    model.addElement("France"); 
    model.addElement("Great Britain"); 
    model.addElement("Japan"); 
    */ 

    cp = getContentPane(); 
    cp.add(menuBarPanel); 
    setupMainFrame(); 
} 

void setupMainFrame() 
{ 
    Toolkit tk; 
    Dimension d; 

    tk = Toolkit.getDefaultToolkit(); 
    d = tk.getScreenSize();    // Get screen resolution. 
    setSize(d.width/2, d.height/2);  // Set size and location based 
    setLocation(d.width/4, d.height/4); // on the resolution. 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    setTitle("JList Project"); // For the title bar 

    setVisible(true); 
} 

public void actionPerformed(ActionEvent e) 
{ 
    if(e.getSource() == loadMenuItem) 
    { 
     System.out.print("load"); 
     int decision = fc.showOpenDialog(this); 

     if (decision == JFileChooser.APPROVE_OPTION) { 
      file = fc.getSelectedFile(); 
      System.out.print("Opening: " + file.getName() + "." + "\n"); 
     } 
    } 
    else if(e.getSource() == saveMenuItem) 
    { 
     System.out.print("save"); 
     int decision = fc.showSaveDialog(this); 

     if (decision == JFileChooser.APPROVE_OPTION) { 
      file = fc.getSelectedFile(); 
     } 
    } 
    else if(e.getSource() == saveAsMenuItem) 
    { 
     System.out.print("save as"); 
     int decision = fc.showSaveDialog(this); 

     if (decision == JFileChooser.APPROVE_OPTION) { 
      file = fc.getSelectedFile(); 
     } 
    } 
    else if(e.getSource() == newMenuItem) 
    { 
     System.out.print("new"); 
    } 
    else if(e.getSource() == deleteMenuItem) 
    { 
     System.out.print("delete"); 
    } 
    else if(e.getSource() == deleteAllMenuItem) 
    { 
     System.out.print("delete all"); 
    } 
} 
} 
+0

有你尝试过'-Xlint:unchecked'这个消息吗? – MikeCAT

唉....

您已经命名自己的类JList

public class JList 
{ 
    public static void main (String args[]) 
    { 
    new MyFrameClass(); 
    } 
} 

等创建了名称类的编译器。因此,当你创建一个JList变量的时候,它的值是你的 JList类型,而不是javax.swing.JList,当你调用一个构造函数时,编译器为你自己的JList类寻找一个不存在的构造函数。

解决方案:不要做这个,不给与这些关键的核心Java类的交锋你的类名,而是改变你的类的名称,以不同的东西,例如,

public class JListTest 
{ 
    public static void main (String args[]) 
    { 
    new MyFrameClass(); 
    } 
} 
+0

我觉得这么愚蠢的笑,但我想没有问题是一个坏问题。非常感谢你这让我疯狂! – BCRwar3

+0

但是,这仍然不能解决与DefaultListModel的问题的第二部分,有什么建议吗? – BCRwar3

+0

我实际上仍然通过addElemnts注释获得第二条消息,所以它与DefaultListModel没有任何关系,消息在我注释掉时消失:'list = new JList(model);' – BCRwar3