Reputation: 27
I looking for way to put data from CSV file to table. I have problem with refresh rate. Table print out just one row. How do I change this code to print more rows in table? Because in CSV file I have for example 20 or more rows.
import java.awt.Component;
import java.awt.Font;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.Reader;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class FileParser {
String aFileToRead = "";
public FileParser(String aNameOfFile) {
this.aFileToRead = aNameOfFile;
}
public void readFileToObjects() {
int comma1=0;
int comma2=0;
int comma3=0;
int comma4=0;
int comma5=0;
int comma6=0;
int comma7=0;
int comma8=0;
int comma9=0;
int comma10=0;
int comma11=0;
int comma12=0;
int comma13=0;
int comma14=0;
int comma15=0;
int endOfLine=0;
double aTemperature = 0.0;
double aHumidity = 0.0;
double aPressure = 0.0;
double aOrientation_x = 0.0;
double aOrientation_y = 0.0;
double aOrientation_z = 0.0;
double aMagnetic_x = 0.0;
double aMagnetic_y = 0.0;
double aMagnetic_z = 0.0;
double aSpeed_x = 0.0;
double aSpeed_y = 0.0;
double aSpeed_z = 0.0;
String aGyroscope_x = "";
String aGyroscope_y = "";
String aGyroscope_z = "";
String aTime = "";
String chartPositionAsString="";
JFrame frame = new JFrame();
try {
String aStr = null;
FileInputStream aFile = new FileInputStream(this.aFileToRead);
InputStreamReader aInReader = new InputStreamReader(aFile);
BufferedReader theBufReader = new BufferedReader(aInReader);
while ((aStr = theBufReader.readLine()) != null) {
comma1 = aStr.indexOf(",");
chartPositionAsString = aStr.substring(0, comma1);
aTemperature = Double.parseDouble(chartPositionAsString);
comma2 = aStr.indexOf(",", comma1 + 1);
chartPositionAsString = aStr.substring(comma1 + 1, comma2);
aHumidity = Double.parseDouble(chartPositionAsString);
comma3 = aStr.indexOf(",", comma2 + 1);
chartPositionAsString = aStr.substring(comma2 + 1, comma3);
aPressure = Double.parseDouble(chartPositionAsString);
comma4 = aStr.indexOf(",", comma3 + 1);
chartPositionAsString = aStr.substring(comma3 + 1, comma4);
aOrientation_x = Double.parseDouble(chartPositionAsString);
comma5 = aStr.indexOf(",", comma4 + 1);
chartPositionAsString = aStr.substring(comma4 + 1, comma5);
aOrientation_y = Double.parseDouble(chartPositionAsString);
comma6 = aStr.indexOf(",", comma5 + 1);
chartPositionAsString = aStr.substring(comma5 + 1, comma6);
aOrientation_z = Double.parseDouble(chartPositionAsString);
comma7 = aStr.indexOf(",", comma6 + 1);
chartPositionAsString = aStr.substring(comma6 + 1, comma7);
aMagnetic_x = Double.parseDouble(chartPositionAsString);
comma8 = aStr.indexOf(",", comma7 + 1);
chartPositionAsString = aStr.substring(comma7 + 1, comma8);
aMagnetic_y = Double.parseDouble(chartPositionAsString);
comma9 = aStr.indexOf(",", comma8 + 1);
chartPositionAsString = aStr.substring(comma8 + 1, comma9);
aMagnetic_z = Double.parseDouble(chartPositionAsString);
comma10 = aStr.indexOf(",", comma9 + 1);
chartPositionAsString = aStr.substring(comma9 + 1, comma10);
aSpeed_x = Double.parseDouble(chartPositionAsString);
comma11 = aStr.indexOf(",", comma10 + 1);
chartPositionAsString = aStr.substring(comma10 + 1, comma11);
aSpeed_y = Double.parseDouble(chartPositionAsString);
comma12 = aStr.indexOf(",", comma11 + 1);
chartPositionAsString = aStr.substring(comma11 + 1, comma12);
aSpeed_z = Double.parseDouble(chartPositionAsString);
comma13 = aStr.indexOf(",", comma12 + 1);
chartPositionAsString = aStr.substring(comma12 + 1, comma13);
aGyroscope_x = (chartPositionAsString);
comma14 = aStr.indexOf(",", comma13 + 1);
chartPositionAsString = aStr.substring(comma13 + 1, comma14);
aGyroscope_y = (chartPositionAsString);
comma15 = aStr.indexOf(",", comma14 + 1);
chartPositionAsString = aStr.substring(comma14 + 1, comma15);
aGyroscope_z = (chartPositionAsString);
endOfLine = aStr.length();
aTime = chartPositionAsString = aStr.substring(comma15 + 1, endOfLine);
Env aEnv = new Env(aTemperature, aHumidity, aPressure,
aOrientation_x, aOrientation_y, aOrientation_z,
aMagnetic_x, aMagnetic_y, aMagnetic_z, aSpeed_x, aSpeed_y, aSpeed_z,
aGyroscope_x, aGyroscope_y, aGyroscope_z,
aTime);
String columnNames1[] = { "Temperature", "Humidity", "Pressure",
"Orientation yaw", "Orientation pitch", "Orientation roll",
"Magnetic X", "Magnetic Y", "Magnetic Z",
"Speed X", "Speed Y", "Speed Z",
"Gyroscope X", "Gyroscope Y", "Gyroscope Z",
"Time" };
Object[][] rowData1 = {
{aEnv.getTemperature(), aEnv.getHumidity(), aEnv.getPressure(),
aEnv.getOrientation_x(), aEnv.getOrientation_y(), aEnv.getOrientation_z(),
aEnv.getMagnetic_x(), aEnv.getMagnetic_y(), aEnv.getMagnetic_z(),
aEnv.getSpeed_x(), aEnv.getSpeed_y(), aEnv.getSpeed_z(),
aEnv.getGyroscope_x(), aEnv.getGyroscope_y(), aEnv.getGyroscope_z(),
aEnv.getTime(),}};
JTable table = new JTable(rowData1, columnNames1);
JScrollPane scrollPane = new JScrollPane(table);
table.getTableHeader().setFont(new Font("Serif", Font.BOLD, 15));
frame.add((Component) scrollPane, "Center");
frame.setTitle("Enviromental Data");
frame.setDefaultCloseOperation(3);
frame.setSize(1900, 100);
frame.setVisible(true);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("The File is Not in The Correct Directory");
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
Upvotes: 1
Views: 7895
Reputation: 14572
You are using a lot of variable for nothing.
List<String[]> rows = new ArrayList<>();
while ((aStr = theBufReader.readLine()) != null) {
String[] dataLine = aStr.split(",");
rows.add(dataLine);
}
Then, create the JTable, you probably going to need to recreate the Object[][]
from the list. Or see this to Populate JTable Using List
If you really need to convert some row to number (for formatting), you can use a loop to convert those columns, using an array containing the column index and loop only on those.
Upvotes: 2