Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako postaviti događaj u JComboBox-u unutar JTable-a?

[es] :: Java :: Kako postaviti događaj u JComboBox-u unutar JTable-a?

[ Pregleda: 1145 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

KodarMAX
Darko Jovanovic
Beograd

Član broj: 45469
Poruke: 7
*.adsl-3.sezampro.yu.



Profil

icon Kako postaviti događaj u JComboBox-u unutar JTable-a?29.11.2009. u 11:32 - pre 175 meseci
Reč je o klijent server desktop aplikaciji. Na strani klijenta je implementiran GUI i unutar njega JTable sa 4 JComboBoxa:
Code:
jTable1 = new javax.swing.JTable();

jTable1.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
        {1, null, null, null, null}
    },
    new String [] {
        "RB", "Naziv", "Tip", "Kamera", "Zoom i opseg"
    }
) {
    Class[] types = new Class [] {
        java.lang.Integer.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
    };
    boolean[] canEdit = new boolean [] {
        false, true, true, true, true
    };

    public Class getColumnClass(int columnIndex) {
        return types [columnIndex];
    }

    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return canEdit [columnIndex];
    }
});


this.napuniComboNaziv(comboNaziv);
this.napuniComboTip(comboTip);
this.napuniComboKamera(comboKamera);
this.napuniComboZoomIOpseg(comboZoomIOpseg);

jTable1.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(comboNaziv));
jTable1.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(comboTip));
jTable1.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(comboKamera));
jTable1.getColumnModel().getColumn(4).setCellEditor(new DefaultCellEditor(comboZoomIOpseg));

Dakle, u II, III, IV i V koloni tabele su setovani combo boxovi preko setCellEditor-a.
Svaki combo box je napunjen elementima iz baze koja se nalazi na serveru (tabela u Accessu, svaka kolona puni po jedan combo).
Ideja je da korisnik može slobodno da bira iz jTable1 naziv, tip, kameru ili zoom na sledeći način:

Klikom na ćeliju recimo u koloni Naziv otvara se combo sa svim elementima učitanim iz baze. Izborom jednog od elemenata, serveru se šalje poruka na osnovu koje se formira sql upit (tipa "SELECT * FROM Oprema WHERE Naziv='naziv') i iz baze se vraća redukovan sadržaj tabele kojim se ponovo pune combo boxovi tako da već klikom na sledeću preostalu ćeliju combo prikaže taj redukovani sadrzaj.
Problem je što nijedan Listener ne zadovoljava.
Kada postavim ActionListener na svaki kombo zapadne u beskonacnu petlju, jer se listener aktivira ne samo prlikom izbora elementa iz combo boxa, već i prilikom učitavanja sadržaja u combo boxove, i tada se pokreće listener za svaki combo box posebno, i opet učitavanje iz tabele i tako u krug.
Code:
private void comboNazivActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
        int rb = jTable1.getSelectedRow();
        if (rb == -1) {
            return;
        }

        JComboBox cb = (JComboBox) evt.getSource();
        if (cb.getSelectedItem() == null) {
            return;
        }
        String naziv = cb.getSelectedItem().toString();
        azurirajStavkeUzeteOpreme(sifraOdjavnice, naziv, "", "", "");
    }

ItemStateChanged takođe ne radi na ovaj način, dok MouseListenere uopste ne tretira (a idealan bi bio MouseReleased).
Interesuju me vaša mišljenja, i da li ima rešenja.

Unapred hvala!
"Our greatest glory is not in never falling,but in rising every time we fall."
 
Odgovor na temu

[es] :: Java :: Kako postaviti događaj u JComboBox-u unutar JTable-a?

[ Pregleda: 1145 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.