首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DefaultTableModel为空?

DefaultTableModel为空?
EN

Stack Overflow用户
提问于 2012-04-21 00:10:32
回答 1查看 2.6K关注 0票数 0

我正在读取一个文件,并希望将其输出到jTable以供查看和编辑。当我尝试在DefaultTableModel中添加行时,由于某种原因,模型总是空的。任何帮助/指导都将不胜感激。谢谢!

代码语言:javascript
复制
public class ReadFileGUI extends javax.swing.JFrame {

public static String file;
private DefaultTableModel model = new DefaultTableModel();

public ReadFileGUI() {
    initComponents();
}

 @SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

    jButton1 = new javax.swing.JButton();
    jScrollPane1 = new javax.swing.JScrollPane();
    jTable1 = new javax.swing.JTable(model);

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);


    jButton1.setText("Test");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    jScrollPane1.setViewportView(jTable1);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(14, 14, 14)
                    .addComponent(jButton1)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGap(0, 0, Short.MAX_VALUE))
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 397, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 282, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jButton1))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

        String line = "Hello~There~This~Is~A~Test";
        String datavalue[] = line.split("~");                            
        Vector v = new Vector(Arrays.asList(datavalue));

        model.addRow(v);                  
        jTable1.tableChanged(new TableModelEvent(model));   
}

public static void main(String args[]) {

    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(ReadFileGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(ReadFileGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(ReadFileGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(ReadFileGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new ReadFileGUI().setVisible(true);
        }
    });
}    

private javax.swing.JButton jButton1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-21 03:21:27

下面是您的代码的更新版本,它似乎可以正常工作

代码语言:javascript
复制
import javax.swing.event.TableModelEvent;
import javax.swing.table.DefaultTableModel;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Vector;

public class ReadFileGUI extends javax.swing.JFrame {
  private DefaultTableModel tableModel = new DefaultTableModel();
  private javax.swing.JButton populateTableButton;
  private javax.swing.JScrollPane tableScrollPane;
  private javax.swing.JTable table;

  public ReadFileGUI() {
    initComponents();
    setDefaultCloseOperation( javax.swing.WindowConstants.EXIT_ON_CLOSE);
  }

  @SuppressWarnings("unchecked")
  private void initComponents() {
    populateTableButton = new javax.swing.JButton();
    tableScrollPane = new javax.swing.JScrollPane();
    table = new javax.swing.JTable( tableModel );

    populateTableButton.setText( "Test" );
    populateTableButton.addActionListener( new ActionListener() {
      @Override
      public void actionPerformed( ActionEvent evt ) {
        populateTable();
      }
    } );

    tableScrollPane.setViewportView( table );

    getContentPane().setLayout( new BorderLayout(  ) );
    getContentPane().add( tableScrollPane, BorderLayout.CENTER );
    getContentPane().add( populateTableButton, BorderLayout.SOUTH );
    pack();
  }


  private void populateTable( ) {
    String line = "Hello~There~This~Is~A~Test";
    String dataValue[] = line.split("~");
    Vector<String> v = new Vector<>( Arrays.asList( dataValue ));
    tableModel.setColumnCount( v.size() );
    tableModel.addRow( v );
  }

  public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
      @Override
      public void run() {
        new ReadFileGUI().setVisible(true);
      }
    });
  }         
}

我改变了一些事情:

  • 使用导入而不是全名来避免水平滚动条
  • 使用BorderLayout iso生成的布局来缩短代码
  • 重命名了一些变量以提高代码的可读性
  • 删除了jTable1.tableChanged(new TableModelEvent(model));调用,因为当您使用<代码>D11方法时,<代码>D10将触发相应的事件。不需要在下一次向表

指示此更改

但相关的更改是tableModel.setColumnCount( v.size() );调用。DefaultTableModel的默认构造函数创建一个没有列和行的模型。如果首先设置列数,则可以使用addRow方法

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10249718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档