更新后JTable没有显示结果?

时间:2011-10-18 01:48:23

标签: java swing jtable jscrollpane

我在从数据库中获取结果后,在运行时创建一个表。我的应用程序流程是这样的。

  1. 初始化一个空的JScrollPane(); JScrollPane tableScroll = new JScrollPane();
  2. 从数据库中获取结果;
  3. 使用以下方法将结果更新为JTable并将JTable添加到JScrollPane:
  4. 代码:

    private void setResultTable(Vector documents, Vector header) {
       TableModel model = new DefaultTableModel(documents, header);
       documentTable.setModel(model);
       tableScroll.add(documentTable);
       tableScroll.repaint();
    }
    

    我的问题是在调用setResultTable后,结果没有出现在表中。请帮帮我。在此先感谢!!!

1 个答案:

答案 0 :(得分:6)

您似乎将JTable直接添加到JScrollPane。如果是这样,这是不正确的,您将要更改此项,以便您实际将表格添加到滚动窗格的视口中:

tableScroll.getViewport().add(documentTable);

执行此操作后无需重新绘制JScrollPane。

例如:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class AddTableToScroll {
   public static void main(String[] args) {
      final JScrollPane sPane = new JScrollPane();

      // Sorry Jeanette!!
      sPane.setPreferredSize(new Dimension(200, 150));

      JButton button = new JButton(new AbstractAction("Press Me!") {

         public void actionPerformed(ActionEvent arg0) {
            DefaultTableModel model = new DefaultTableModel(new Integer[][] {
                  { 1, 2 }, { 3, 4 } }, new String[] { "A", "B" });
            JTable table = new JTable(model);

            sPane.getViewport().add(table);

         }
      });

      JPanel panel = new JPanel();
      panel.add(sPane);
      panel.add(button);

      JOptionPane.showMessageDialog(null, panel);

   }
}

如果这没有帮助,您还需要告诉我们具体发生了什么,您看到了什么,以及是否可能为我们提供一个小型可编译的可运行程序来演示您的问题,SSCCE