这是我的代码:
public class DownloadMainView extends JFrame{ private ArrayList<DownloadItem> downloadList = new ArrayList<DownloadItem>(); private JMenuBar menubar = new JMenuBar(); private JMenu m_task = new JMenu("Tasks"); private JMenu m_tool = new JMenu("Tools"); private JMenu m_help = new JMenu("Help"); private JMenuItem mi_add = new JMenuItem("Add"); private JMenuItem mi_exit = new JMenuItem("Exit"); private JMenuItem mi_options = new JMenuItem("Options"); private JMenuItem mi_help = new JMenuItem("Help"); private JMenuItem mi_about = new JMenuItem("About"); private JTree categoryTree = new JTree(); private JTable contentTable = new JTable(new Object[][]{},new Object[]{"No.","Filename","URL","Status","Size","Added Date"}); private JToolBar toolbar = new JToolBar(); private JScrollPane scrollPane = new JScrollPane(); private JButton btnAdd = new JButton("Add"); private JButton btnCancel = new JButton("Cancel"); private JButton btnDelete = new JButton("Delete"); private JButton btnOption = new JButton("Option"); public DownloadMainView() throws IOException{ super("KPDownloader"); setSize(800,400); setLayout(null); setDefaultCloseOperation(EXIT_ON_CLOSE); //Build menubar menubar.add(m_task); menubar.add(m_tool); menubar.add(m_help); m_task.add(mi_add); mi_add.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,ActionEvent.CTRL_MASK)); m_task.add(new JSeparator()); m_task.add(mi_exit); mi_exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.ALT_MASK)); m_tool.add(mi_options); mi_options.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK)); m_help.add(mi_help); mi_help.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0)); m_help.add(mi_about); mi_about.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,ActionEvent.CTRL_MASK)); setJMenuBar(menubar); //about buttons toolbar.add(btnAdd); toolbar.add(btnOption); toolbar.add(btnCancel); toolbar.add(btnDelete); toolbar.setLocation(0, 0); toolbar.setSize(800,42); this.add(toolbar); //add table to mainview String columns[] = {"No.","Filename","URL","Status","Size","Added Date"}; DefaultTableModel model = new DefaultTableModel(columns,1); readDownloadList(); if(downloadList != null){ int length = downloadList.size(); for(int i = 0; i < length; i++) model.insertRow(i, new Object[]{i, downloadList.get(i).getFilename(),downloadList.get(i).getSize(), downloadList.get(i).getStatus(), downloadList.get(i).getURL(),downloadList.get(i).getAddedDate()}); } contentTable.setModel(model); contentTable.setSize(800, 350); scrollPane.add(contentTable); scrollPane.setSize(800, 350); scrollPane.setLocation(0, 50); this.add(scrollPane); }
但是,当我运行代码时,该表不显示列名。我在这一行设置1时,它仅显示一个空行:DefaultTableModel model = new DefaultTableModel(columns,1);
DefaultTableModel model = new DefaultTableModel(columns,1);
请告诉我我的代码在哪里错误?谢谢!
编辑:有人问了同样的问题(JTable中没有标题),但是答案是将Jtable添加到JScrollPane,这对@@无济于事。编辑:嗨, 丹 ,我已经添加了完整的Constructor,这是readDownloadList()方法的代码:
readDownloadList()
void readDownloadList(){ File file = new File("downloadlist.dat"); ObjectInputStream ois = null; if(!file.exists()) try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { ois = new ObjectInputStream(new FileInputStream(file)); downloadList = (ArrayList<DownloadItem>) ois.readObject(); ois.close(); } catch (IOException e) { // TODO Auto-generated catch block downloadList = new ArrayList<DownloadItem>(); e.printStackTrace(); }catch(ClassNotFoundException e){ downloadList = new ArrayList<DownloadItem>(); e.printStackTrace(); } }
谢谢!
您使用JScrollPane了错误的方式。为使其正常工作,请执行以下操作。
JScrollPane
将JTable实例传递给JScrollPane构造函数中的:
JTable
private JScrollPane scrollPane = new JScrollPane(contentTable);
注释掉您以前用来添加的JTable行JScrollPane:
// scrollPane.add(contentTable);
当您将组件放在的构造函数中时JScrollPane,您会提到哪个是要应用滚动的视图。
另一方面add,您可以使用方法将组件添加到容器中,就像将其添加到中一样JPanel。这样,您无需指定要向其中添加滚动条的组件。
add
JPanel