Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Něco navíc v zeleném?
A proč ne...

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Klub Programování [ŽP: neomezená] (kategorie Programování) moderuje tvx.
Archiv
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
 Titulek, text příspěvku  
Opište pozpátku následující text bez prostředního znaku: obkzhoy
[ 857 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
puschpull puschpull být nad věcí, pohoda a klid ... - AV-Com (Homepage) 2.6.2011 19:48  1274
dotazKluk by mohl začít něco okolo programování.
On by chtěl, já také, raději ať se mu už trochu formuje myšlení (což už u mě moc nejde)
Nyní končí 7. třídu ZŠ.

Potřebuji poradit, jaké zvolit na tento začátek vývojové protředí, jaký jazyk, aby si vytvořil nějaké základní návyky, které by mu později pomohly ...

Netuším zda volit C/+/++, Python, Java, Visual Basic, nebo něco úplně jiného. (Ve škole žádný kroužek nemají, repektive něco tam měli, ale sestávalo se to nakonec z hraní her na starých počítačích ...)

Doma samozřejmě hry hraje, na PC je pečenej vařenej, umí docela dobře design (intenzivně si pracuje s Photoshopem, občas i vyhraje nějakou soutěž, okolo návrhů v oblasti nových her, a celkem si věří)
Chci ho popostrčit, aby trochu ochutnal i programování a pocítil radost z toho, když kód dělá to, co by měl
:-)

Díky za každou dobrou radu.
dodanek Dodanek 22.5.2011 12:51  1272
Už to asi mám.
dodanek Dodanek 22.5.2011 12:43  1271
CHYBA: Nelze vytvorit soubor. EvidenceZamestnancu.dat (Požadovanou operaci nelze provést se souborem, jehož uživateli mapovaný oddíl je otevřen)

Chápu dobře, že se to snaží zapisovat do souboru, kterej je ve třídě, která se snaží volat to zapisování, otevřenej?
huh huh 22.5.2011 11:20  1270
Dodanek [1265]: Tak v zásadě stačí, když tu instanci evidence drží Model. Ono je to tak skoro lepší, protože pak se veškeré změny dělají prostřednictvím Modelu a nehrozí, že ti někdo evidenci změní, aniž by byl model informován.

Dodanek [1268]: já bych si zkotroloval, co ti po tom smazání vrací getRowCount(), potažmo evidence.pocet();
dodanek Dodanek 22.5.2011 11:05  1269
Ale každopádně mi to rozšířilo obzory, dokonce chápu, proč to nefungovalo a proč to (až na to o trochu níž) funguje! :)
dodanek Dodanek 22.5.2011 10:22  1268
Tak mazání funguje, děkuju a chtěl bych říct, že to fakt nechápu, protože:

public void odeber(int row) {
evidence.deletePolozka(evidence.getPolozka(row));
fireTableRowsDeleted(row - 1, row - 1);
}
jede tak, jak má, a když tam není -1, tak jede tak, jak má, jen ne pro poslední řádku .. z toho plyne, že nechápu, jak se v tomhle případě maže ta správná :D
operator304 22.5.2011 09:44  1267
Snazis se pristupovat k nejakymu poli, ktery je moc kratky...

Proste do pole o delce 5 cpes sestou polozku. Pole narozdil od kolekci neni nafukovaci...
dodanek Dodanek 22.5.2011 09:41  1266
Výborný. Tak mi to funguje, ale padá mi to při padání poslední položky v seznamu (vždy). java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
dodanek Dodanek 22.5.2011 09:13  1265
Moc děkuju. Celý to ztroskotává asi v celym návrhu (kterej dělala Alenka Buchalcevová), ve kterym v tý gui třídě, která drží tabulku a tlačítka, není o existenci nějaký evidence ani tušení. Já se v tom nějak porejpu, ten příklad mi pomůže :)
huh huh 22.5.2011 01:47  1264
Tady je spustitelný příklad. Je to narychlo zbastlený do příkladu na řazení JTable podle sloupců toho si nevšímej. Data to na disk nezapisuje/nečte, ale je to na to připravený (pomocí serializace -- v zásadě mnohem jednodušší než se patlat s tím ručně).
huh huh 22.5.2011 01:39  1263
Tohle:

class DeleteZamestnanecActionListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

EvidenceZamestnancu temp = new EvidenceZamestnancu();
TableZamestnanec.addTableModelListener(evidenceTable);
temp.nactiSeznam();

temp.deletePolozka(temp.getPolozka(vybranyRadek));

temp.ulozSeznam();
}

je celý nějaká blbost.

MVC u JTable funguje (zjednodušeně pro tenhle příklad) takhle:
1) máš svůj byznys objekt, v tvém případě instanci EvidenceZamestnancu. Tu vytvoříš na začátku programu. Žádnou jinou instanci už během programu nevytváříš! (Leda bys chtěl mít několik navzájem nezávislých evidencí.)
2) Tu zobrazuješ pomocí instancí JTable (ty fungují jako View a Controller). V našem případě je jen jedna, ale mohlo by jich být více.
3) Jenomže JTable nezná naši evidenci zaměstnanců. Co s tím? Vytvoříme 1 instanci Modelu, který zapouzdří 1 instanci naší evidence. Modelem je myšlena naše vlastní třída implementující TableModel.
4) chceme-li pak např. mít tlačítko, které smaže řádek vybraný v tabulce. Jak na to? Do Modelu přidáme např. metodu odeber. Ta udělá dvě věci: a) řekne instanci EvidenceZamestnancu (té kterou si drží od začátku, žádnou další už si nevytváří!), aby záznam odebrala; b) zavolá fireXXX, v tomto případě fireTableRowsDeleted, aby se přihlášené instance View (JTable) dozvěděly o změně. V obsluze tlačítka pak jenom zavoláme odeber Modelu a předáme mu číslo mazaného řádku. Nějak takhle:
        JButton b = new JButton("Delete");
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (tab.getSelectedRowCount() > 0) {
                    ((DatovyModel)tab.getModel()).odeber(tab.getSelectedRows()[0]);                    
                }
            }
        });
Zapamatovat si: 1 instance byznys objektu, 1 instance modelu, libovolné množství instancí JTable.
dodanek Dodanek 21.5.2011 23:32  1262
Podle dokumentace by to, co potřebuju, měla dělat metoda

fireTableDataChanged

public void fireTableDataChanged()
Notifies all listeners that all cell values in the table's rows may have changed. The number of rows may also have changed and the JTable should redraw the table from scratch. The structure of the table (as in the order of the columns) is assumed to be the same.

Nicméně tu, co tam mám, musim taky nějak naimplementovat, ale vůbec netuším, jak.
dodanek Dodanek 21.5.2011 23:25  1261
No nic, já na to seru. Pokud by někdo byl tak boží a našel v tom mou chybu, nabízím sestru a půl království. Nejsem si úplně jistej, co je přesně to "e" u tableChanged, možná v tom tkví chyba.


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package gui;

import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import logika.EvidenceZamestnancu;
import logika.Zamestnanec;

/**
*
* @author Ondra
*/
public class TableZamestnanec extends AbstractTableModel implements TableModelListener {

private EvidenceZamestnancu evidence;
String[] zahlaviSloupcu = {"ID", "Jmeno", "Prijmeni", "Práce", "Rodné číslo", "Telefon", "Adresa"};

public TableZamestnanec(EvidenceZamestnancu evidence) {
this.evidence = evidence;
}

@Override
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}

@Override
public String getColumnName(int col) {
return zahlaviSloupcu[col];
}

public int getRowCount() {
return evidence.pocet();
}

public int getColumnCount() {
return 7;
}

public Object getValueAt(int row, int col) {
// naplneni seznamu

Zamestnanec polozka = (Zamestnanec) evidence.getPolozka(row);
switch (col) {
case 0:
return (polozka.getID());
case 1:
return (polozka.getJmeno());
case 2:
return (polozka.getPrijmeni());
case 3:
return (polozka.getPrace());
case 4:
return (polozka.getRodneCislo());
case 5:
return (polozka.getTelefon());
case 6:
return (polozka.getAdresa());
default:
return null;
}

}

public void tableChanged(TableModelEvent e) {
evidence.nactiSeznam();
fireTableChanged(e);

}
}

----------------------------------------------------------------


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import logika.EvidenceZamestnancu;
import logika.Zamestnanec;

/**
*
* @author Ondra
*/
public class OknoZamestnanec {

private JFrame OknoZamestnanecFrame;
private JPanel westPanel;
private JPanel centerPanel;
private JButton newButton;
private JButton editButton;
private JButton deleteButton;
private JButton backButton;
private JPanel mistoPanel;
private JTextField zobrazTextField;
private Menu menu;
private NewZamestnanec newZamestnanec;
private TableModel TableZamestnanec;
private JTable evidenceTable;
private int vybranyRadek;

public OknoZamestnanec(TableModel model) {
this.TableZamestnanec = model;
init();
setVisible(true);

}

private class VyberRadku implements ListSelectionListener {

public void valueChanged(ListSelectionEvent e) {
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
if (!lsm.isSelectionEmpty()) {
vybranyRadek = lsm.getMinSelectionIndex();
}
zobrazTextField.setText((String) TableZamestnanec.getValueAt(vybranyRadek, 1));
}
}

/**
* Metoda inicializuje a propojuje jednotlivé komponenty GUI
*/
private void init() {

OknoZamestnanecFrame = new JFrame();
menu = new Menu();

OknoZamestnanecFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
OknoZamestnanecFrame.setTitle("Evidence Zaměstnanců");
OknoZamestnanecFrame.setSize(700, 400);
OknoZamestnanecFrame.setLocation(200, 200);
OknoZamestnanecFrame.setJMenuBar(menu);
OknoZamestnanecFrame.setResizable(false);

westPanel = new JPanel();


westPanel.setLayout(new FlowLayout());
westPanel.setPreferredSize(new Dimension(140, 400));
newButton = new JButton("Nový");
newButton.addActionListener(new NewZamestnanecActionListener());
editButton = new JButton("Edit");
deleteButton = new JButton("Smaž");
deleteButton.addActionListener(new DeleteZamestnanecActionListener());

backButton = new JButton("Zpět");
backButton.addActionListener(new BackActionListener());

newButton.setPreferredSize(new Dimension(120, 25));
editButton.setPreferredSize(new Dimension(120, 25));
deleteButton.setPreferredSize(new Dimension(120, 25));
backButton.setPreferredSize(new Dimension(120, 25));


mistoPanel = new JPanel();
mistoPanel.setPreferredSize(new Dimension(140, 210));


westPanel.add(newButton);
westPanel.add(editButton);
westPanel.add(deleteButton);
westPanel.add(mistoPanel);
westPanel.add(backButton);




evidenceTable = new JTable(TableZamestnanec);
evidenceTable.setPreferredScrollableViewportSize(new Dimension(540, 400));
evidenceTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ListSelectionModel modelVyberu = evidenceTable.getSelectionModel();

modelVyberu.addListSelectionListener(new VyberRadku());
JScrollPane scpRoluj = new JScrollPane(evidenceTable);
OknoZamestnanecFrame.add(scpRoluj, BorderLayout.CENTER);
zobrazTextField = new JTextField(30);
// OknoZamestnanecFrame.add(zobrazTextField, BorderLayout.SOUTH);

OknoZamestnanecFrame.add(westPanel, BorderLayout.WEST);

}

class BackActionListener implements ActionListener {

public void actionPerformed(ActionEvent e) {
setVisible(false);
}
}

class DeleteZamestnanecActionListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

EvidenceZamestnancu temp = new EvidenceZamestnancu();
TableZamestnanec.addTableModelListener(evidenceTable);
temp.nactiSeznam();

temp.deletePolozka(temp.getPolozka(vybranyRadek));

temp.ulozSeznam();
}
}

class NewZamestnanecActionListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

NewZamestnanec newZamestnanec = new NewZamestnanec();
newZamestnanec.setVisible(true);
}
}

/**
* Metoda, která zviditelňuje GUI
* @param viditelnost GUI
*/
public void setVisible(boolean viditelnost) {
OknoZamestnanecFrame.setVisible(viditelnost);
}
}
dodanek Dodanek 21.5.2011 22:50  1260
TableZamestnanec.addTableModelListner(evidenceTable); nefunguje jenom proto, že jsem kokot a neumim napsat Listener. Jinak když tomu dám tu tabulku, tak se to přeloží, ale stejně to furt nejede :(
dodanek Dodanek 21.5.2011 22:44  1259
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.awt.event.ActionEvent cannot be cast to javax.swing.event.TableModelListener, překvapivě. Takže tohle je taky píčovina :)

[ 857 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt