【问题标题】:Java JTable data loadingJava JTable 数据加载
【发布时间】:2012-05-01 02:59:00
【问题描述】:

所以我有一个大型卡片布局,其中一个面板作为 JTable:

tbm = new DefaultTableModel();  
tbm.addColumn("Account Number"); 
tbm.addColumn("PIN"); 
tbm.addColumn("Access Level"); 
tbm.addColumn("Balance");
table = new JTable(tbm);
JScrollPane scrollPane = new JScrollPane(table);

在actionPerformed下,我正在尝试将一些数据加载到表中,如下所示:

else if(event.getSource() == listallButton) {
      String query = "SELECT * FROM ATM";
      String delimiter = ",";
      String input = "go";
      int count=0;
      al = new ArrayList<String>();

          try {
              communicationObject = new DataObject();
              communicationObject.setMessage(query);
              Socket socketToServer = new Socket("sunlab32.njit.edu",31414);
              ObjectOutputStream myOutputStream = new ObjectOutputStream(socketToServer.getOutputStream());
              ObjectInputStream myInputStream = new ObjectInputStream(socketToServer.getInputStream());
              myOutputStream.writeObject(communicationObject);
              communicationObject = (DataObject)myInputStream.readObject();
              input = communicationObject.getMessage();
              if (input != "stop") {
                  al.add(input);
                  data[count] = input;
                  count++; }

              for (int i=0;i<data.length;i++) {
                  row = data[i];
                  temp = row.split(delimiter);
                  tbm.addRow(new String[] {temp[0],temp[1],temp[2],temp[3]}); } 
              tbm.fireTableDataChanged();
              table.repaint();

现在我的问题是在加载所有行后表格没有重新绘制...有什么建议吗?

【问题讨论】:

  • 1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2)这是homework吗?如果是这样,最好将其标记为这样。

标签: java swing jtable event-dispatching


【解决方案1】:

tbm.addModel 应该是触发表更改事件,所以tbm.fireTableDataChanged 不是必需的。

您可以尝试这样做,以在添加所有行后强制它自行绘制。

table.setModel(tbm);

题外话:

Swing 是单线程事件模型,这意味着您正在执行的任务将阻止 UI 更新。

我建议您将数据加载移至 SwingWorker,并在完成更改后将数据推送到 UI。看看这个tutorial

【讨论】:

    【解决方案2】:

    无需致电tbm.fireTableDataChanged();。模型本身会通知表以响应addRow()。如果表格和模型连接正确,表格将自行刷新。

    您可能会发现这个example 很有帮助,它演示了DefaultTableModel 的使用。

    由于此代码不可见,请确保表格和滚动窗格设置正确。此外,请确保您的查询实际返回数据。

    【讨论】:

      猜你喜欢
      • 2017-11-20
      • 2013-05-08
      • 2012-02-03
      • 1970-01-01
      • 2013-12-29
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多