Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [Java] Due comandi non eseguiti insieme

    Salve, ho questo algoritmo legato a un evento del mouse:
    codice:
    private void jLabel1MouseEntered(java.awt.event.MouseEvent evt) {                                     
        int randomx, randomy, randomex, prex, prey;
        prey = jLabel1.getY();
        prex = jLabel1.getX();    
        do randomx = (int)(Math.random() * 1000);
        while (randomx >= 350);
        do randomy = (int)(Math.random() * 1000);    
        while (randomy >= 350);
        if ((randomy >= 500) && (randomx >= 500))
        {
            randomy = 100;randomx = 150;
        }
        jLabel1.setBounds(randomx, randomy, 130, 18);
        jLabel5.setText(String.valueOf(Integer.parseInt(jLabel5.getText())+1));
        
        
        randomx = randomy = 401;
        }
    sapete dirmi perchè il codice della label5 lo esegue e l'altro no?è strano, se tolgo il codice della label5 torna tutto a funzionare normale...in qualunque posizione metto l' istruzione di cambiare posizione alla label1 non va...aiuti?grazie

  2. #2
    Hai provato a fare debug?
    Poi per favore dicci la riga precisa, non "il codice di label1" che non si capisce molto bene di cosa parli
    lolide
    Java Programmer

    Informati

  3. #3
    Se metto questa istruzione
    jLabel5.setText(String.valueOf(Integer.parseInt(jL abel5.getText())+1));
    Poi non mi fa il setbounds dell' altra...è molto strano!credo sia qlcs proprio del java o netbeans,il controllo del processo passa ad altro e non continua l'esecuzione del codice :/

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    1) Sai cos'è un LayoutManager, come si usa e come si fa a, eventualmente, toglierlo di mezzo? Questo è fondamentale, altrimenti quel setBounds() non avrà alcun effetto.

    2) Non hai forzato né un repaint(), né un validate() dopo lo "spostamento" della JLabel... ergo, potresti non vedere mai lo spostamento se non effettui un "refresh" della finestra (ridimensionandola, spostandola, ecc).

    3) Il codice dell'ultimo if (quello che testa se randomx e randomy sono maggiori di 500) non verrà mai eseguito, poste le condizioni precedenti dei due do/while.

    4) So già che stai usando un IDE per lo sviluppo dell'applicazione Swing e che ne stai usando l'editor visuale... sappi solo che ti stai facendo tanto (ma tanto!) male.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Certo, sto usando NetBeans con le GUI Swing, la teoria l'ho studiata prima di passare la visuale con più del 75% del codice scritto dall' IDE!
    il repaint o refresh della finestra è inutile, senza l'istruzione sulla Label5 il setBound va perfettamente, è l'altra che in qualsiasi posizione del codice si trova la blocca...l' if lo so era solo per prova nel vecchio codice mi sono reso conto anch'io che era obsoleto
    ...altre proposte?

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Ho copiincollato pari pari il tuo codice in un programma scritto 100% col blocco note...

    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    
    public class SpostaLabel extends JFrame implements MouseListener {
       private JLabel jLabel1;
       private JLabel jLabel5;
    
       public SpostaLabel() {
          Container c = getContentPane();
          c.setLayout( null );
    
          jLabel1 = new JLabel("Label 1");
          jLabel1.setBounds(10, 10, 130, 18);
          jLabel1.addMouseListener( this );
    
          jLabel5 = new JLabel("5");
          jLabel5.setBounds(10, 100, 130, 18);
    
          c.add( jLabel1 );
          c.add( jLabel5 );
    
          setTitle("Sposta Label");
          setSize(800, 600);
          setDefaultCloseOperation( EXIT_ON_CLOSE );
          setVisible( true );
       }
    
       public void mouseExited(MouseEvent me) { }
       public void mouseClicked(MouseEvent me) { }
       public void mousePressed(MouseEvent me) { }
       public void mouseReleased(MouseEvent me) { }
    
       public void mouseEntered(MouseEvent evt) {                                     
          int randomx, randomy, randomex, prex, prey;
          prey = jLabel1.getY();
          prex = jLabel1.getX();    
          do randomx = (int)(Math.random() * 1000);
          while (randomx >= 350);
          do randomy = (int)(Math.random() * 1000);    
          while (randomy >= 350);
          if ((randomy >= 500) && (randomx >= 500)) {
             randomy = 100;randomx = 150;
          }
          jLabel1.setBounds(randomx, randomy, 130, 18);
          jLabel5.setText(String.valueOf(Integer.parseInt(jLabel5.getText())+1));
    
          randomx = randomy = 401;
       }
       public static void main(String[] args) {
          SpostaLabel sl = new SpostaLabel();
       }
    }
    Ora, a te capire perchè quello scritto 75% ide non funziona, quello scritto 100% uomo non ha problemi.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Grazie cerchero di imparare
    Ora,perche con tanta insistenza escludi l'uso dell'ide prediliggendo smpr uno scarno blocco note?come posizioni precisamente in una form degli elemeti semplicemente scrvendoli con blocco note?non è comodo un ide?che mi consigli di fare?

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da celtico94
    Grazie cerchero di imparare
    Ora,perche con tanta insistenza escludi l'uso dell'ide prediliggendo smpr uno scarno blocco note?come posizioni precisamente in una form degli elemeti semplicemente scrvendoli con blocco note?non è comodo un ide?che mi consigli di fare?
    Suppongo intendesse suggerirti che, come sempre, ciò che è scomodo è ciò che fa imparare.
    L'esempio del blocco note è ovviamente esagerato, ma (almeno all'inizio) scrivere a mano le interfacce grafiche partendo dal nulla, senza tool grafici, ti permette (anzi, obbliga) a capire a fondo il funzionamento di Swing, dei layout manager e compagnia. Questo ti permetterà anche di sfruttare meglio tool "comodi", risparmiando tempo e quindi forse denaro.
    Anche con automatismi del genere bisogna essere in grado di risolvere piccoli problemi, altrimenti non si risparmia molto tempo.

    Per posizionare gli elementi, beh, basta disegnarsi/immaginarsi ciò che si vuole fare e scrivere le relative coordinate in pixel (oppure no se si usano layout manager), ovvio nessuno è una macchina e poi tutto va controllato, ma si può fare "alla buona" e perfezionare dopo.

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.