Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Στον παρακάτω κώδικα προσπαθώ να πάρω έναν πίνακα JTable και να τον αποθηκεύσω σε ένα file.

Το θέμα μου είναι ότι τρέχει μέχρι και την 3η στήλη του πίνακα , ενώ αυτός έχει 4.

 

 

 

 

>


import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class windowOptions extends JFrame implements ActionListener {

DefaultTableModel model = new DefaultTableModel();
public JTable prosopiko = new JTable(model);

public windowOptions(){
//Initialize window
setTitle("Options");
setSize(300,300);
setVisible(true); 

//Initialize model for table
model.addColumn("Onoma");
model.addColumn("Epitheto");
model.addColumn("Thesi");
model.addColumn("Merokamata");

//Create Swing Components
JPanel panelOptions = new JPanel(new FlowLayout());
JButton addB = new JButton("Add"); 
JButton okB = new JButton("Ok");
JScrollPane scrollPane = new JScrollPane(prosopiko);

//Add actionListeners 
addB.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
model.addRow(new Object[]{"","","",""});

}
});

okB.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
try{
FileWriter fstream = new FileWriter("prosopiko.txt");
BufferedWriter out = new BufferedWriter(fstream);

TableModel tempModel = prosopiko.getModel();
JOptionPane.showMessageDialog(null, tempModel.getColumnCount());
for(int i=1 ; i<=tempModel.getRowCount() ; i++){
for(int j=1 ; j+1<=tempModel.getColumnCount() ; j++){
out.write(tempModel.getValueAt(i, j).toString());
System.out.print("i:"+i+"\nj:"+j+"\n");
}

}
out.close(); 

}catch(Exception e){

}


}});

panelOptions.add(scrollPane);
panelOptions.add(addB);
panelOptions.add(okB);

add(panelOptions);
pack();
}

}

Δημοσ.

Σου διαβάζει μέχρι την τρίτη ή από τη δεύτερη και μέχρι την τέταρτη..??

 

Στον κώδικα εδώ μπορείς να μου εξηγήσεις γιατί ξεκινάς τα i και j από το 1 και όχι από το 0..? και δεύτερον γιατί στο j έχεις βάλει j+1<tempModel.getColumnCount() ?

 

>
for(int i=1 ; i<=tempModel.getRowCount() ; i++){
for(int j=1 ; j+1<=tempModel.getColumnCount() ; j++){

 

νομίζω το σωστό θα ήταν:

>
for(int i=0 ; i<tempModel.getRowCount() ; i++){
for(int j=0 ; j<tempModel.getColumnCount() ; j++){

  • Like 1
Δημοσ.

Παιδιά θα σκάσω , έκανα print το exception και μου βγάζει out of bounds error...

2 Μέρες τώρα παιδεύομαι με αυτό...

 

>
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
public class windowOptions extends JFrame implements ActionListener {
DefaultTableModel model = new DefaultTableModel();
public JTable prosopiko = new JTable(model);

public windowOptions(){
 //Initialize window
 setTitle("Options");
 setSize(300,300);
 setVisible(true); 

 //Initialize model for table
 model.addColumn("Onoma");
 model.addColumn("Epitheto");
 model.addColumn("Thesi");
 model.addColumn("Merokamata");


 //Create Swing Components
 JPanel panelOptions = new JPanel(new FlowLayout());
 JButton addB = new JButton("Add");
 JButton okB = new JButton("Ok");
 JScrollPane scrollPane = new JScrollPane(prosopiko);

 //Add actionListeners
 addB.addActionListener(new ActionListener() {
 
  @Override
  public void actionPerformed(ActionEvent e) {
   model.addRow(new Object[]{"","","",""});
  
  
  }
 });

 okB.addActionListener(new ActionListener() {
 
  @Override
  public void actionPerformed(ActionEvent arg0) {
   try{

   FileWriter fstream = new FileWriter("prosopiko.txt");
   BufferedWriter out = new BufferedWriter(fstream);

   TableModel tempModel = prosopiko.getModel();
   int rows = tempModel.getRowCount();
   int cols = tempModel.getColumnCount();
   prosopiko.setModel(model);
   for(int i=1 ; i<=rows ; i++){
 for(int j=1 ;j<=cols ; j++){
  System.out.println(model.getValueAt(i, j));
 
 }

   }
  out.close();
 
  }catch(Exception e){
   e.printStackTrace();
  }
 
 
 }});

 panelOptions.add(scrollPane);
 panelOptions.add(addB);
 panelOptions.add(okB);

 add(panelOptions);
 pack();

}
@Override
public void actionPerformed(ActionEvent arg0) {
 // TODO Auto-generated method stub

}


}

 

Console

 

>
123213123
123123
java.lang.ArrayIndexOutOfBoundsException: 4 >= 4
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source)
at windowOptions$2.actionPerformed(windowOptions.java:86)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Δημοσ.

το έκανες αυτό που σου είπα?

 

>for(int i=0 ; i<rows ; i++){
for(int j=0 ;j<cols ; j++){
System.out.println(model.getValueAt(i, j));

 

η πρώτη στήλη δεν είναι η 1 αλλά η 0

Δημοσ.

αντικατέστησε τον listener του okB με αυτό

okB.addActionListener(new ActionListener() {

 

@Override

public void actionPerformed(ActionEvent arg0) {

try{

 

FileWriter fstream = new FileWriter("prosopiko.txt");

BufferedWriter out = new BufferedWriter(fstream);

 

 

prosopiko.setModel(model);

out.write("onoma \t epitheto \t thesi \t merokamata" );

out.newLine();

for(int i=0 ; i < model.getRowCount() ; i++){

for(int j=0 ;j < model.getColumnCount() ; j++){

System.out.println(model.getValueAt(i, j));

out.write(model.getValueAt(i, j).toString()+"\t");

}

out.newLine();

}

out.close();

 

}catch(Exception e){

e.printStackTrace();

}

 

 

}});

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...