How do I get "user input from another file" to display in a table in JAVA?

Below is some sample code to display a table, but how do I do that when I want to get information from user input from another file?

package components;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class SimpleTableDemo extends JPanel {
    private boolean DEBUG = false;

    public SimpleTableDemo() {
        super(new GridLayout(1,0));

        String[] columnNames = {"First Name",
                                "Last Name",
                                "Sport",
                                "# of Years",
                                "Vegetarian"};

      

Instead of manually entering each information, how can I get information from another file?

        **Object[][] data = {
        {"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)},
        {"John", "Doe","Rowing", new Integer(3), new Boolean(true)},
        {"Sue", "Black","Knitting", new Integer(2), new Boolean(false)},
        {"Jane", "White","Speed reading", new Integer(20), new Boolean(true)},
        {"Joe", "Brown","Pool", new Integer(10), new Boolean(false)} };**

        final JTable table = new JTable(data, columnNames);
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
        table.setFillsViewportHeight(true);

        if (DEBUG) {
            table.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {
                    printDebugData(table);
                }
            });
        }

        //Create the scroll pane and add the table to it.
        JScrollPane scrollPane = new JScrollPane(table);

        //Add the scroll pane to this panel.
        add(scrollPane);
    }

    private void printDebugData(JTable table) {
        int numRows = table.getRowCount();
        int numCols = table.getColumnCount();
        javax.swing.table.TableModel model = table.getModel();

        System.out.println("Value of data: ");
        for (int i=0; i < numRows; i++) {
            System.out.print("    row " + i + ":");
            for (int j=0; j < numCols; j++) {
                System.out.print("  " + model.getValueAt(i, j));
            }
            System.out.println();
        }
        System.out.println("--------------------------");
    }

    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("SimpleTableDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        SimpleTableDemo newContentPane = new SimpleTableDemo();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

      

+3


source to share


2 answers


You can write the user information to a file in csv format (comma separated values) and then use OpenCSV to parse that file and build the matrix or array you use to display.



0


source


So basically your question is how to get the content of a file in Object [] []?

Assuming you have lines in your file and lines look like this:

Kathy,Smith,Snowboarding,5,false
John,Doe,Rowing,3,true

      



is a CSV file. To read CSV files your best bet is to download openCSV However, if you still want to do it yourself and your data is in a file called "data.csv", I would use a scanner. Also, assuming you don't know about ArrayLists and the like, here's some code you can do.

Scanner s = new Scanner(new File("data.csv"));
int count = 0;
while (s.hasNext())
   count++;
// now count has the number of lines in the file and you know 
// there are 5 attributes.
Object[][] data = new Object[count][5]
Scanner s1 = new Scanner(new File("data.csv"));
count = 0;
while(s1.hasNext()){
   String[] fields = s1.next().split(",");
   data[count][0] = field[0];
   data[count][1] = fields[1];
   data[count][2] = fields[2];
   data[count][3] = new Integer(Integer.parseInt(fields[3]));
   data[count][4] = new Boolean(fields[4].equals("true");
   count++;   
}

      

Finally, beware of the indexOutOfBounds error that can occur if you leave blank lines at the beginning, between lines, or one line at the end (i.e. the last line of your file is blank)

0


source







All Articles