Visualizzazione dei risultati da 1 a 8 su 8

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Quote Originariamente inviata da andbin Visualizza il messaggio

    Per questo, JTable ha metodi appositi di "traslazione" degli indici quali convertColumnIndexToModel, convertColumnIndexToView, ecc...
    Dove vanno applicati questi metodi?
    Sugli indici?

    P.S. fare accessi con es.:

    InterfacciaPrincipale.campoRicerca.getText()
    InterfacciaPrincipale.Jtable.setRowSelectionInterval

    ovvero campi statici e pubblici di dati o addirittura componenti grafici, denota un pessimo design delle classi. Mi spiace ma è così ...
    Mi butti a terra... :-) :-)

    Quale soluzione avrei dovuto adottare?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Dove vanno applicati questi metodi?
    Sugli indici?
    Sì, sugli indici ovviamente. I metodi di traslazione offerti da JTable servono in alcune precise circostanze (non sto a fare esempi adesso). Però nel tuo caso non è detto che servono.

    Nota che nel tuo codice hai usato getValueAt sul table model (quindi riga/colonna sono nel "model") e poi hai usato quella riga per setRowSelectionInterval di JTable, che ovviamente è nella "view".

    È questo che può portare a discrepanze. Se un valore lo trovi alla riga 10 nel model ..... se c'è un ordinamento sulla tabella, non è detto che si trovi fisicamente sulla riga 10 nella vista in JTable!

    La soluzione è semplice e non implica necessariamente l'uso esplicito dei metodi di traslazione: semplicemente usa getRowCount / getColumnCount / getValueAt di JTable.

    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Mi butti a terra... :-) :-)
    Beh no dai ... non era quello l'obiettivo!

    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Quale soluzione avrei dovuto adottare?
    Il punto è che serve avere ben chiari i principi della OOP e magari anche alcuni dei più noti e comuni design pattern. Tanto per dirne una, se la funzionalità di ricerca nella tabella è da fare su più tabelle distinte, magari presenti in pannelli/finestre differenti, a me già verrebbe in mente di estendere JTable e incapsulare lì dentro la logica di ricerca.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Quote Originariamente inviata da andbin Visualizza il messaggio
    La soluzione è semplice e non implica necessariamente l'uso esplicito dei metodi di traslazione: semplicemente usa getRowCount / getColumnCount / getValueAt di JTable.
    Non ho capito ; getRowCount / getColumnCount li ho utilizzati nei for , getValueAt l'ho usato pure.

    codice:
    public void actionPerformed(ActionEvent e){
    		
    String elementoDaCercare = new String(InterfacciaPrincipale.campoRicerca.getText());
    int risultato = InterfacciaPrincipale.Magazzino.cercaArticolo(elementoDaCercare);
     if(risultato == -1)
      new NotificaNessunArticoloPresente();
        else{
         for(int row = 0 ; row <= InterfacciaPrincipale.modelloJTable.getRowCount() - 1; row++){
    	for(int col = 0 ; col <= InterfacciaPrincipale.modelloJTable.getColumnCount() -1 ; col++){
    	   if(elementoDaCercare.equals(InterfacciaPrincipale.modelloJTable.getValueAt(row, col)))
    		InterfacciaPrincipale.Jtable.setRowSelectionInterval(row, row);
    						
    				}//FOR 2
    			}//FOR 1
    	}// ELSE				
    }// ACTION PERFORMED
    Cioè vuoi dire che invece di setRowSelectionInterval devo utilizzare getValueAt per selezionare la riga?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Aspetta Aspetta....Ho capito.
    Io invocavo metodi su modelloJTable e su Jtable anzichè invocarli su uno solo dei due

    Cosi adesso mi funziona , anche se ordino la JTable

    publicvoid actionPerformed(ActionEvent e){

    String elementoDaCercare =newString(InterfacciaPrincipale.campoRicerca.getText());
    int risultato =InterfacciaPrincipale.Magazzino.cercaArticolo(elementoDaCercare);
    if(risultato ==-1)
    newNotificaNessunArticoloPresente();
    else{
    for(int row =0; row <=InterfacciaPrincipale.Jtable.getRowCount()-1; row++){
    for(int col =0; col <=InterfacciaPrincipale.Jtable.getColumnCount()-1; col++){
    if(elementoDaCercare.equals(InterfacciaPrincipale.Jtable.getValueAt(row, col)))
    InterfacciaPrincipale.Jtable.setRowSelectionInterval(row, row);

    }//FOR 2
    }//FOR 1
    }// ELSE
    }// ACTION PERFORMED

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Pardon

    codice:
    publicvoid actionPerformed(ActionEvent e){
    
    String elementoDaCercare =newString(InterfacciaPrincipale.campoRicerca.getText());
     int risultato =InterfacciaPrincipale.Magazzino.cercaArticolo(elementoDaCercare);
      if(risultato ==-1)
       newNotificaNessunArticoloPresente();
       else{
         for(int row =0; row <=InterfacciaPrincipale.Jtable.getRowCount()-1; row++){
          for(int col =0; col <=InterfacciaPrincipale.Jtable.getColumnCount()-1; col++){
           if(elementoDaCercare.equals(InterfacciaPrincipale.Jtable.getValueAt(row, col)))
             InterfacciaPrincipale.Jtable.setRowSelectionInterval(row, row);
    
           }//FOR 2
         }//FOR 1
       }// ELSE 
    }// ACTION PERFORMED
    
    

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.