0

ファイルを読み込んでいて、それをjTableに出力して表示および編集したいと考えています。DefaultTableModelに行を追加しようとすると、何らかの理由でモデルが常に空になります。任意のヘルプ/指示をいただければ幸いです。ありがとう!

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;

}

4

1 に答える 1

3

ここに、動作しているように見えるコードの更新バージョンがあります

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

私が変更したもの:

  • 水平スクロールバーを避けるために、フルネームの代わりにインポートを使用
  • BorderLayoutisoで生成されたレイアウトを使用してコードを短縮しました
  • コードの読みやすさを向上させるために、一部の変数の名前を変更しました
  • メソッドを使用すると適切なイベントが発生するため、jTable1.tableChanged(new TableModelEvent(model));呼び出しを削除しました。この変更を別の機会にテーブルに示す必要はありませんDefaultTableModeladdRow

しかし、関連する変更はtableModel.setColumnCount( v.size() );呼び出しです。のデフォルトのコンストラクターはDefaultTableModel、列と行がゼロのモデルを作成します。最初に列数を設定する場合は、このaddRow方法を使用できます

于 2012-04-20T19:21:27.147 に答える