Проблема с Jlist и DefaultListModel
У меня много проблем с тем, чтобы заставить этот Jlist работать. Проблема возникает, когда я пытаюсь создать JList. Когда я компилирую, я получаю сообщение:
"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");
}
}
}
1 ответ
Вздох....
Вы назвали свой собственный класс 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();
}
}