-2

I want to make a JTable where the text file is read line by line using 2d array for only row looping. How do I loop on row in the DefaultTableModel.

here is my code:

try{
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("Database.txt"))));
    String line = "";
    int width = 0, height = 0;

    while((line = br.readLine())!=null){

    if(width == 0){

    String data[] = line.split("-");
    width = data.length;

        }
    height++;

    String matrix[][] = new String[height][width];
    model = new DefaultTableModel(matrix, col);
    table = new JTable(model){
    public boolean isCellEditable(int row, int column){
    return false;
    }};
    }
}catch (IOException ex){
         ex.printStackTrace();
}

here is the whole code:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.table.*;
import java.io.*;
import java.util.*;

public class Administrator extends JFrame {

        private String col []= {"Account No.","PinCode","First Name",
        "Last Name", "MI","BirthDate","Sex","E-mail","Address"};
        private JScrollPane scroll;
        private JTable table;
        private DefaultTableModel model;

     public Administrator(){
        //ImageIcon bcr = new ImageIcon(getClass().getResource("/images/bcr.jpg"));
        final JButton back = new JButton("back");
        back.setLocation(20,480);
        back.setSize(70,30);
        back.setPreferredSize(new Dimension(90,30));
        back.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            dispose();
            }
        }
        );
        try{

            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("Database.txt"))));

            String line = "";

            int width = 0, height = 0;

            while((line = br.readLine())!=null){

            if(width == 0){

            String data[] = line.split("-");
            width = data.length;

            }
            height++;

            String matrix[][] = new String[height][width];
            model = new DefaultTableModel(matrix, col);
            table = new JTable(model){
            public boolean isCellEditable(int row, int column){
            return false;
                }
            };
        }
        }
        catch (IOException ex){
        ex.printStackTrace();
        }

        DefaultTableCellRenderer cent = new DefaultTableCellRenderer();
        cent.setHorizontalAlignment( JLabel.CENTER );
        table.getColumnModel().getColumn(0).setCellRenderer(cent);
        table.getColumnModel().getColumn(1).setCellRenderer(cent);
        table.getColumnModel().getColumn(2).setCellRenderer(cent);
        table.getColumnModel().getColumn(3).setCellRenderer(cent);
        table.getColumnModel().getColumn(4).setCellRenderer(cent);
        table.getColumnModel().getColumn(5).setCellRenderer(cent);
        table.getColumnModel().getColumn(6).setCellRenderer(cent);
        table.getColumnModel().getColumn(7).setCellRenderer(cent);
        table.getColumnModel().getColumn(0).setPreferredWidth(100);
        table.getColumnModel().getColumn(1).setPreferredWidth(100);
        table.getColumnModel().getColumn(2).setPreferredWidth(100);
        table.getColumnModel().getColumn(3).setPreferredWidth(100);
        table.getColumnModel().getColumn(4).setPreferredWidth(50);
        table.getColumnModel().getColumn(5).setPreferredWidth(100);
        table.getColumnModel().getColumn(6).setPreferredWidth(50);
        table.getColumnModel().getColumn(7).setPreferredWidth(120);

        scroll = new JScrollPane(table);
        scroll.setLocation(20, 320);
        scroll.setSize(750,150);

        Container pane = getContentPane();
        pane.setLayout(null);
        pane.add(back);
        pane.add(scroll);

        /*setIconImage(new ImageIcon("/images/icon.jpg").getImage());
        setLayout(new BorderLayout());
        JLabel www = new JLabel(new ImageIcon(getClass().getResource("/images/admin.jpg")));
        add(www);*/
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setTitle("Account Profile");
        setSize(800,550);
        setResizable(false);
        setVisible(true);
        setLocation(110, 30);
     }
     public static void main(String[]args){
        new Administrator();
     }
}
mKorbel
  • 109,525
  • 20
  • 134
  • 319
user2104819
  • 21
  • 1
  • 1
  • 2
    Try reading the response here: http://stackoverflow.com/a/11001018/1427124 – DaoWen Mar 01 '13 at 16:42
  • It will be much useful if you add more details. Like, version of Java, salary of your boss and enviromental conditions (i.e. temperature) that your table should work at. You know, it is a system. Every piece of information may be useful in combination. No need to simply ask how to add a row to a table. – Val Mar 01 '13 at 16:58

1 Answers1

2

1) Create an DefaultTableModel with no data and only the column names:

DefaultTableModel model = new DefaultTableModel(columnName, 0);

2) In your loop when you read each line of text from the file you would do something like:

String[] data = line.split("-");
model.addRow( data );

3) When you are finished reading all the text then you create the table:

JTable table = new JTable( model );
camickr
  • 321,443
  • 19
  • 166
  • 288