[ KodarMAX @ 29.11.2009. 11:32 ] @
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!