当前位置: 首页 > 面试题库 >

JTable不显示列名称

南门欣怡
2023-03-14
问题内容

这是我的代码:

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);

请告诉我我的代码在哪里错误?谢谢!

编辑:有人问了同样的问题(JTable中没有标题),但是答案是将Jtable添加到JScrollPane,这对@@无济于事。编辑:嗨,
,我已经添加了完整的Constructor,这是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了错误的方式。为使其正常工作,请执行以下操作。

JTable实例传递给JScrollPane构造函数中的:

private JScrollPane scrollPane = new JScrollPane(contentTable);

注释掉您以前用来添加的JTableJScrollPane

// scrollPane.add(contentTable);

当您将组件放在的构造函数中时JScrollPane,您会提到哪个是要应用滚动的视图。

另一方面add,您可以使用方法将组件添加到容器中,就像将其添加到中一样JPanel。这样,您无需指定要向其中添加滚动条的组件。



 类似资料:
  • 问题内容: 我有以下代码实例化JTable:该表具有正确数量的行和列,但是在列顶部没有标题的迹象。 与其他制表代码相比,我看不到任何遗漏的步骤,但是必须缺少某些内容。 问题答案: 把你的JTable里面。试试这个:

  • 我有一个称为“Profile”的对象列表,每个Profile都有一个功能列表(一个Profile可以做的事情)和一个与该Profile关联的用户列表。 我想在一个JTable中显示这些信息。首先,用le功能显示配置文件,然后显示该配置文件中的用户。类似这样的事情: 因此,首先,我实现了一个更聪明的getRowCount()方法,然后是一个getValueAt方法,该方法在JTable中打印一个配置

  • 问题内容: 我想做的事: 我想列出数据库的一些记录。此列表应显示在 JFrame弹出窗口中。 描述: 我有3节课: Main.java(运行程序) PeopleTableModel.java(保存数据,扩展AbstractTableModel) PeopleTable.java(保存逻辑,扩展JTable) 将JFrame设置为 可见时,为什么会出现ArrayIndexOutOfBoundsExc

  • 当我单击按钮时,要在面板中显示一个表。我能够显示表,但不能显示标题。也尝试过使用JscrollPane,但这里根本没有显示ups。 代码的主要部分:

  • 我尝试创建连接到MySQL数据库的销售点程序。我有一个来显示商品序列、商品名称和价格,我想在中得到总价的总和,我写了以下内容: 当我尝试开始新账单时,文本字段不会返回到零,而是按以前账单的总数开始。