在运行时更改JTable引用 - 不出现在GUI中

时间:2008-12-30 13:19:18

标签: java swing java-me jtable

我正在尝试掌握Pocket PC的Java ME开发。我正在运行NSIcom CrE-ME模拟器并使用NetBeans 6.5构建我的应用程序。

该应用程序基于三个选项卡面板,每个面板都有Swing组件。 Swing组件的内容在应用程序的各个点进行更新。这些组件包括JTextArea,JTextFields,最重要的是JScrollPane中的JTable。

JTable导致问题。如果我通过马蒂斯用一些样本数据初始化它,它就会出现。但是如果我尝试在运行时在下面的populateFields()方法中设置JTable的引用,则不会出现任何内容。请注意,这只是Sun教程中的示例表数据,甚至不是我的自定义TableModel。

我做错了什么?是否有一些我需要调用的明显更新方法,或者我错过了一些其他明显的错误/ conecpt?我几乎尝试了所有可能的方法,我认为这可能与它有关。

在程序中的不同时间调用populateFields()方法。

    public void populateFields()
    {

        String[] columnNames = {"First Name", "Last Name","Sport", "# of Years", "Vegetarian"};
        Object[][] data = { {"Mary", "Campione", "Snowboarding", new Integer(5), new Boolean(false)},
            {"Alison", "Huml", "Rowing", new Integer(3), new Boolean(true)},
            {"Kathy", "Walrath", "Knitting", new Integer(2), new Boolean(false)},
            {"Sharon", "Zakhour", "Speed reading", new Integer(20), new Boolean(true)},
            {"Philip", "Milne", "Pool", new Integer(10), new Boolean(false)} };


        this.tableSurvey = new JTable(new DefaultTableModel(data, columnNames));
        this.scrollPaneSurvey = new JScrollPane(this.tableSurvey);
        DefaultTableModel dtm = (DefaultTableModel) this.tableSurvey.getModel();
        dtm.fireTableStructureChanged();
        dtm.fireTableDataChanged();
        this.scrollPaneSurvey.invalidate();
        this.scrollPaneSurvey.validate();
        this.panelSurvey.validate();
        this.panelSurvey.repaint();
    }

2 个答案:

答案 0 :(得分:1)

好的,我终于发现显然这就是我所需要的:

this.tableSurvey = new JTable(new DefaultTableModel(data, columnNames));       
this.scrollPaneSurvey.setViewportView(this.tableSurvey);
this.scrollPaneSurvey.validate();

有谁可以解释为什么使用下面的代码而不是setViewportView()方法不起作用?

this.scrollPaneSurvey = new JScrollPane(this.tableSurvey);

谢谢!

答案 1 :(得分:0)

我认为,根据您的代码段,您正在执行

this.scrollPaneSurvey = new JScrollPane(this.tableSurvey);

但问题是父面板布局管理器有自己对旧scrollPaneSurvey的引用。因此,当您重新创建它时,您永远不会替换现有组件,并且此新组件永远不会添加到渲染管道中。你的班级知道它,但是父母没有看到改变的通知。

这有意义吗?

在你发布的第二部分中,你告诉scrollPaneSurvey它应该显示什么,它会生成自动重绘的通知。