Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140

    Jtable, si ricorda cosa seleziono e lo copia in un altra cella

    Ciao a tutti,
    sto impazzendo con le JTable...
    Ho il seguente problema: ho una tabella e in base a cosa clicco mi deve fare vedere determinate pietanze (primi piatti, secondi piatti ecc..). Questo penso di averlo realizzato abbastanza correttamente. Il punto è che se seleziono una riga nella visualizzazione primi piatti e poi apro la tabella secondi piatti ed evidenzio una riga mi copia quello che c'era nella riga dei primi piatti? Non so se qlcn ha capito...
    Ho appena iniziato ad usare le Jtable e ho usato il modello di default. Per ora preferirei continuare senza un modello personalizzato.

    Posto un pò di codice...

    public class GuiScontrino extends JFrame implements ActionListener{
    private JScrollPane sp1;
    private JTable table;
    private JPanel center;
    public GuiScontrino(){ ......}

    public void actionPerformed(ActionEvent e){
    System.out.println("primoaction");
    ArrayList<Pietanza> perTable=new ArrayList<Pietanza>(GuiInizio.mpartenza.piet.value s());
    String nomeColonne[]={" ", "Codice", "Quantità", "Descrizione", "Costo unitario", "Totale"};
    int numRighe=GuiInizio.mpartenza.piet.size(); //numero pietanze=numero righe
    int numColonne=6; //numero colonne
    Object[][] dati = new Object[numRighe][numColonne];
    int i=0;
    int j=0;
    Object bottone=e.getSource();
    if(bottone==primi)
    {
    for(Pietanza cerTable){
    if(c.getCategoria().toString().equalsIgnoreCase("P RIMI"))
    {
    dati [i][j+1]=c.getCodice();
    dati [i][j+3]=c.getDescrizione();
    dati [i][j+4]=c.getCosto();
    i++;
    }
    }
    }
    else if(bottone==secondi)
    {
    for(Pietanza cerTable){
    if(c.getCategoria().toString().equalsIgnoreCase("S ECONDI"))
    {
    dati [i][j+1]=c.getCodice();
    dati [i][j+3]=c.getDescrizione();
    dati [i][j+4]=c.getCosto();
    i++;
    }
    }
    }
    ecc...ecc...

    table = new JTable(dati,nomeColonne);
    sp1=new JScrollPane(table);
    center=new JPanel();
    center.add(sp1);
    this.add(center,BorderLayout.CENTER);
    this.validate();
    }



    GRAZIE

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    Usa i tag code, così il codice è più leggibile:
    codice:
    public class GuiScontrino extends JFrame implements ActionListener{
       private JScrollPane sp1;
       private JTable table;
       private JPanel center;
       public GuiScontrino(){ ......}
    
       public void actionPerformed(ActionEvent e){
           System.out.println("primoaction");
           ArrayList<Pietanza> perTable=new ArrayList<Pietanza>(GuiInizio.mpartenza.piet.values());
           String nomeColonne[]={" ", "Codice", "Quantità", "Descrizione", "Costo unitario", "Totale"};
           int numRighe=GuiInizio.mpartenza.piet.size(); //numero pietanze=numero righe
           int numColonne=6; //numero colonne
           Object[][] dati = new Object[numRighe][numColonne]; 
           int i=0;
           int j=0; 
           Object bottone=e.getSource();
           if(bottone==primi)
           {
              for(Pietanza c:perTable){
                 if(c.getCategoria().toString().equalsIgnoreCase("PRIMI"))
                 {
                    dati [i][j+1]=c.getCodice();
                    dati [i][j+3]=c.getDescrizione();
                    dati [i][j+4]=c.getCosto();
                    i++;
                 }
              }
           }
           else if(bottone==secondi)
           {
              for(Pietanza c:perTable){
                 if(c.getCategoria().toString().equalsIgnoreCase("SECONDI"))
                 {
                    dati [i][j+1]=c.getCodice();
                    dati [i][j+3]=c.getDescrizione();
                    dati [i][j+4]=c.getCosto();
                    i++;
                 }
           }
    ecc...ecc...
    
    table = new JTable(dati,nomeColonne);
    sp1=new JScrollPane(table);
    center=new JPanel();
    center.add(sp1);
    this.add(center,BorderLayout.CENTER);
    this.validate();
    }
    E' difficile capire qual è il problema, visto che non hai postato tutto il codice, ma posso azzardare un'ipotesi:
    penso che il problema sia dato dal fatto che non vai a modificare j nei codice.. usi la stessa j sia nei primi che nei secondi...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140
    ho allegato un'immagine dell'interfaccia. In questo caso ho cliccato sul pulsante primi e la tabella è esatta. Successivamente clicco su secondi e la tabella si riempie correttamente.
    Mi gioca brutti scherzi la selezione delle righe. ovvero se io seleziono la riga risotto cliccandoci su, poi magari apro la tabella secondi (che si apre correttamente) e vado a cliccare su una riga qualsiasi mi mette il risotto...

    metto tutto il codice...

    public class GuiScontrino extends JFrame implements ActionListener{
    private JButton extra,primi,secondi,contorni,bevande,stampa,regist ra;
    private JScrollPane sp1;
    private JTable table;
    private JPanel center;

    public GuiScontrino(){
    super("pippo");
    setSize(1200,750);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    setLayout(new BorderLayout());
    extra=new JButton("Inizio e Altro");
    primi=new JButton("Primi");
    secondi=new JButton("Secondi");
    contorni=new JButton("Contorni");
    bevande=new JButton("Bevande");
    stampa=new JButton("Stampa scontrino");
    registra=new JButton("Registra senza stampare");
    extra.addActionListener(this);
    primi.addActionListener(this);
    secondi.addActionListener(this);
    contorni.addActionListener(this);
    bevande.addActionListener(this);
    JPanel south=new JPanel();
    south.add(extra);
    south.add(primi);
    south.add(secondi);
    south.add(contorni);
    south.add(bevande);
    south.add(stampa);
    south.add(registra);
    this.add(south,BorderLayout.SOUTH);
    }

    public void actionPerformed(ActionEvent e){
    ArrayList<Pietanza> perTable=new ArrayList<Pietanza>GuiInizio.mpartenza.piet.values ());
    String nomeColonne[]={" ", "Codice", "Quantità", "Descrizione", "Costo unitario", "Totale"};
    int numRighe=GuiInizio.mpartenza.piet.size(); //numero pietanze=numero righe
    int numColonne=6; //numero colonne
    Object[][] dati = new Object[numRighe][numColonne];
    int i=0;
    int j=0;
    Object bottone=e.getSource();
    if(bottone==extra)
    {
    for(Pietanza cerTable){
    if(c.getCategoria().toString().equalsIgnoreCase("E XTRA"))
    {
    dati [i][j+1]=c.getCodice();
    dati [i][j+3]=c.getDescrizione();
    dati [i][j+4]=c.getCosto();
    i++;
    }
    }
    }
    else if(bottone==primi)
    {
    for(Pietanza cerTable){
    if(c.getCategoria().toString().equalsIgnoreCase("P RIMI"))
    {
    dati [i][j+1]=c.getCodice();
    dati [i][j+3]=c.getDescrizione();
    dati [i][j+4]=c.getCosto();
    i++;
    }
    }
    }
    else if(bottone==secondi)
    {
    for(Pietanza cerTable){
    if(c.getCategoria().toString().equalsIgnoreCase("S ECONDI"))
    {
    dati [i][j+1]=c.getCodice();
    dati [i][j+3]=c.getDescrizione();
    dati [i][j+4]=c.getCosto();
    i++;
    }
    }
    }
    else if(bottone==contorni)
    {
    for(Pietanza cerTable){
    if(c.getCategoria().toString().equalsIgnoreCase("C ONTORNI"))
    {
    dati [i][j+1]=c.getCodice();
    dati [i][j+3]=c.getDescrizione();
    dati [i][j+4]=c.getCosto();
    i++;
    }
    }
    }
    else if(bottone==bevande)
    {
    for(Pietanza cerTable){
    if(c.getCategoria().toString().equalsIgnoreCase("B EVANDE"))
    {
    dati [i][j+1]=c.getCodice();
    dati [i][j+3]=c.getDescrizione();
    dati [i][j+4]=c.getCosto();
    i++;
    }
    }
    }

    table = new JTable(dati,nomeColonne);
    sp1=new JScrollPane(table);
    sp1.setVerticalScrollBarPolicy(ScrollPaneConstants .VERTICAL_SCROLLBAR_AS_NEEDED);
    center=new JPanel();
    center.add(sp1);
    this.add(center,BorderLayout.CENTER);
    this.validate();
    }


    Scusate ma nn uso mai i forum: come si mettono i tag? seconda domanda: io ho messo l'allegato ma quando visualizzo l'anteprima non lo vedo...
    Immagini allegate Immagini allegate
    • Tipo di file: jpg 3.jpg‎ (17.6 KB, 73 visualizzazioni)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140
    non c'è nessuno che sa come aiutarmi? ormai ne va della mia salute mentale! ;-)

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    Forse ho capito qual è il problema: aggiungi più volte il pannello center al frame senza mai rimuoverlo..
    Basta aggiungere le seguenti linee di codice all'inizio dell'actionPerformed:
    codice:
    if(center!=null)
        this.remove(center);

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140
    sei un genio!!! Grazie di cuore, non ce la facevo più! Posso chiederti un altro consiglio? devo visualizzare la formazione di uno scontrino man mano che seleziono le voci nella tabella. Lo scontrino avrà anche un'intestazione con un logo. Tu come lo realizzeresti? Io avevo pensato ti stamparlo su una JTextArea, ma il problema è il logo... in una textarea se non sbaglio posso mettere solo testo.. grazie ancora

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    Devi mettere l'immagine in una JLabel.. magari potresti creare un nuovo pannello con BorderLayout. A north metti l'immagine e al centro la JTextArea...
    Per la stampa puoi guardare qui
    Basta mandare a questa classe il pannello contenente lo scontrino

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140
    ciao a tutti.. ho un altro problema con una seconda Jtable!
    la jtablemi visualizza un arrayList in cui vanno a finire tutti i piatti che il tavolo X ha preso. Funziona tutto tranne la seguente cosa: se clicco su insalata sulla prima tabella giustamente mi va a finire nella seconda, ma supponiamo che ho sbagliato a cliccare su un piatto (cioè i clienti non hanno ordinato questa cavolo di insalata) clicco su un pulsante che mi decrementa la quantità e me la riporta a zero nella prima tabella. ma nella seconda continua a rimanere la riga. Ho controllato e nell'array il piatto insalata se ne va, ho usato il metodo fireTableDataChanged(). E il metodo fireTableRowsDeleted(row,row);

    Vi posto il mio setValue...

    public void setValueAt(Object value, int row, int col){
    Pietanza p=(Pietanza)arrayP.get(row);
    if(col==2){
    int ord=p.getOrdinata(); //vecchio valore che uso per il confronto
    p.setOrdinata(((Integer)value).intValue()); //cambio valore
    if(ord < ((Integer)value).intValue()) { //INCREMENTO
    if(((Integer)value).intValue()!=0)
    GuiScontrino.perScontrino.remove(p);
    GuiScontrino.perScontrino.add(p);
    }
    else if(ord > ((Integer)value).intValue()){ //DECREMENTO
    GuiScontrino.perScontrino.remove(p);
    if(ord>1){
    GuiScontrino.perScontrino.add(p);
    }
    else{
    fireTableRowsDeleted(row,row);
    }
    }
    GuiScontrino.stampaScontrino();
    }
    fireTableDataChanged();
    }


    è a funzione stampaScontrino che mi legge l'array mi crea il modello e la tabella....
    dove sbaglio???
    Grazie

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    140
    fr84 mi hai abbandonata??!!

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    Quindi hai bisogno di cancellare una riga da una tabella..
    Come hai costruito la tabella?
    Hai usato il costruttore JTable(Object[][],Object[]) come per la tabella postata in precedenza?
    in tal caso sostituisci
    codice:
    table = new JTable(dati,nomeColonne);
    con
    codice:
    DefaultTableModel model= new DefaultTableModel(dati,nomeColonne);
    table = new JTable(model);
    Per aggiungere o rimuovere una riga basta usare i metodi di DefaultTableModel (addRow e removeRow)
    Guarda qui per ulteriori dettagli

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.