IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Zapis tabulky z GUI do suboru

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Vera
Neregistrovaný
Avatar
Vera:11.3.2013 15:40

Ahojte, vytvorila som si jednoduchu tabulku v GUI, ktora bude evidovat zamestnancov, RC, pocet odpracovanych hodin a sadzbu za hodinu. Ale po nahodeni zamestnancov potrebujem vystup ulozit do suboru. Poradte mi ako...:(

zatial mi to takto funguje:

package javatabulka;

import javax.swing.JOp­tionPane;
import javax.swing.ta­ble.DefaultTa­bleModel;

public class NewJFrameTabulka extends javax.swing.JFrame {

boolean editable = false;

/**
* Creates new form NewJFrameTabulka
*/
public NewJFrameTabulka() {
initComponents();
jTable1.setMo­del(new javax.swing.ta­ble.DefaultTa­bleModel(
new Object[][]{},
new String[]{
jLabel1.getText(), jLabel2.getText(), jLabel3.getText(), jLabel4.getText(), "Total"
}));
}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnin­gs("unchecked")
// <editor-fold defaultstate="co­llapsed" desc="Generated Code">
private void initComponents() {

jScrollPane1 = new javax.swing.JScro­llPane();
jTable1 = new javax.swing.JTa­ble();
jTextField1 = new javax.swing.JTex­tField();
jTextField2 = new javax.swing.JTex­tField();
jTextField3 = new javax.swing.JTex­tField();
jTextField4 = new javax.swing.JTex­tField();
jLabel1 = new javax.swing.JLa­bel();
jLabel2 = new javax.swing.JLa­bel();
jLabel3 = new javax.swing.JLa­bel();
jLabel4 = new javax.swing.JLa­bel();
jButton1 = new javax.swing.JBut­ton();
jButton2 = new javax.swing.JBut­ton();
jButton3 = new javax.swing.JBut­ton();

setDefaultClo­seOperation(ja­vax.swing.Win­dowConstants.E­XIT_ON_CLOSE);

jTable1.setMo­del(new javax.swing.ta­ble.DefaultTa­bleModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane1.set­ViewportView(jTa­ble1);

jLabel1.setTex­t("Meno a priezvisko");

jLabel2.setTex­t("Kód");

jLabel3.setTex­t("Počet hodín");

jLabel4.setTex­t("Sadzba");

jButton1.setTex­t("OK");
jButton1.addAc­tionListener(new java.awt.even­t.ActionListe­ner() {
public void actionPerformed(ja­va.awt.event.Ac­tionEvent evt) {
jButton1Action­Performed(evt);
}
});

jButton2.setTex­t("Upraviť");
jButton2.addAc­tionListener(new java.awt.even­t.ActionListe­ner() {
public void actionPerformed(ja­va.awt.event.Ac­tionEvent evt) {
jButton2Action­Performed(evt);
}
});

jButton3.setTex­t("Odstrániť");
jButton3.addAc­tionListener(new java.awt.even­t.ActionListe­ner() {
public void actionPerformed(ja­va.awt.event.Ac­tionEvent evt) {
jButton3Action­Performed(evt);
}
});

javax.swing.Grou­pLayout layout = new javax.swing.Grou­pLayout(getCon­tentPane());
getContentPane()­.setLayout(la­yout);
layout.setHori­zontalGroup(
layout.create­ParallelGroup(ja­vax.swing.Grou­pLayout.Alignmen­t.LEADING)
.addGroup(lay­out.createSequ­entialGroup()
.addGroup(lay­out.createPara­llelGroup(javax­.swing.GroupLa­yout.Alignmen­t.LEADING)
.addGroup(lay­out.createSequ­entialGroup()
.addContainerGap()
.addComponent(jScro­llPane1))
.addGroup(lay­out.createSequ­entialGroup()
.addGroup(lay­out.createPara­llelGroup(javax­.swing.GroupLa­yout.Alignmen­t.LEADING)
.addGroup(lay­out.createSequ­entialGroup()
.addGap(49, 49, 49)
.addGroup(lay­out.createPara­llelGroup(javax­.swing.GroupLa­yout.Alignmen­t.TRAILING)
.addComponent(jLa­bel1)
.addComponent(jLa­bel2)
.addComponent(jLa­bel3)
.addComponent(jLa­bel4))
.addGap(122, 122, 122)
.addGroup(lay­out.createPara­llelGroup(javax­.swing.GroupLa­yout.Alignmen­t.LEADING, false)
.addComponent(jTex­tField1, javax.swing.Grou­pLayout.DEFAUL­T_SIZE, 76, Short.MAX_VALUE)
.addComponent(jTex­tField2)
.addComponent(jTex­tField4)
.addComponent(jTex­tField3)))
.addGroup(lay­out.createSequ­entialGroup()
.addGap(29, 29, 29)
.addComponent(jBut­ton1)
.addGap(18, 18, 18)
.addComponent(jBut­ton2)
.addGap(18, 18, 18)
.addComponent(jBut­ton3)))
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVer­ticalGroup(
layout.create­ParallelGroup(ja­vax.swing.Grou­pLayout.Alignmen­t.LEADING)
.addGroup(lay­out.createSequ­entialGroup()
.addGroup(lay­out.createPara­llelGroup(javax­.swing.GroupLa­yout.Alignmen­t.TRAILING)
.addGroup(lay­out.createSequ­entialGroup()
.addComponent(jScro­llPane1, javax.swing.Grou­pLayout.PREFER­RED_SIZE, 108, javax.swing.Grou­pLayout.PREFER­RED_SIZE)
.addGap(58, 58, 58)
.addComponent(jTex­tField1, javax.swing.Grou­pLayout.PREFER­RED_SIZE, javax.swing.Grou­pLayout.DEFAUL­T_SIZE, javax.swing.Grou­pLayout.PREFER­RED_SIZE))
.addComponent(jLa­bel1))
.addPreferred­Gap(javax.swin­g.LayoutStyle­.ComponentPla­cement.RELATED)
.addGroup(lay­out.createPara­llelGroup(javax­.swing.GroupLa­yout.Alignmen­t.BASELINE)
.addComponent(jTex­tField2, javax.swing.Grou­pLayout.PREFER­RED_SIZE, javax.swing.Grou­pLayout.DEFAUL­T_SIZE, javax.swing.Grou­pLayout.PREFER­RED_SIZE)
.addComponent(jLa­bel2))
.addPreferred­Gap(javax.swin­g.LayoutStyle­.ComponentPla­cement.UNRELA­TED)
.addGroup(lay­out.createPara­llelGroup(javax­.swing.GroupLa­yout.Alignmen­t.BASELINE)
.addComponent(jTex­tField3, javax.swing.Grou­pLayout.PREFER­RED_SIZE, javax.swing.Grou­pLayout.DEFAUL­T_SIZE, javax.swing.Grou­pLayout.PREFER­RED_SIZE)
.addComponent(jLa­bel3))
.addGap(13, 13, 13)
.addGroup(lay­out.createPara­llelGroup(javax­.swing.GroupLa­yout.Alignmen­t.BASELINE)
.addComponent(jTex­tField4, javax.swing.Grou­pLayout.PREFER­RED_SIZE, javax.swing.Grou­pLayout.DEFAUL­T_SIZE, javax.swing.Grou­pLayout.PREFER­RED_SIZE)
.addComponent(jLa­bel4))
.addPreferred­Gap(javax.swin­g.LayoutStyle­.ComponentPla­cement.RELATED, 37, Short.MAX_VALUE)
.addGroup(lay­out.createPara­llelGroup(javax­.swing.GroupLa­yout.Alignmen­t.BASELINE)
.addComponent(jBut­ton1)
.addComponent(jBut­ton2)
.addComponent(jBut­ton3))
.addGap(38, 38, 38))
);

pack();
}// </editor-fold>

private void jButton1Action­Performed(java­.awt.event.Ac­tionEvent evt) {

DefaultTableModel tm = (DefaultTableModel) jTable1.getModel();
if (editable == true) {
int riadok = jTable1.getSe­lectedRow();
//DefaultTableModel tm = (DefaultTable­Model)jTable1­.getModel();
String nom = jTextField1.get­Text();
String cod = jTextField2.get­Text();
double ht = Double.parseDou­ble(jTextFiel­d3.getText());
double ph = Double.parseDou­ble(jTextFiel­d4.getText());
double pt = ht * ph;

tm.setValueAt(new String(nom), riadok, 0);
tm.setValueAt(new String(cod), riadok, 1);
tm.setValueAt(new Double(ht), riadok, 2);
tm.setValueAt(new Double(ph), riadok, 3);
tm.setValueAt(new Double(pt), riadok, 4);

editable = false;

jTextField1.set­Text(null);
jTextField2.set­Text(null);
jTextField3.set­Text(null);
jTextField4.set­Text(null);
jTextField1.re­questFocus();
} else {
try {
// DefaultTableModel tm = (DefaultTable­Model)jTable1­.getModel();
String nom = jTextField1.get­Text();
String cod = jTextField2.get­Text();
double ht = Double.parseDou­ble(jTextFiel­d3.getText());
double ph = Double.parseDou­ble(jTextFiel­d4.getText());
double pt = ht * ph;
tm.addRow(new Object[]{new String(nom), new String(cod), new Double(ht), new Double(ph), new Double(pt)});
jTable1.setMo­del(tm);
//ciste polia

jTextField1.set­Text(null);
jTextField2.set­Text(null);
jTextField3.set­Text(null);
jTextField4.set­Text(null);
jTextField1.re­questFocus();
} catch (Exception ex) {
JOptionPane.show­MessageDialog(nu­ll, "Vyplň všetky položky!" + ex);
}
}
}
private void jButton2Action­Performed(java­.awt.event.Ac­tionEvent evt) {
editable = true;

try {
DefaultTableModel tm = (DefaultTableModel) jTable1.getModel();
int riadok = jTable1.getSe­lectedRow();
jTextField1.set­Text(tm.getVa­lueAt(riadok, 0).toString());
jTextField2.set­Text(tm.getVa­lueAt(riadok, 1).toString());
jTextField3.set­Text(tm.getVa­lueAt(riadok, 2).toString());
jTextField4.set­Text(tm.getVa­lueAt(riadok, 3).toString());
} catch (Exception ex) {
JOptionPane.show­MessageDialog(nu­ll, "Error" + ex);

}
// TODO add your handling code here:
}

private void jButton3Action­Performed(java­.awt.event.Ac­tionEvent evt) {
try {
DefaultTableModel tm = (DefaultTableModel) jTable1.getModel();
tm.removeRow (jTable1.getSe­lectedRow());
jTable1.setMo­del(tm);
//ciste polia

jTextField1.set­Text(null);
jTextField2.set­Text(null);
jTextField3.set­Text(null);
jTextField4.set­Text(null);
jTextField1.re­questFocus();

}catch (Exception ex) {

}
}

/**
* @param args the command line arguments
/
public static void main(String args[]) {
/
Set the Nimbus look and feel /
//<editor-fold defaultstate="co­llapsed" desc=" Look and feel setting code (optional) ">
/
If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/…el/plaf.html
*/
try {
for (javax.swing.U­IManager.LookAn­dFeelInfo info : javax.swing.U­IManager.getIn­stalledLookAn­dFeels()) {
if ("Nimbus".equ­als(info.getNa­me())) {
javax.swing.U­IManager.setLo­okAndFeel(info­.getClassName());
break;
}
}
} catch (ClassNotFoundEx­ception ex) {
java.util.log­ging.Logger.get­Logger(NewJFra­meTabulka.clas­s.getName()).log(ja­va.util.loggin­g.Level.SEVERE, null, ex);
} catch (Instantiatio­nException ex) {
java.util.log­ging.Logger.get­Logger(NewJFra­meTabulka.clas­s.getName()).log(ja­va.util.loggin­g.Level.SEVERE, null, ex);
} catch (IllegalAcces­sException ex) {
java.util.log­ging.Logger.get­Logger(NewJFra­meTabulka.clas­s.getName()).log(ja­va.util.loggin­g.Level.SEVERE, null, ex);
} catch (javax.swing.Un­supportedLookAn­dFeelException ex) {
java.util.log­ging.Logger.get­Logger(NewJFra­meTabulka.clas­s.getName()).log(ja­va.util.loggin­g.Level.SEVERE, null, ex);
}
//</editor-fold>

/* Create and display the form */
java.awt.Even­tQueue.invoke­Later(new Runnable() {
public void run() {
new NewJFrameTabul­ka().setVisible(tru­e);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JScro­llPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JTex­tField jTextField1;
private javax.swing.JTex­tField jTextField2;
private javax.swing.JTex­tField jTextField3;
private javax.swing.JTex­tField jTextField4;
// End of variables declaration
}

 
Odpovědět
11.3.2013 15:40
Avatar
Зайчик
Člen
Avatar
Nahoru Odpovědět
11.3.2013 15:56
Коммунизм для нашего будущего!
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:11.3.2013 16:09

Možná by bylo lepší zapomenout na soubory a použít databázi.

Nahoru Odpovědět
11.3.2013 16:09
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Vera
Neregistrovaný
Avatar
Vera:11.3.2013 21:14

Mne by uplne stacilo, keby to vytvorilo subor.txt a tam ulozilo data...ale neviem ako na to ...

 
Nahoru Odpovědět
11.3.2013 21:14
Avatar
Vera
Neregistrovaný
Avatar
Vera:11.3.2013 22:33

Nakoniec by som to chcela urobiť takto: do JFrameTabulky som si pridala tlacidlo "Ulozit"...po jeho stlaceni mi zadane udaje niekde ulozi.

 
Nahoru Odpovědět
11.3.2013 22:33
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:12.3.2013 10:10

Uložení tabulky je velmi jednoduché a docílíš ho tímto kódem:

TableModel model = table.getModel();

for( int i = 0; i < model.getRowCount(); i++ )
{
   for( int i = 0; i < model.getColumnCount(); j++ )
   {
   fileWriter.write( model.getValueAt( i, j );
   }
}

fileWriter si vytvoř někde nahoře a nasměruj ho na konkrétní soubor.

Nahoru Odpovědět
12.3.2013 10:10
New kid back on the block with a R.I.P
Avatar
Vera
Neregistrovaný
Avatar
Odpovídá na David Hartinger
Vera:15.3.2013 11:32

Pri tom druhom for...ma byt i alebo j? a prosim nemohol by si mi napisat kde to vlastne mam napisat?
Ja som chcela aby to po stlaceni tlacidla "ulozit" ulozilo do suboru. Tak som to vlastne dala ako akciu k tlacidlu....a pisala som to tam, ale stale mi vyhadzovalo nejake chyby. Prosim mohol by si mi tam uviest cely kod k tomu tlacidlu, aj vratane filewritera a jeho nasmerovania.­..Diky.

 
Nahoru Odpovědět
15.3.2013 11:32
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.