下面程序的目的是在屏幕上显示当前目录下的文件信息。文件信息通过表格JTable的实例显示。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或删行。 import java.awt.*; import javax.swing.*; import java.util. Date; import javax.swing.table.*; import java.applet.*; import java.io.*; public class Example3_10 extends JApplet, JFrame { public void init() { FileModel fm = new FileModel(); JTable jt = new JTable(); jt.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); jt.setColumnSelectionAllowed(true); JScrollPane jsp = new JScrollPane(jt); getContentPane().add(jsp, BorderLayout.CENTER); } public static void main(String args[]) { Example3_10 ft = new Example3_10(); ft.init(); JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT ON CLOSE); f.getContentPane() .add(ft.getContentPane()); f.setSize (300, 400); f.show(); } } class FileModel extends AbstractTableModel { String[] columnName = new String[] { "文件名", "大小", "最后修改时间" } Object[] [] data; public FileModel() { this("."); } public FileModel(String dir) {File file = new File(dir);String files[] = file.list();data = new Object [files.length] [columnName.length];for (int i=0; i < files.length; i++) { File tmp = new File (files[i]);data[i] [0] = tmp.getName();data[i] [1] = new Long(tmp.length());data[i] [2] = new Date(tmp.lastModified() );} } public int getColumnNumber() {return columnName.length; } public int getRowCount() {return data. length; } public String getColumnName(int col) {return columnName[col]; } public Object getValueAt(int row, int col) {return data[row] [col]; } public Class getColumnClass(int c) {return getValueAt (0, c) .getClass(); } }
参考答案:
解析:extends JFrame JTable(fm) getColumnCount 本题考查知识点:JTable构件的使用、小应用程序的安全机制解题思路:FileModel定义了一个JTable的模型,在这个模型中,“File file=new File(dir)”语句获得当前目录下的文件信息,然后将这些文件信息存储在模型的“data”变量中。 Applet的沙箱模型规定,未授权的小应用程序不能访问本地资源,当然也就不能读、写本地计算机的文件系统。本程序需要获得当前目录的信息,因此本题程序只能作为应用程序运行,所以第一处下划线应该去掉JApplet。 JTable的主要功能是将数据以二维表格的方式显示出来。本题采用的是MVC模式,FileModel实现了表格的模型。第二条下划线处使用JTable的构造方法将模型赋予表格“jt”。 AbstractTableModel所有的抽象方法都需要实现。第三条下划线处的方法在功能上与抽象方法 getColumnCount()相同,但是并没有实现该抽象方法。因此需要更正。